From 5685984110be2c46317801831f26105e33c23afc Mon Sep 17 00:00:00 2001 From: Christopher Beaulieu Date: Fri, 15 May 2026 11:08:27 -0400 Subject: [PATCH 1/2] evaluation(rsl-siege-manager): capture dry-run results + verdict MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the rsl-siege-manager evaluation under a new `evaluations/` convention: - `evaluations/README.md` — directory index for future evaluations. - `evaluations/rsl-siege-manager/runbook.md` — methodology used (relocated from siege-web's `docs/experiments/graphify-dry-run.md`). - `evaluations/rsl-siege-manager/results.md` — decision log with quoted findings and acid-test scoring. Verdict: do not adopt. - `evaluations/rsl-siege-manager/graphify-out/` and `…-with-tests/` — raw artifacts (GRAPH_REPORT.md, graph.html, graph.json, manifest.json) so quoted findings stay auditable. AST cache excluded. Also extends `.gitignore` with a scoped exception so the rule that hides fresh `graphify-out/` from a developer's working checkout still applies, while committed evaluation artifacts under `evaluations/` are preserved. Co-Authored-By: Claude Opus 4.7 --- .gitignore | 5 + evaluations/README.md | 17 + .../graphify-out-with-tests/GRAPH_REPORT.md | 467 + .../graphify-out-with-tests/graph.html | 305 + .../graphify-out-with-tests/graph.json | 57397 ++++++++++++++++ .../graphify-out-with-tests/manifest.json | 1174 + .../graphify-out/GRAPH_REPORT.md | 233 + .../rsl-siege-manager/graphify-out/graph.html | 305 + .../rsl-siege-manager/graphify-out/graph.json | 26177 +++++++ .../graphify-out/manifest.json | 918 + evaluations/rsl-siege-manager/results.md | 194 + evaluations/rsl-siege-manager/runbook.md | 160 + 12 files changed, 87352 insertions(+) create mode 100644 evaluations/README.md create mode 100644 evaluations/rsl-siege-manager/graphify-out-with-tests/GRAPH_REPORT.md create mode 100644 evaluations/rsl-siege-manager/graphify-out-with-tests/graph.html create mode 100644 evaluations/rsl-siege-manager/graphify-out-with-tests/graph.json create mode 100644 evaluations/rsl-siege-manager/graphify-out-with-tests/manifest.json create mode 100644 evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md create mode 100644 evaluations/rsl-siege-manager/graphify-out/graph.html create mode 100644 evaluations/rsl-siege-manager/graphify-out/graph.json create mode 100644 evaluations/rsl-siege-manager/graphify-out/manifest.json create mode 100644 evaluations/rsl-siege-manager/results.md create mode 100644 evaluations/rsl-siege-manager/runbook.md diff --git a/.gitignore b/.gitignore index 0e6fc586..79df4222 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,11 @@ build/ *.egg .graphify/ graphify-out/ +# Committed evaluation artifacts under evaluations/ are intentional evidence — keep them +!evaluations/**/graphify-out/ +!evaluations/**/graphify-out-with-tests/ +!evaluations/**/graphify-out/** +!evaluations/**/graphify-out-with-tests/** .graphify_*.json .graphify_python .claude/ diff --git a/evaluations/README.md b/evaluations/README.md new file mode 100644 index 00000000..68dc1f9a --- /dev/null +++ b/evaluations/README.md @@ -0,0 +1,17 @@ +# Graphify Evaluations + +Per-codebase evaluations of [graphify](https://github.com/safishamsi/graphify) — runbook + captured artifacts + a written verdict. + +Each subdirectory is one evaluation: + +- A `runbook.md` capturing the methodology used at the time. +- A `results.md` documenting the run output, the acid-test scoring, and the adopt / don't-adopt decision. +- The raw `graphify-out/` directories (often two: one with tests excluded, one with tests included) so quoted findings remain auditable. + +## Evaluations + +| Codebase | Verdict | Date | +|---|---|---| +| [`rsl-siege-manager/`](./rsl-siege-manager/) | Do not adopt | 2026-05-15 | + +🤖 _Generated by Claude Code on behalf of @cbeaulieu-gt_ diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/GRAPH_REPORT.md b/evaluations/rsl-siege-manager/graphify-out-with-tests/GRAPH_REPORT.md new file mode 100644 index 00000000..ff96251d --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out-with-tests/GRAPH_REPORT.md @@ -0,0 +1,467 @@ +# Graph Report - . (2026-05-13) + +## Corpus Check +- cluster-only mode — file stats not available + +## Summary +- 1886 nodes · 3876 edges · 141 communities (89 shown, 52 thin omitted) +- Extraction: 90% EXTRACTED · 10% INFERRED · 0% AMBIGUOUS · INFERRED: 393 edges (avg confidence: 0.62) +- Token cost: 0 input · 0 output + +## Graph Freshness +- Built from commit: `6085fd66` +- Run `git rev-parse HEAD` and compare to check if the graph is stale. +- Run `graphify update .` after code changes (no API cost). + +## Community Hubs (Navigation) +- [[_COMMUNITY_Community 0|Community 0]] +- [[_COMMUNITY_Community 1|Community 1]] +- [[_COMMUNITY_Community 2|Community 2]] +- [[_COMMUNITY_Community 3|Community 3]] +- [[_COMMUNITY_Community 4|Community 4]] +- [[_COMMUNITY_Community 5|Community 5]] +- [[_COMMUNITY_Community 6|Community 6]] +- [[_COMMUNITY_Community 7|Community 7]] +- [[_COMMUNITY_Community 8|Community 8]] +- [[_COMMUNITY_Community 9|Community 9]] +- [[_COMMUNITY_Community 10|Community 10]] +- [[_COMMUNITY_Community 11|Community 11]] +- [[_COMMUNITY_Community 12|Community 12]] +- [[_COMMUNITY_Community 13|Community 13]] +- [[_COMMUNITY_Community 14|Community 14]] +- [[_COMMUNITY_Community 15|Community 15]] +- [[_COMMUNITY_Community 16|Community 16]] +- [[_COMMUNITY_Community 17|Community 17]] +- [[_COMMUNITY_Community 18|Community 18]] +- [[_COMMUNITY_Community 19|Community 19]] +- [[_COMMUNITY_Community 20|Community 20]] +- [[_COMMUNITY_Community 21|Community 21]] +- [[_COMMUNITY_Community 22|Community 22]] +- [[_COMMUNITY_Community 23|Community 23]] +- [[_COMMUNITY_Community 24|Community 24]] +- [[_COMMUNITY_Community 25|Community 25]] +- [[_COMMUNITY_Community 26|Community 26]] +- [[_COMMUNITY_Community 27|Community 27]] +- [[_COMMUNITY_Community 28|Community 28]] +- [[_COMMUNITY_Community 29|Community 29]] +- [[_COMMUNITY_Community 30|Community 30]] +- [[_COMMUNITY_Community 31|Community 31]] +- [[_COMMUNITY_Community 32|Community 32]] +- [[_COMMUNITY_Community 33|Community 33]] +- [[_COMMUNITY_Community 34|Community 34]] +- [[_COMMUNITY_Community 35|Community 35]] +- [[_COMMUNITY_Community 36|Community 36]] +- [[_COMMUNITY_Community 37|Community 37]] +- [[_COMMUNITY_Community 38|Community 38]] +- [[_COMMUNITY_Community 39|Community 39]] +- [[_COMMUNITY_Community 40|Community 40]] +- [[_COMMUNITY_Community 41|Community 41]] +- [[_COMMUNITY_Community 42|Community 42]] +- [[_COMMUNITY_Community 43|Community 43]] +- [[_COMMUNITY_Community 44|Community 44]] +- [[_COMMUNITY_Community 45|Community 45]] +- [[_COMMUNITY_Community 46|Community 46]] +- [[_COMMUNITY_Community 47|Community 47]] +- [[_COMMUNITY_Community 48|Community 48]] +- [[_COMMUNITY_Community 49|Community 49]] +- [[_COMMUNITY_Community 50|Community 50]] +- [[_COMMUNITY_Community 51|Community 51]] +- [[_COMMUNITY_Community 52|Community 52]] +- [[_COMMUNITY_Community 53|Community 53]] +- [[_COMMUNITY_Community 54|Community 54]] +- [[_COMMUNITY_Community 55|Community 55]] +- [[_COMMUNITY_Community 56|Community 56]] +- [[_COMMUNITY_Community 57|Community 57]] +- [[_COMMUNITY_Community 58|Community 58]] +- [[_COMMUNITY_Community 59|Community 59]] +- [[_COMMUNITY_Community 60|Community 60]] +- [[_COMMUNITY_Community 61|Community 61]] +- [[_COMMUNITY_Community 62|Community 62]] +- [[_COMMUNITY_Community 63|Community 63]] +- [[_COMMUNITY_Community 64|Community 64]] +- [[_COMMUNITY_Community 65|Community 65]] +- [[_COMMUNITY_Community 66|Community 66]] +- [[_COMMUNITY_Community 67|Community 67]] +- [[_COMMUNITY_Community 68|Community 68]] +- [[_COMMUNITY_Community 69|Community 69]] +- [[_COMMUNITY_Community 70|Community 70]] +- [[_COMMUNITY_Community 71|Community 71]] +- [[_COMMUNITY_Community 72|Community 72]] +- [[_COMMUNITY_Community 73|Community 73]] +- [[_COMMUNITY_Community 76|Community 76]] +- [[_COMMUNITY_Community 77|Community 77]] +- [[_COMMUNITY_Community 78|Community 78]] +- [[_COMMUNITY_Community 79|Community 79]] +- [[_COMMUNITY_Community 80|Community 80]] +- [[_COMMUNITY_Community 81|Community 81]] +- [[_COMMUNITY_Community 82|Community 82]] +- [[_COMMUNITY_Community 83|Community 83]] +- [[_COMMUNITY_Community 84|Community 84]] +- [[_COMMUNITY_Community 85|Community 85]] +- [[_COMMUNITY_Community 86|Community 86]] +- [[_COMMUNITY_Community 87|Community 87]] +- [[_COMMUNITY_Community 88|Community 88]] +- [[_COMMUNITY_Community 89|Community 89]] +- [[_COMMUNITY_Community 90|Community 90]] +- [[_COMMUNITY_Community 91|Community 91]] +- [[_COMMUNITY_Community 92|Community 92]] +- [[_COMMUNITY_Community 93|Community 93]] +- [[_COMMUNITY_Community 94|Community 94]] +- [[_COMMUNITY_Community 95|Community 95]] +- [[_COMMUNITY_Community 96|Community 96]] +- [[_COMMUNITY_Community 97|Community 97]] +- [[_COMMUNITY_Community 98|Community 98]] +- [[_COMMUNITY_Community 101|Community 101]] +- [[_COMMUNITY_Community 102|Community 102]] +- [[_COMMUNITY_Community 103|Community 103]] +- [[_COMMUNITY_Community 104|Community 104]] +- [[_COMMUNITY_Community 105|Community 105]] +- [[_COMMUNITY_Community 106|Community 106]] +- [[_COMMUNITY_Community 107|Community 107]] +- [[_COMMUNITY_Community 108|Community 108]] +- [[_COMMUNITY_Community 109|Community 109]] +- [[_COMMUNITY_Community 110|Community 110]] +- [[_COMMUNITY_Community 111|Community 111]] +- [[_COMMUNITY_Community 112|Community 112]] +- [[_COMMUNITY_Community 113|Community 113]] +- [[_COMMUNITY_Community 114|Community 114]] +- [[_COMMUNITY_Community 115|Community 115]] +- [[_COMMUNITY_Community 116|Community 116]] +- [[_COMMUNITY_Community 117|Community 117]] +- [[_COMMUNITY_Community 118|Community 118]] +- [[_COMMUNITY_Community 119|Community 119]] +- [[_COMMUNITY_Community 120|Community 120]] +- [[_COMMUNITY_Community 121|Community 121]] +- [[_COMMUNITY_Community 122|Community 122]] +- [[_COMMUNITY_Community 123|Community 123]] +- [[_COMMUNITY_Community 124|Community 124]] +- [[_COMMUNITY_Community 125|Community 125]] + +## God Nodes (most connected - your core abstractions) +1. `_make_siege()` - 124 edges +2. `_make_member()` - 92 edges +3. `_make_position()` - 85 edges +4. `SiegeMember` - 78 edges +5. `_make_building()` - 64 edges +6. `_make_group()` - 60 edges +7. `BoardPage()` - 55 edges +8. `makeSiegeMember()` - 55 edges +9. `PostsPage()` - 37 edges +10. `_session_with_siege_and_configs()` - 35 edges + +## Surprising Connections (you probably didn't know these) +- `PostPriorityResponse` --uses--> `PostPriorityConfig` [INFERRED] + backend/app/api/post_priority_config.py → frontend/src/api/posts.ts +- `PostPriorityUpdate` --uses--> `PostPriorityConfig` [INFERRED] + backend/app/api/post_priority_config.py → frontend/src/api/posts.ts +- `TestStartupValidation` --uses--> `MemberRole` [INFERRED] + backend/tests/test_auth.py → frontend/src/api/types.ts +- `AuthError` --uses--> `Member` [INFERRED] + backend/app/api/auth.py → frontend/src/api/types.ts +- `import_file()` --calls--> `seed_post_priority_config()` [INFERRED] + scripts/excel-import/import_excel.py → backend/app/db/seeds.py + +## Communities (141 total, 52 thin omitted) + +### Community 0 - "Community 0" +Cohesion: 0.05 +Nodes (84): BuildingUpdate, _make_group(), _make_config(), Service-layer tests for update_building — focus on unbreak restoration., A Mana Shrine at level 5 has 13 teams = 4 full groups + 1 slot last group (4, Stronghold level 6: 10 groups × 3 slots. Break → reduces to base config (4 g, Adding a post-type building must use PostPriorityConfig to set the Post prio, Return a MagicMock shaped like scalars().all() → items. (+76 more) + +### Community 1 - "Community 1" +Cohesion: 0.05 +Nodes (45): Carousel(), CarouselProps, CarouselSlide, dot0, renderCarousel(), track, viewport, renderDropdown() (+37 more) + +### Community 2 - "Community 2" +Cohesion: 0.07 +Nodes (61): makeBoard(), _build_assignments_html(), _build_reserves_html(), generate_assignments_image(), generate_reserves_image(), Image generation service — renders HTML/CSS to PNG via Playwright., Build the reserves/members list HTML string. Args: members: Siege m, Render an HTML string to PNG bytes using headless Chromium. (+53 more) + +### Community 3 - "Community 3" +Cohesion: 0.05 +Nodes (41): activateSiege(), applyAttackDay(), cloneSiege(), completeSiege(), deleteSiege(), getSiege(), getSiegeMembers(), reopenSiege() (+33 more) + +### Community 4 - "Community 4" +Cohesion: 0.06 +Nodes (60): build_member_notification_message(), _build_section(), _position_label(), _position_sort_key(), PositionInfo, _positions_from_keys(), _positions_to_key_set(), Build rich per-member Discord DM messages for siege assignment notifications. (+52 more) + +### Community 5 - "Community 5" +Cohesion: 0.05 +Nodes (54): lifespan(), main(), FastAPI application factory and middleware wiring., Run the FastAPI/uvicorn HTTP sidecar on port 8001., Connect and run the Discord client., Start both the Discord client and HTTP server concurrently., Application lifespan — runs startup guards before serving requests., run_discord_client() (+46 more) + +### Community 6 - "Community 6" +Cohesion: 0.08 +Nodes (53): _make_member(), Return a minimal Member-like namespace., _preview(), Regression for #381. Setup: one member matches a condition that is active o, Invoke preview_post_suggestions with a mocked session., AC: single post with one matching member → suggestion targets that member., AC #6: post with no matching member → skip_reason='no_match'., Charge #1: is_reserve=True on the position → skip_reason='reserve'. (+45 more) + +### Community 7 - "Community 7" +Cohesion: 0.09 +Nodes (40): compareSiegesSpecific(), createSiege(), getSieges(), CONFIDENCE_LABEL, ConfidenceVariant, ComparisonPage(), formatPosition(), PositionTag() (+32 more) + +### Community 8 - "Community 8" +Cohesion: 0.07 +Nodes (40): getBoard(), PostPriorityResponse, PostPriorityUpdate, SiegeMemberCreate, AutofillApplyResult, AutofillAssignment, AutofillPreviewResult, BuildingGroupResponse (+32 more) + +### Community 9 - "Community 9" +Cohesion: 0.05 +Nodes (43): _make_mock_bot_with_guild(), _make_mock_member(), patch_guild_id(), Tests for GET /api/members/{discord_user_id} — guild member lookup endpoint., The @everyone role must never appear in the roles list., When Discord returns NotFound, respond 200 with is_member=false., When Discord raises an unexpected HTTPException, respond 503., When get_guild() returns None (bot not in guild), respond 503. (+35 more) + +### Community 10 - "Community 10" +Cohesion: 0.05 +Nodes (20): get_config(), Public config endpoint — exposes non-sensitive runtime flags to the frontend., Return public runtime configuration flags. This endpoint is intentionally u, Settings, BaseSettings, Tests for the /api/config public endpoint and startup guards. Covers: - /api/, Backend must refuse to start when SESSION_SECRET is missing and auth is enabled., GET /api/config returns the current auth_disabled flag. (+12 more) + +### Community 11 - "Community 11" +Cohesion: 0.06 +Nodes (42): Tests for the attack day auto-assign algorithm., Heavy hitters and advanced always get Day 2 regardless of threshold., Medium members are promoted to Day 2 (by power desc) when count < 10., Novice promoted by power desc after medium if still < 10., Overridden Day 2 members count toward the 10-threshold., attack_day_override=True members keep their existing attack_day., Exactly 10 HH/ADV → all remaining go to Day 1., Apply reads stored preview and updates siege_member attack_day values. (+34 more) + +### Community 12 - "Community 12" +Cohesion: 0.08 +Nodes (42): makeSiegeMember(), _make_batch(), _make_batch_result(), _make_db_session(), Endpoint tests for notification and post-to-channel routes., POST /notify must return 400 with a clear message when siege.date is None., POST /post-to-channel must return 400 with a clear message when siege.date is No, Build a mock DB session that returns the given objects. (+34 more) + +### Community 13 - "Community 13" +Cohesion: 0.05 +Nodes (43): Endpoints for Discord guild member ↔ clan member sync., Return proposed Discord ↔ clan member matches without writing to the DB., Apply accepted sync matches, updating discord_username and discord_id., applyDiscordSync(), previewDiscordSync(), SyncApply, SyncApplyResponse, Service logic for Discord guild member → clan member matching. (+35 more) + +### Community 14 - "Community 14" +Cohesion: 0.06 +Nodes (31): PostSuggestionStaleEntry, ChangeCell(), Classification, classify(), ExpiryCountdown, OutcomeFilter, Pill(), PRIORITY_META (+23 more) + +### Community 15 - "Community 15" +Cohesion: 0.08 +Nodes (30): createMember(), getMember(), getMemberRoles(), getPostConditions(), updateMember(), updateMemberPreferences(), MemberRoleInfo, SyncApplyItem (+22 more) + +### Community 16 - "Community 16" +Cohesion: 0.17 +Nodes (35): PostPriorityConfig, Building, Member, Post, PostCondition, Siege, SiegeStatus, Base (+27 more) + +### Community 17 - "Community 17" +Cohesion: 0.09 +Nodes (23): _cors_headers(), _make_app(), Integration tests for the CORS middleware wired in app/main.py. The middleware, Entries that are only whitespace after stripping must be dropped., A request from an explicitly allowed origin must get CORS response headers., The echoed origin must match the request, not be a wildcard., allow_credentials=True means the vary/credentials header is set., The default value from Settings must allow the dev frontend. (+15 more) + +### Community 18 - "Community 18" +Cohesion: 0.05 +Nodes (24): Tests for backend/app/telemetry.py. Verifies: - configure_telemetry() is a no-o, If configure_azure_monitor raises, the exception is swallowed., Regression tests: FastAPIInstrumentor.instrument_app() must be called. Issu, FastAPIInstrumentor.instrument_app() is called with the FastAPI app. Wh, When APPLICATIONINSIGHTS_CONNECTION_STRING is absent, nothing should happen., configure_azure_monitor() is called when both env vars are present. Reg, No exception and configure_azure_monitor is never imported or called., FastAPIInstrumentor.instrument_app() is NOT called when app argument is None. (+16 more) + +### Community 19 - "Community 19" +Cohesion: 0.08 +Nodes (36): _get(), Tests for rate limiting on the Discord OAuth2 auth endpoints. Covers: - /api/au, 3rd rapid request to /api/auth/login returns 429 when limit is 2/minute. Th, Two different X-Forwarded-For IPs have independent rate-limit buckets., 3rd rapid request to /api/auth/callback returns 429 when limit is 2/minute., When AUTH_DISABLED=true, 50 rapid requests to /login never return 429., Pathologically long X-Forwarded-For header is handled without error. Constr, Garbage XFF value falls back to the ASGI remote-address bucket. Sending ``X (+28 more) + +### Community 20 - "Community 20" +Cohesion: 0.12 +Nodes (34): _make_position(), _apply(), _entry_dict(), _preview_data(), Unit tests for the Suggest Post Assignments service. All tests use SimpleNamesp, Null suggested_member_id entries are skipped; no error raised., Position disabled since preview → 409 with reason position_disabled., Position set to reserve since preview → 409 with reason position_reserve. (+26 more) + +### Community 21 - "Community 21" +Cohesion: 0.09 +Nodes (31): build_group_structure(), compute_building_group_structure(), create_building_with_groups_and_positions(), import_file(), infer_building_level(), map_building_alias(), map_role(), parse_assignments_sheet() (+23 more) + +### Community 22 - "Community 22" +Cohesion: 0.1 +Nodes (17): apiClient, AppConfig, fetchConfig(), Layout(), navLinkClass(), renderLayout(), RequireAuth(), postsLink (+9 more) + +### Community 23 - "Community 23" +Cohesion: 0.1 +Nodes (17): downgrade(), initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16, upgrade(), add autofill and attack day preview columns to siege Revision ID: 0002 Revises:, make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1, Add post_priority_config table, Add description to post_priority_config, Replace power with power_level, drop sort_value (+9 more) + +### Community 24 - "Community 24" +Cohesion: 0.1 +Nodes (24): API router for the Suggest Post Assignments feature. Routes: POST /sieges/{, Generate a greedy post-assignment suggestion preview. Args: siege_i, Apply a caller-filtered subset of the stored preview atomically. Uses SELEC, applyAutofill(), applyPostSuggestions(), previewAttackDay(), previewPostSuggestions(), AttackDayApplyResult (+16 more) + +### Community 25 - "Community 25" +Cohesion: 0.1 +Nodes (24): compareSieges(), get_most_recent_completed(), _load_assignments(), _load_member_names(), Return {member_id: [PositionKey, ...]} for non-reserve, non-disabled assigned po, _build_siege_assignments(), Tests for siege comparison service and endpoints., Build (Position, BuildingGroup, Building) rows for mock execute results. (+16 more) + +### Community 26 - "Community 26" +Cohesion: 0.1 +Nodes (24): AuthError, callback(), _check_guild_membership(), _error_redirect(), _exchange_code_for_token(), _get_discord_user(), login(), logout() (+16 more) + +### Community 27 - "Community 27" +Cohesion: 0.13 +Nodes (22): _async_client_that_raises(), _async_client_that_returns(), _make_ok_response(), Tests for bot HTTP client graceful degradation., get_member() returns the member dict when sidecar responds 200., get_member() returns the dict as-is when sidecar responds with is_member=False., get_member() raises httpx.HTTPError when the sidecar is unreachable., get_member() raises httpx.HTTPStatusError when sidecar returns 503. (+14 more) + +### Community 28 - "Community 28" +Cohesion: 0.09 +Nodes (9): Tests for scripts/import_excel.py parsing logic. All tests are pure-function te, Stronghold: 4 groups all with 3 slots., Only assignments for the specified (type, number) pair are counted., Returns None when the extracted date components don't form a valid date., 1 total position in a post -> level 1., test_build_group_structure_stronghold(), test_compute_building_group_structure_filters_by_building_number(), test_infer_building_level_post() (+1 more) + +### Community 29 - "Community 29" +Cohesion: 0.09 +Nodes (22): Tests for GET /api/version endpoint and _read_backend_version helper., GET /api/version responds 200 with all required fields., backend_version includes build metadata when env vars are present., backend_version is bare semver when BUILD_NUMBER/GIT_SHA are absent., git_sha top-level field is still returned for backward compatibility., Force re-import of version module so env-var reads pick up monkeypatches., bot_version is null when the bot sidecar is unreachable., When BUILD_NUMBER / GIT_SHA are absent, return bare semver. (+14 more) + +### Community 30 - "Community 30" +Cohesion: 0.1 +Nodes (16): get_team_count(), Return the theoretical total team slots for a building type at a given level., compute_scroll_count(), Compute total scroll count from the theoretical capacity of every building., Enable SQLite foreign key enforcement (no-op on PostgreSQL)., _enable_sqlite_fk(), Enable SQLite foreign key enforcement., compute_scroll_count returns the sum of _LEVEL_TEAMS capacities for all building (+8 more) + +### Community 31 - "Community 31" +Cohesion: 0.11 +Nodes (21): _make_mock_db(), A correct Bearer token grants access as the bot-service principal., Full valid callback flow issues a session cookie and redirects to /., Guild member WITH the required role passes the role check and proceeds normally., Return an AsyncMock session whose db.get() returns `member`., test_callback_happy_path(), test_callback_with_required_role_proceeds_to_member_lookup(), test_valid_service_token_allows_access() (+13 more) + +### Community 32 - "Community 32" +Cohesion: 0.15 +Nodes (20): PostSuggestionApplyRequest, Request body for POST /post-suggestions/apply. Attributes: apply_po, engine(), Integration tests for the Suggest Post Assignments feature. These tests use a r, Charge #12: selectinload chain works against real DB. Verifies that no Miss, Second preview within TTL overwrites first in the DB JSON column. Asserts b, Charge #17: apply → re-read position from DB → matched_condition_id set. Wi, Charge #22: member_changed reason fires when position written between preview an (+12 more) + +### Community 33 - "Community 33" +Cohesion: 0.1 +Nodes (17): _make_expired_jwt(), Tests for Discord OAuth2 auth middleware and endpoints., A wrong Bearer token is rejected with 401., An expired JWT cookie is rejected with 401., /api/version is accessible without any credentials., Mismatched OAuth state redirects to /login?error=invalid_state., Guild member response without role_names key is treated as no roles (rejected)., Bot sidecar connection error redirects to /login?error=service_unavailable. (+9 more) + +### Community 34 - "Community 34" +Cohesion: 0.22 +Nodes (17): generate_images(), Image generation endpoints., Generate PNG images for siege assignments and members list., getNotificationBatch(), notifySiegeMembers(), postToChannel(), Notification endpoints — send DMs and post images to Discord., Send DM notifications to all siege members asynchronously. (+9 more) + +### Community 35 - "Community 35" +Cohesion: 0.12 +Nodes (17): apiAddBuilding(), apiCreateMember(), apiCreateSiege(), autofillBtn, buildingsTab, chevron, firstPositionSpan, positionCell (+9 more) + +### Community 36 - "Community 36" +Cohesion: 0.11 +Nodes (13): PostSuggestionPreviewResult, applyBtn, board, btn, chip, labels, makePostBoard(), makeTwoPostBoard() (+5 more) + +### Community 37 - "Community 37" +Cohesion: 0.15 +Nodes (14): Send DMs for each member and record results in a fresh DB session., _send_dms(), Find member by username in the guild, open DM, send message., Find text channel by name, post message., Find text channel by name, post image as Discord file attachment. Retur, Discord client for the Siege Assignment System., SiegeBot, _get_bot() (+6 more) + +### Community 38 - "Community 38" +Cohesion: 0.14 +Nodes (13): getPostPriorities(), getPosts(), updatePostPriority(), getSiegeMemberPreferences(), DuplicateConditionMap, MemberWithMatches, postsTab, priorityBadgeColor() (+5 more) + +### Community 39 - "Community 39" +Cohesion: 0.19 +Nodes (15): bulk_update_positions(), list_posts(), Build a PostResponse-compatible dict, denormalizing building_number from the rel, _serialize_post(), setPostConditions(), updatePost(), Update a single position's assignment. Raises: 404 if position not, Apply multiple position updates in a single transaction. Each update dict m (+7 more) + +### Community 40 - "Community 40" +Cohesion: 0.17 +Nodes (14): VersionInfo, _fetch_bot_version(), getVersion(), Return a version string for the backend. When both BUILD_NUMBER and GIT_SHA, Call the bot sidecar's /version endpoint. Returns None if unreachable., Return version information for all components., _read_backend_version(), useVersion() (+6 more) + +### Community 41 - "Community 41" +Cohesion: 0.15 +Nodes (11): ChangelogStatus, fetchChangelogStatus(), DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioItem, DropdownMenuSeparator (+3 more) + +### Community 42 - "Community 42" +Cohesion: 0.16 +Nodes (14): list_buildings(), list_members(), list_post_priorities(), list_siege_members(), delete_siege(), get_siege(), list_sieges(), previewAutofill() (+6 more) + +### Community 43 - "Community 43" +Cohesion: 0.13 +Nodes (14): db_session(), Schema constraint and seed data tests using in-memory SQLite., seed_building_type_config populates exactly 5 rows., Inserting a duplicate (siege_id, member_id) pair raises IntegrityError., Inserting two members with the same name must raise IntegrityError., The check constraint preventing is_reserve=True with a member_id is defined., slot_count check constraints (1–3) are declared on the table., seed_post_conditions populates exactly 36 rows. (+6 more) + +### Community 44 - "Community 44" +Cohesion: 0.14 +Nodes (13): Schema-aware tests for Member.last_seen_changelog_at (issue #295, AC 1). These, Mapped type annotation allows a datetime value. Assigning a real datetime m, Member mapper exposes last_seen_changelog_at as a mapped attribute., last_seen_changelog_at column is defined nullable=True. Null is the sentine, last_seen_changelog_at has no server-side default. Null is the intentional, last_seen_changelog_at uses SQLAlchemy DateTime (no timezone). Matches the, Mapped type annotation allows None (datetime | None). Constructing a Member, test_last_seen_changelog_at_accepts_datetime_at_python_level() (+5 more) + +### Community 45 - "Community 45" +Cohesion: 0.23 +Nodes (13): add_building(), add_group(), delete_group(), deleteBuilding(), getBuildings(), updateBuilding(), _create_groups_and_positions(), _get_building_type_config() (+5 more) + +### Community 46 - "Community 46" +Cohesion: 0.2 +Nodes (11): _make_post_priority_config(), _make_post_ns(), _make_src_building_ns(), _make_src_group_ns(), _make_src_position_ns(), Endpoint tests for siege lifecycle transitions: activate, complete, clone., Cloning a siege with stale priority=0 posts must use PostPriorityConfig.priority, test_activate_planning_siege() (+3 more) + +### Community 47 - "Community 47" +Cohesion: 0.36 +Nodes (12): _make_bot(), _make_guild(), _make_text_channel(), Unit tests for SiegeBot Discord client methods using mock guild/member objects., Create a SiegeBot instance with a pre-loaded guild (bypasses Discord connect)., test_get_members_returns_correct_dict_format(), test_post_image_returns_cdn_url(), test_post_message_finds_channel_and_sends() (+4 more) + +### Community 48 - "Community 48" +Cohesion: 0.15 +Nodes (13): _make_worksheet(), Create a mock openpyxl worksheet that yields the given rows., Parses name, power_level bucket, and role from correct column positions., Column E is parsed as a slash-separated list of keyword strings., Empty or None column E results in an empty list., test_parse_members_sheet_basic(), test_parse_members_sheet_post_preferences(), test_parse_members_sheet_skips_empty_rows() (+5 more) + +### Community 49 - "Community 49" +Cohesion: 0.25 +Nodes (10): get_changelog_status(), markChangelogSeen(), Changelog status and mark-seen endpoints. These endpoints let the frontend trac, Raise HTTP 400 if the caller is a service principal. Args: current_, Return the authenticated user's last-seen changelog timestamp. Args:, Set the authenticated user's last-seen changelog timestamp to now. Idempote, _require_member_session(), ChangelogStatusResponse (+2 more) + +### Community 50 - "Community 50" +Cohesion: 0.18 +Nodes (9): health(), get_guild_member(), NotifyRequest, PostMessageRequest, Look up a single guild member by Discord user ID. Returns ``{"is_member": f, Validate the Bearer token against the configured bot API key., Health check — no authentication required., set_bot() (+1 more) + +### Community 51 - "Community 51" +Cohesion: 0.2 +Nodes (8): Exception, disable_auth_for_tests(), _FakeClient, _FakeHTTPException, _FakeNotFound, _FakeTextChannel, Shared pytest configuration for backend tests. Sets required environment variab, Bypass auth middleware for all tests by default. Individual tests that exer + +### Community 52 - "Community 52" +Cohesion: 0.33 +Nodes (9): MemberRole, SyncMatch, SyncPreviewResponse, PowerLevel, MemberBase, MemberCreate, MemberPreferencesUpdate, MemberResponse (+1 more) + +### Community 53 - "Community 53" +Cohesion: 0.24 +Nodes (9): _get_client_ip(), _parse_retry_after_seconds(), rate_limit_exceeded_handler(), _rate_limit_key(), Rate-limiting utilities shared across the application. This module owns the sin, Composite key function that honours the AUTH_DISABLED bypass. When ``AUTH_D, Parse a slowapi rate-limit detail string into a window size in seconds. slo, Return a JSON 429 response with a ``Retry-After`` header. Replaces slowapi' (+1 more) + +### Community 54 - "Community 54" +Cohesion: 0.24 +Nodes (9): _build_valid_siege_graph(), Integration test: full siege lifecycle — create → validate → assign → activate →, Build a siege with exactly the right building counts and assigned active members, Return a mock async session that serves the siege + configs across multiple exec, Happy-path: validate (errors) → assign → validate (0 errors) → activate → comple, test_full_siege_lifecycle(), _make_session(), Return a minimal AsyncSession mock that scalar_one_or_none returns siege. (+1 more) + +### Community 55 - "Community 55" +Cohesion: 0.2 +Nodes (10): _make_jwt(), A valid JWT session cookie with an existing member grants access., A JWT signed with a different secret is rejected with 401., A valid JWT whose member no longer exists in the DB returns 401., GET /api/auth/me returns member info when authenticated via session cookie., test_jwt_with_deleted_member_returns_401(), test_jwt_with_wrong_secret_returns_401(), test_me_with_valid_session() (+2 more) + +### Community 56 - "Community 56" +Cohesion: 0.22 +Nodes (10): _make_empty_worksheet(), _make_session_mock(), _make_workbook_mock(), Worksheet that yields no rows., Minimal openpyxl workbook mock. Members / Assignments / Reserves are empty, AsyncMock session whose execute() returns a result whose scalars().all() is []., When is_most_recent=False, section 3c must not run even if the Posts sheet p, When is_most_recent=True and the DB has no PostPriorityConfig rows yet, sect (+2 more) + +### Community 57 - "Community 57" +Cohesion: 0.32 +Nodes (6): get_member(), getMemberPreferences(), Return list of guild members as dicts with id, username, and display_name., Retrieve guild member list., Check guild membership via bot sidecar. Returns the member dict (includi, deactivate_member() + +### Community 58 - "Community 58" +Cohesion: 0.25 +Nodes (8): _make_assignments_worksheet(), Build a mock assignments worksheet with the proper two header rows prepended., Rows with a None group cell are skipped., Whitespace-only cell values normalise to None., test_parse_assignments_sheet_empty_value_is_none(), test_parse_assignments_sheet_member_assignment(), test_parse_assignments_sheet_skips_incomplete_rows(), test_parse_assignments_sheet_skips_unknown_building_type() + +### Community 59 - "Community 59" +Cohesion: 0.25 +Nodes (8): _make_posts_config_worksheet(), Create a mock worksheet for parse_posts_sheet_config. The function calls ws, One high-priority section with two posts: both get priority=3 and correct descri, Rows before any priority header default to priority=1 (Low)., Posts fall into the correct priority section based on their position., test_parse_posts_sheet_config_basic(), test_parse_posts_sheet_config_default_priority(), test_parse_posts_sheet_config_multiple_sections() + +### Community 60 - "Community 60" +Cohesion: 0.29 +Nodes (3): test_create_member_returns_201(), test_delete_member_returns_204(), Endpoint tests for /api/sieges — mocks the service layer directly. + +### Community 61 - "Community 61" +Cohesion: 0.4 +Nodes (5): notify(), Send a DM notification to a guild member., BotClient, HTTP client for the Discord bot sidecar API., Send DM via bot. Returns True on success, False on error. + +### Community 63 - "Community 63" +Cohesion: 0.33 +Nodes (5): Tests for enum definitions and associated constants in app.models.enums., BUILDING_TYPE_LABELS values must be non-empty title-cased display strings., Every BuildingType member must have an entry in BUILDING_TYPE_LABELS. This, test_building_type_labels_are_friendly_strings(), test_building_type_labels_covers_all_values() + +### Community 64 - "Community 64" +Cohesion: 0.33 +Nodes (6): _make_posts_conditions_worksheet(), Create a mock worksheet for parse_posts_sheet_conditions. The function enum, Three post rows with 1–3 keywords each are parsed correctly., A row with all-None cells is not included in the result., test_parse_posts_sheet_conditions_basic(), test_parse_posts_sheet_conditions_skips_empty() + +### Community 65 - "Community 65" +Cohesion: 0.4 +Nodes (3): _make_post_condition(), Endpoint tests for /api reference data endpoints., test_get_post_conditions_returns_list() + +### Community 67 - "Community 67" +Cohesion: 0.4 +Nodes (5): Mana shrine with 2 groups: position 3 is an empty trailing sheet column for grou, Stronghold level 2 = 16 total slots = 5 full groups (3 slots each) + 1 last grou, Stronghold level 4 = 22 total slots = 7 full groups + 1 last group with 1 slot., Defense Tower level 4 = 6 total slots = 2 full groups × 3 slots each. At lev, test_compute_building_group_structure_basic() + +### Community 69 - "Community 69" +Cohesion: 0.5 +Nodes (3): configure_telemetry(), Application Insights / OpenTelemetry initialisation for the backend. Call ``con, Initialise Azure Monitor OpenTelemetry and instrument the app. The ``azure- + +### Community 71 - "Community 71" +Cohesion: 0.5 +Nodes (4): Magic tower (base_last_slots=2): position 3 is a trailing empty sheet column and, Magic tower at a higher level where position 3 is genuinely filled: slot_cou, Magic Tower level 3 = 4 total slots = 1 full group (3 slots) + 1 last group with, test_compute_building_group_structure_magic_tower_level3() + +### Community 72 - "Community 72" +Cohesion: 0.67 +Nodes (3): Mana Shrine level 2 = 7 total slots = 2 full groups + 1 last group with 1 slot., Mana Shrine level 4 = 11 total slots = 3 full groups + 1 last group with 2 slots, test_compute_building_group_structure_mana_shrine_level2() + +### Community 73 - "Community 73" +Cohesion: 0.67 +Nodes (3): Returns None for a filename that does not match the pattern., Returns None for a completely unrelated filename., test_parse_filename_invalid_random() + +## Knowledge Gaps +- **752 isolated node(s):** `initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, `add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, `make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1`, `Add post_priority_config table`, `Add description to post_priority_config` (+747 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **52 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 `_make_siege()` connect `Community 12` to `Community 0`, `Community 1`, `Community 3`, `Community 36`, `Community 6`, `Community 11`, `Community 46`, `Community 20`, `Community 54`, `Community 22`, `Community 25`, `Community 30`?** + _High betweenness centrality (0.183) - this node is a cross-community bridge._ +- **Why does `SiegeMember` connect `Community 3` to `Community 1`, `Community 34`, `Community 35`, `Community 36`, `Community 6`, `Community 38`, `Community 8`, `Community 7`, `Community 42`, `Community 12`, `Community 14`, `Community 15`, `Community 16`, `Community 22`, `Community 24`, `Community 57`?** + _High betweenness centrality (0.167) - this node is a cross-community bridge._ +- **Why does `list` connect `Community 42` to `Community 0`, `Community 1`, `Community 56`, `Community 5`, `Community 6`, `Community 39`, `Community 38`, `Community 45`, `Community 13`, `Community 15`, `Community 21`, `Community 24`, `Community 57`, `Community 58`?** + _High betweenness centrality (0.089) - this node is a cross-community bridge._ +- **Are the 17 inferred relationships involving `SiegeMember` (e.g. with `Base` and `TestSeedDemoMembers`) actually correct?** + _`SiegeMember` has 17 INFERRED edges - model-reasoned connections that need verification._ +- **What connects `initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, `add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, `make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1` to the rest of the system?** + _752 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `Community 0` be split into smaller, more focused modules?** + _Cohesion score 0.05 - nodes in this community are weakly interconnected._ +- **Should `Community 1` be split into smaller, more focused modules?** + _Cohesion score 0.05 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.html b/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.html new file mode 100644 index 00000000..44f209f7 --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.html @@ -0,0 +1,305 @@ + + + + +graphify - graphify-out\graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.json b/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.json new file mode 100644 index 00000000..7b8674bd --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.json @@ -0,0 +1,57397 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": "env.py", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L1", + "community": 66, + "norm_label": "env.py", + "id": "backend_alembic_env_py" + }, + { + "label": "run_migrations_offline()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L24", + "community": 66, + "norm_label": "run_migrations_offline()", + "id": "alembic_env_run_migrations_offline" + }, + { + "label": "do_run_migrations()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L36", + "community": 66, + "norm_label": "do_run_migrations()", + "id": "alembic_env_do_run_migrations" + }, + { + "label": "run_async_migrations()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L42", + "community": 66, + "norm_label": "run_async_migrations()", + "id": "alembic_env_run_async_migrations" + }, + { + "label": "run_migrations_online()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L53", + "community": 66, + "norm_label": "run_migrations_online()", + "id": "alembic_env_run_migrations_online" + }, + { + "label": "0001_initial_schema.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L1", + "community": 23, + "norm_label": "0001_initial_schema.py", + "id": "backend_alembic_versions_0001_initial_schema_py" + }, + { + "label": "upgrade()", + "file_type": "code", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L19", + "community": 23, + "norm_label": "upgrade()", + "id": "versions_0001_initial_schema_upgrade" + }, + { + "label": "downgrade()", + "file_type": "code", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L273", + "community": 23, + "norm_label": "downgrade()", + "id": "versions_0001_initial_schema_downgrade" + }, + { + "label": "initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L1", + "community": 23, + "norm_label": "initial schema revision id: 0001 revises: create date: 2026-03-16", + "id": "versions_0001_initial_schema_rationale_1" + }, + { + "label": "0002_add_preview_columns.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L1", + "community": 23, + "norm_label": "0002_add_preview_columns.py", + "id": "backend_alembic_versions_0002_add_preview_columns_py" + }, + { + "label": "add autofill and attack day preview columns to siege Revision ID: 0002 Revises:", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L1", + "community": 23, + "norm_label": "add autofill and attack day preview columns to siege revision id: 0002 revises:", + "id": "versions_0002_add_preview_columns_rationale_1" + }, + { + "label": "0003_make_siege_date_nullable.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L1", + "community": 23, + "norm_label": "0003_make_siege_date_nullable.py", + "id": "backend_alembic_versions_0003_make_siege_date_nullable_py" + }, + { + "label": "make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L1", + "community": 23, + "norm_label": "make siege date nullable revision id: 0003 revises: 0002 create date: 2026-03-1", + "id": "versions_0003_make_siege_date_nullable_rationale_1" + }, + { + "label": "0004_add_post_priority_config.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L1", + "community": 23, + "norm_label": "0004_add_post_priority_config.py", + "id": "backend_alembic_versions_0004_add_post_priority_config_py" + }, + { + "label": "Add post_priority_config table", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L1", + "community": 23, + "norm_label": "add post_priority_config table", + "id": "versions_0004_add_post_priority_config_rationale_1" + }, + { + "label": "0005_add_description_to_post_priority_config.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L1", + "community": 23, + "norm_label": "0005_add_description_to_post_priority_config.py", + "id": "backend_alembic_versions_0005_add_description_to_post_priority_config_py" + }, + { + "label": "Add description to post_priority_config", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L1", + "community": 23, + "norm_label": "add description to post_priority_config", + "id": "versions_0005_add_description_to_post_priority_config_rationale_1" + }, + { + "label": "0006_power_level_and_drop_sort_value.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L1", + "community": 23, + "norm_label": "0006_power_level_and_drop_sort_value.py", + "id": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py" + }, + { + "label": "Replace power with power_level, drop sort_value", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L1", + "community": 23, + "norm_label": "replace power with power_level, drop sort_value", + "id": "versions_0006_power_level_and_drop_sort_value_rationale_1" + }, + { + "label": "0007_fix_group_number_max.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L1", + "community": 23, + "norm_label": "0007_fix_group_number_max.py", + "id": "backend_alembic_versions_0007_fix_group_number_max_py" + }, + { + "label": "Raise group_number_range constraint max from 9 to 10 Stronghold at level 6 requ", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L1", + "community": 23, + "norm_label": "raise group_number_range constraint max from 9 to 10 stronghold at level 6 requ", + "id": "versions_0007_fix_group_number_max_rationale_1" + }, + { + "label": "0008_add_matched_condition_id_to_position.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L1", + "community": 23, + "norm_label": "0008_add_matched_condition_id_to_position.py", + "id": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py" + }, + { + "label": "Add matched_condition_id to position Tracks which PostCondition a member was ma", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L1", + "community": 23, + "norm_label": "add matched_condition_id to position tracks which postcondition a member was ma", + "id": "versions_0008_add_matched_condition_id_to_position_rationale_1" + }, + { + "label": "0009_add_discord_id_to_member.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L1", + "community": 23, + "norm_label": "0009_add_discord_id_to_member.py", + "id": "backend_alembic_versions_0009_add_discord_id_to_member_py" + }, + { + "label": "Add discord_id to member Stores the Discord snowflake ID for each clan member,", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L1", + "community": 23, + "norm_label": "add discord_id to member stores the discord snowflake id for each clan member,", + "id": "versions_0009_add_discord_id_to_member_rationale_1" + }, + { + "label": "0010_add_last_seen_changelog_at_to_member.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L1", + "community": 23, + "norm_label": "0010_add_last_seen_changelog_at_to_member.py", + "id": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py" + }, + { + "label": "Add last_seen_changelog_at to member Tracks the timestamp of the last changelog", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L1", + "community": 23, + "norm_label": "add last_seen_changelog_at to member tracks the timestamp of the last changelog", + "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_1" + }, + { + "label": "Add nullable last_seen_changelog_at column to the member table.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L25", + "community": 23, + "norm_label": "add nullable last_seen_changelog_at column to the member table.", + "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_25" + }, + { + "label": "Remove last_seen_changelog_at column from the member table.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L33", + "community": 23, + "norm_label": "remove last_seen_changelog_at column from the member table.", + "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_33" + }, + { + "label": "0011_add_post_suggest_preview.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L1", + "community": 23, + "norm_label": "0011_add_post_suggest_preview.py", + "id": "backend_alembic_versions_0011_add_post_suggest_preview_py" + }, + { + "label": "Add post_suggest_preview columns to siege table. Mirrors the autofill_preview /", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L1", + "community": 23, + "norm_label": "add post_suggest_preview columns to siege table. mirrors the autofill_preview /", + "id": "versions_0011_add_post_suggest_preview_rationale_1" + }, + { + "label": "Add post_suggest_preview and post_suggest_preview_expires_at columns.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L23", + "community": 23, + "norm_label": "add post_suggest_preview and post_suggest_preview_expires_at columns.", + "id": "versions_0011_add_post_suggest_preview_rationale_23" + }, + { + "label": "Drop post_suggest_preview and post_suggest_preview_expires_at columns.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L34", + "community": 23, + "norm_label": "drop post_suggest_preview and post_suggest_preview_expires_at columns.", + "id": "versions_0011_add_post_suggest_preview_rationale_34" + }, + { + "label": "Settings", + "file_type": "code", + "source_file": "backend/app/config.py", + "source_location": "L4", + "community": 10, + "norm_label": "settings", + "id": "app_config_settings" + }, + { + "label": "BaseSettings", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 10, + "norm_label": "basesettings", + "id": "basesettings" + }, + { + "label": "lifespan()", + "file_type": "code", + "source_file": "backend/app/main.py", + "source_location": "L47", + "community": 5, + "norm_label": "lifespan()", + "id": "app_main_lifespan" + }, + { + "label": "FastAPI application factory and middleware wiring.", + "file_type": "rationale", + "source_file": "backend/app/main.py", + "source_location": "L1", + "community": 5, + "norm_label": "fastapi application factory and middleware wiring.", + "id": "app_main_rationale_1" + }, + { + "label": "Application lifespan \u2014 runs startup guards before serving requests.", + "file_type": "rationale", + "source_file": "backend/app/main.py", + "source_location": "L48", + "community": 5, + "norm_label": "application lifespan \u2014 runs startup guards before serving requests.", + "id": "app_main_rationale_48" + }, + { + "label": "middleware.py", + "file_type": "code", + "source_file": "backend/app/middleware.py", + "source_location": "L1", + "community": 68, + "norm_label": "middleware.py", + "id": "backend_app_middleware_py" + }, + { + "label": "RequestLoggingMiddleware", + "file_type": "code", + "source_file": "backend/app/middleware.py", + "source_location": "L12", + "community": 68, + "norm_label": "requestloggingmiddleware", + "id": "app_middleware_requestloggingmiddleware" + }, + { + "label": "BaseHTTPMiddleware", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 68, + "norm_label": "basehttpmiddleware", + "id": "basehttpmiddleware" + }, + { + "label": ".dispatch()", + "file_type": "code", + "source_file": "backend/app/middleware.py", + "source_location": "L13", + "community": 68, + "norm_label": ".dispatch()", + "id": "app_middleware_requestloggingmiddleware_dispatch" + }, + { + "label": "rate_limit.py", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L1", + "community": 53, + "norm_label": "rate_limit.py", + "id": "backend_app_rate_limit_py" + }, + { + "label": "_get_client_ip()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L52", + "community": 53, + "norm_label": "_get_client_ip()", + "id": "app_rate_limit_get_client_ip" + }, + { + "label": "_rate_limit_key()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L154", + "community": 53, + "norm_label": "_rate_limit_key()", + "id": "app_rate_limit_rate_limit_key" + }, + { + "label": "_parse_retry_after_seconds()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L179", + "community": 53, + "norm_label": "_parse_retry_after_seconds()", + "id": "app_rate_limit_parse_retry_after_seconds" + }, + { + "label": "rate_limit_exceeded_handler()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L217", + "community": 53, + "norm_label": "rate_limit_exceeded_handler()", + "id": "app_rate_limit_rate_limit_exceeded_handler" + }, + { + "label": "Rate-limiting utilities shared across the application. This module owns the sin", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L1", + "community": 53, + "norm_label": "rate-limiting utilities shared across the application. this module owns the sin", + "id": "app_rate_limit_rationale_1" + }, + { + "label": "Extract the real client IP from X-Forwarded-For for rate bucketing. Reads t", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L53", + "community": 53, + "norm_label": "extract the real client ip from x-forwarded-for for rate bucketing. reads t", + "id": "app_rate_limit_rationale_53" + }, + { + "label": "Composite key function that honours the AUTH_DISABLED bypass. When ``AUTH_D", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L155", + "community": 53, + "norm_label": "composite key function that honours the auth_disabled bypass. when ``auth_d", + "id": "app_rate_limit_rationale_155" + }, + { + "label": "Parse a slowapi rate-limit detail string into a window size in seconds. slo", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L180", + "community": 53, + "norm_label": "parse a slowapi rate-limit detail string into a window size in seconds. slo", + "id": "app_rate_limit_rationale_180" + }, + { + "label": "Return a JSON 429 response with a ``Retry-After`` header. Replaces slowapi'", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L218", + "community": 53, + "norm_label": "return a json 429 response with a ``retry-after`` header. replaces slowapi'", + "id": "app_rate_limit_rationale_218" + }, + { + "label": "configure_telemetry()", + "file_type": "code", + "source_file": "backend/app/telemetry.py", + "source_location": "L28", + "community": 69, + "norm_label": "configure_telemetry()", + "id": "app_telemetry_configure_telemetry" + }, + { + "label": "Application Insights / OpenTelemetry initialisation for the backend. Call ``con", + "file_type": "rationale", + "source_file": "backend/app/telemetry.py", + "source_location": "L1", + "community": 69, + "norm_label": "application insights / opentelemetry initialisation for the backend. call ``con", + "id": "app_telemetry_rationale_1" + }, + { + "label": "Initialise Azure Monitor OpenTelemetry and instrument the app. The ``azure-", + "file_type": "rationale", + "source_file": "backend/app/telemetry.py", + "source_location": "L32", + "community": 69, + "norm_label": "initialise azure monitor opentelemetry and instrument the app. the ``azure-", + "id": "app_telemetry_rationale_32" + }, + { + "label": "attack_day.py", + "file_type": "code", + "source_file": "backend/app/api/attack_day.py", + "source_location": "L1", + "community": 24, + "norm_label": "attack_day.py", + "id": "backend_app_api_attack_day_py" + }, + { + "label": "auth.py", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L1", + "community": 26, + "norm_label": "auth.py", + "id": "backend_app_api_auth_py" + }, + { + "label": "AuthError", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L27", + "community": 26, + "norm_label": "autherror", + "id": "api_auth_autherror" + }, + { + "label": "_exchange_code_for_token()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L41", + "community": 26, + "norm_label": "_exchange_code_for_token()", + "id": "api_auth_exchange_code_for_token" + }, + { + "label": "_get_discord_user()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L59", + "community": 26, + "norm_label": "_get_discord_user()", + "id": "api_auth_get_discord_user" + }, + { + "label": "_check_guild_membership()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L70", + "community": 26, + "norm_label": "_check_guild_membership()", + "id": "api_auth_check_guild_membership" + }, + { + "label": "login()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L77", + "community": 26, + "norm_label": "login()", + "id": "api_auth_login" + }, + { + "label": "callback()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L112", + "community": 26, + "norm_label": "callback()", + "id": "api_auth_callback" + }, + { + "label": "logout()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L203", + "community": 26, + "norm_label": "logout()", + "id": "api_auth_logout" + }, + { + "label": "me()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L210", + "community": 26, + "norm_label": "me()", + "id": "api_auth_me" + }, + { + "label": "_error_redirect()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L222", + "community": 26, + "norm_label": "_error_redirect()", + "id": "api_auth_error_redirect" + }, + { + "label": "Discord OAuth2 authentication endpoints.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L1", + "community": 26, + "norm_label": "discord oauth2 authentication endpoints.", + "id": "api_auth_rationale_1" + }, + { + "label": "Error codes returned in login redirect query parameters.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L28", + "community": 26, + "norm_label": "error codes returned in login redirect query parameters.", + "id": "api_auth_rationale_28" + }, + { + "label": "Exchange an authorization code for a Discord access token.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L42", + "community": 26, + "norm_label": "exchange an authorization code for a discord access token.", + "id": "api_auth_rationale_42" + }, + { + "label": "Fetch the authenticated Discord user's profile (identify scope).", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L60", + "community": 26, + "norm_label": "fetch the authenticated discord user's profile (identify scope).", + "id": "api_auth_rationale_60" + }, + { + "label": "Check guild membership via the bot sidecar. Raises on connection failure.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L71", + "community": 26, + "norm_label": "check guild membership via the bot sidecar. raises on connection failure.", + "id": "api_auth_rationale_71" + }, + { + "label": "Initiate Discord OAuth2 flow. Generates a CSRF state token, stores it in a", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L78", + "community": 26, + "norm_label": "initiate discord oauth2 flow. generates a csrf state token, stores it in a", + "id": "api_auth_rationale_78" + }, + { + "label": "Handle Discord OAuth2 callback. Validates CSRF state, exchanges the authori", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L118", + "community": 26, + "norm_label": "handle discord oauth2 callback. validates csrf state, exchanges the authori", + "id": "api_auth_rationale_118" + }, + { + "label": "Clear the session cookie, ending the user's session.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L204", + "community": 26, + "norm_label": "clear the session cookie, ending the user's session.", + "id": "api_auth_rationale_204" + }, + { + "label": "Return identity information for the currently authenticated caller.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L213", + "community": 26, + "norm_label": "return identity information for the currently authenticated caller.", + "id": "api_auth_rationale_213" + }, + { + "label": "Return a redirect to the login page with an error query parameter.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L223", + "community": 26, + "norm_label": "return a redirect to the login page with an error query parameter.", + "id": "api_auth_rationale_223" + }, + { + "label": "autofill.py", + "file_type": "code", + "source_file": "backend/app/api/autofill.py", + "source_location": "L1", + "community": 8, + "norm_label": "autofill.py", + "id": "backend_app_api_autofill_py" + }, + { + "label": "board.py", + "file_type": "code", + "source_file": "backend/app/api/board.py", + "source_location": "L1", + "community": 8, + "norm_label": "board.py", + "id": "backend_app_api_board_py" + }, + { + "label": "bulk_update_positions()", + "file_type": "code", + "source_file": "backend/app/api/board.py", + "source_location": "L38", + "community": 39, + "norm_label": "bulk_update_positions()", + "id": "api_board_bulk_update_positions" + }, + { + "label": "buildings.py", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L1", + "community": 45, + "norm_label": "buildings.py", + "id": "backend_app_api_buildings_py" + }, + { + "label": "list_buildings()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L18", + "community": 42, + "norm_label": "list_buildings()", + "id": "api_buildings_list_buildings" + }, + { + "label": "add_building()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L26", + "community": 45, + "norm_label": "add_building()", + "id": "api_buildings_add_building" + }, + { + "label": "add_group()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L59", + "community": 45, + "norm_label": "add_group()", + "id": "api_buildings_add_group" + }, + { + "label": "delete_group()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L69", + "community": 45, + "norm_label": "delete_group()", + "id": "api_buildings_delete_group" + }, + { + "label": "changelog.py", + "file_type": "code", + "source_file": "backend/app/api/changelog.py", + "source_location": "L1", + "community": 49, + "norm_label": "changelog.py", + "id": "backend_app_api_changelog_py" + }, + { + "label": "_require_member_session()", + "file_type": "code", + "source_file": "backend/app/api/changelog.py", + "source_location": "L24", + "community": 49, + "norm_label": "_require_member_session()", + "id": "api_changelog_require_member_session" + }, + { + "label": "get_changelog_status()", + "file_type": "code", + "source_file": "backend/app/api/changelog.py", + "source_location": "L43", + "community": 49, + "norm_label": "get_changelog_status()", + "id": "api_changelog_get_changelog_status" + }, + { + "label": "Changelog status and mark-seen endpoints. These endpoints let the frontend trac", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L1", + "community": 49, + "norm_label": "changelog status and mark-seen endpoints. these endpoints let the frontend trac", + "id": "api_changelog_rationale_1" + }, + { + "label": "Raise HTTP 400 if the caller is a service principal. Args: current_", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L25", + "community": 49, + "norm_label": "raise http 400 if the caller is a service principal. args: current_", + "id": "api_changelog_rationale_25" + }, + { + "label": "Return the authenticated user's last-seen changelog timestamp. Args:", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L47", + "community": 49, + "norm_label": "return the authenticated user's last-seen changelog timestamp. args:", + "id": "api_changelog_rationale_47" + }, + { + "label": "Set the authenticated user's last-seen changelog timestamp to now. Idempote", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L73", + "community": 49, + "norm_label": "set the authenticated user's last-seen changelog timestamp to now. idempote", + "id": "api_changelog_rationale_73" + }, + { + "label": "comparison.py", + "file_type": "code", + "source_file": "backend/app/api/comparison.py", + "source_location": "L1", + "community": 8, + "norm_label": "comparison.py", + "id": "backend_app_api_comparison_py" + }, + { + "label": "compare_with_most_recent()", + "file_type": "code", + "source_file": "backend/app/api/comparison.py", + "source_location": "L14", + "community": 8, + "norm_label": "compare_with_most_recent()", + "id": "api_comparison_compare_with_most_recent" + }, + { + "label": "compare_with_specific()", + "file_type": "code", + "source_file": "backend/app/api/comparison.py", + "source_location": "L31", + "community": 8, + "norm_label": "compare_with_specific()", + "id": "api_comparison_compare_with_specific" + }, + { + "label": "get_config()", + "file_type": "code", + "source_file": "backend/app/api/config.py", + "source_location": "L11", + "community": 10, + "norm_label": "get_config()", + "id": "api_config_get_config" + }, + { + "label": "Public config endpoint \u2014 exposes non-sensitive runtime flags to the frontend.", + "file_type": "rationale", + "source_file": "backend/app/api/config.py", + "source_location": "L1", + "community": 10, + "norm_label": "public config endpoint \u2014 exposes non-sensitive runtime flags to the frontend.", + "id": "api_config_rationale_1" + }, + { + "label": "Return public runtime configuration flags. This endpoint is intentionally u", + "file_type": "rationale", + "source_file": "backend/app/api/config.py", + "source_location": "L12", + "community": 10, + "norm_label": "return public runtime configuration flags. this endpoint is intentionally u", + "id": "api_config_rationale_12" + }, + { + "label": "discord_sync.py", + "file_type": "code", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L1", + "community": 13, + "norm_label": "discord_sync.py", + "id": "backend_app_api_discord_sync_py" + }, + { + "label": "Endpoints for Discord guild member \u2194 clan member sync.", + "file_type": "rationale", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L1", + "community": 13, + "norm_label": "endpoints for discord guild member \u2194 clan member sync.", + "id": "api_discord_sync_rationale_1" + }, + { + "label": "Return proposed Discord \u2194 clan member matches without writing to the DB.", + "file_type": "rationale", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L17", + "community": 13, + "norm_label": "return proposed discord \u2194 clan member matches without writing to the db.", + "id": "api_discord_sync_rationale_17" + }, + { + "label": "Apply accepted sync matches, updating discord_username and discord_id.", + "file_type": "rationale", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L26", + "community": 13, + "norm_label": "apply accepted sync matches, updating discord_username and discord_id.", + "id": "api_discord_sync_rationale_26" + }, + { + "label": "health.py", + "file_type": "code", + "source_file": "backend/app/api/health.py", + "source_location": "L1", + "community": 50, + "norm_label": "health.py", + "id": "backend_app_api_health_py" + }, + { + "label": "health()", + "file_type": "code", + "source_file": "backend/app/api/health.py", + "source_location": "L11", + "community": 50, + "norm_label": "health()", + "id": "api_health_health" + }, + { + "label": "images.py", + "file_type": "code", + "source_file": "backend/app/api/images.py", + "source_location": "L1", + "community": 34, + "norm_label": "images.py", + "id": "backend_app_api_images_py" + }, + { + "label": "BaseModel", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 8, + "norm_label": "basemodel", + "id": "basemodel" + }, + { + "label": "generate_images()", + "file_type": "code", + "source_file": "backend/app/api/images.py", + "source_location": "L31", + "community": 34, + "norm_label": "generate_images()", + "id": "api_images_generate_images" + }, + { + "label": "Image generation endpoints.", + "file_type": "rationale", + "source_file": "backend/app/api/images.py", + "source_location": "L1", + "community": 34, + "norm_label": "image generation endpoints.", + "id": "api_images_rationale_1" + }, + { + "label": "Generate PNG images for siege assignments and members list.", + "file_type": "rationale", + "source_file": "backend/app/api/images.py", + "source_location": "L35", + "community": 34, + "norm_label": "generate png images for siege assignments and members list.", + "id": "api_images_rationale_35" + }, + { + "label": "lifecycle.py", + "file_type": "code", + "source_file": "backend/app/api/lifecycle.py", + "source_location": "L1", + "community": 3, + "norm_label": "lifecycle.py", + "id": "backend_app_api_lifecycle_py" + }, + { + "label": "members.py", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L1", + "community": 57, + "norm_label": "members.py", + "id": "backend_app_api_members_py" + }, + { + "label": "list_members()", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L18", + "community": 42, + "norm_label": "list_members()", + "id": "api_members_list_members" + }, + { + "label": "get_member()", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L34", + "community": 57, + "norm_label": "get_member()", + "id": "api_members_get_member" + }, + { + "label": "delete_member()", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L51", + "community": 57, + "norm_label": "delete_member()", + "id": "api_members_delete_member" + }, + { + "label": "notifications.py", + "file_type": "code", + "source_file": "backend/app/api/notifications.py", + "source_location": "L1", + "community": 34, + "norm_label": "notifications.py", + "id": "backend_app_api_notifications_py" + }, + { + "label": "_send_dms()", + "file_type": "code", + "source_file": "backend/app/api/notifications.py", + "source_location": "L64", + "community": 37, + "norm_label": "_send_dms()", + "id": "api_notifications_send_dms" + }, + { + "label": "Notification endpoints \u2014 send DMs and post images to Discord.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L1", + "community": 34, + "norm_label": "notification endpoints \u2014 send dms and post images to discord.", + "id": "api_notifications_rationale_1" + }, + { + "label": "Send DMs for each member and record results in a fresh DB session.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L65", + "community": 37, + "norm_label": "send dms for each member and record results in a fresh db session.", + "id": "api_notifications_rationale_65" + }, + { + "label": "Send DM notifications to all siege members asynchronously.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L142", + "community": 34, + "norm_label": "send dm notifications to all siege members asynchronously.", + "id": "api_notifications_rationale_142" + }, + { + "label": "Get the status and results of a notification batch.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L310", + "community": 34, + "norm_label": "get the status and results of a notification batch.", + "id": "api_notifications_rationale_310" + }, + { + "label": "Generate images and post them + a summary message to Discord channels.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L371", + "community": 34, + "norm_label": "generate images and post them + a summary message to discord channels.", + "id": "api_notifications_rationale_371" + }, + { + "label": "posts.py", + "file_type": "code", + "source_file": "backend/app/api/posts.py", + "source_location": "L1", + "community": 39, + "norm_label": "posts.py", + "id": "backend_app_api_posts_py" + }, + { + "label": "_serialize_post()", + "file_type": "code", + "source_file": "backend/app/api/posts.py", + "source_location": "L12", + "community": 39, + "norm_label": "_serialize_post()", + "id": "api_posts_serialize_post" + }, + { + "label": "list_posts()", + "file_type": "code", + "source_file": "backend/app/api/posts.py", + "source_location": "L29", + "community": 39, + "norm_label": "list_posts()", + "id": "api_posts_list_posts" + }, + { + "label": "Build a PostResponse-compatible dict, denormalizing building_number from the rel", + "file_type": "rationale", + "source_file": "backend/app/api/posts.py", + "source_location": "L13", + "community": 39, + "norm_label": "build a postresponse-compatible dict, denormalizing building_number from the rel", + "id": "api_posts_rationale_13" + }, + { + "label": "PostPriorityResponse", + "file_type": "code", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L12", + "community": 8, + "norm_label": "postpriorityresponse", + "id": "api_post_priority_config_postpriorityresponse" + }, + { + "label": "PostPriorityUpdate", + "file_type": "code", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L20", + "community": 8, + "norm_label": "postpriorityupdate", + "id": "api_post_priority_config_postpriorityupdate" + }, + { + "label": "list_post_priorities()", + "file_type": "code", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L26", + "community": 42, + "norm_label": "list_post_priorities()", + "id": "api_post_priority_config_list_post_priorities" + }, + { + "label": "post_suggestions.py", + "file_type": "code", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L1", + "community": 24, + "norm_label": "post_suggestions.py", + "id": "backend_app_api_post_suggestions_py" + }, + { + "label": "API router for the Suggest Post Assignments feature. Routes: POST /sieges/{", + "file_type": "rationale", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L1", + "community": 24, + "norm_label": "api router for the suggest post assignments feature. routes: post /sieges/{", + "id": "api_post_suggestions_rationale_1" + }, + { + "label": "Generate a greedy post-assignment suggestion preview. Args: siege_i", + "file_type": "rationale", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L37", + "community": 24, + "norm_label": "generate a greedy post-assignment suggestion preview. args: siege_i", + "id": "api_post_suggestions_rationale_37" + }, + { + "label": "Apply a caller-filtered subset of the stored preview atomically. Uses SELEC", + "file_type": "rationale", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L62", + "community": 24, + "norm_label": "apply a caller-filtered subset of the stored preview atomically. uses selec", + "id": "api_post_suggestions_rationale_62" + }, + { + "label": "reference.py", + "file_type": "code", + "source_file": "backend/app/api/reference.py", + "source_location": "L1", + "community": 15, + "norm_label": "reference.py", + "id": "backend_app_api_reference_py" + }, + { + "label": "sieges.py", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L1", + "community": 42, + "norm_label": "sieges.py", + "id": "backend_app_api_sieges_py" + }, + { + "label": "list_sieges()", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L13", + "community": 42, + "norm_label": "list_sieges()", + "id": "api_sieges_list_sieges" + }, + { + "label": "get_siege()", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L40", + "community": 42, + "norm_label": "get_siege()", + "id": "api_sieges_get_siege" + }, + { + "label": "delete_siege()", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L65", + "community": 42, + "norm_label": "delete_siege()", + "id": "api_sieges_delete_siege" + }, + { + "label": "SiegeMemberCreate", + "file_type": "code", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L12", + "community": 8, + "norm_label": "siegemembercreate", + "id": "api_siege_members_siegemembercreate" + }, + { + "label": "list_siege_members()", + "file_type": "code", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L28", + "community": 42, + "norm_label": "list_siege_members()", + "id": "api_siege_members_list_siege_members" + }, + { + "label": "validation.py", + "file_type": "code", + "source_file": "backend/app/api/validation.py", + "source_location": "L1", + "community": 3, + "norm_label": "validation.py", + "id": "backend_app_api_validation_py" + }, + { + "label": "_read_backend_version()", + "file_type": "code", + "source_file": "backend/app/api/version.py", + "source_location": "L19", + "community": 40, + "norm_label": "_read_backend_version()", + "id": "api_version_read_backend_version" + }, + { + "label": "_fetch_bot_version()", + "file_type": "code", + "source_file": "backend/app/api/version.py", + "source_location": "L42", + "community": 40, + "norm_label": "_fetch_bot_version()", + "id": "api_version_fetch_bot_version" + }, + { + "label": "Return a version string for the backend. When both BUILD_NUMBER and GIT_SHA", + "file_type": "rationale", + "source_file": "backend/app/api/version.py", + "source_location": "L20", + "community": 40, + "norm_label": "return a version string for the backend. when both build_number and git_sha", + "id": "api_version_rationale_20" + }, + { + "label": "Call the bot sidecar's /version endpoint. Returns None if unreachable.", + "file_type": "rationale", + "source_file": "backend/app/api/version.py", + "source_location": "L43", + "community": 40, + "norm_label": "call the bot sidecar's /version endpoint. returns none if unreachable.", + "id": "api_version_rationale_43" + }, + { + "label": "Return version information for all components.", + "file_type": "rationale", + "source_file": "backend/app/api/version.py", + "source_location": "L57", + "community": 40, + "norm_label": "return version information for all components.", + "id": "api_version_rationale_57" + }, + { + "label": "base.py", + "file_type": "code", + "source_file": "backend/app/db/base.py", + "source_location": "L1", + "community": 16, + "norm_label": "base.py", + "id": "backend_app_db_base_py" + }, + { + "label": "DeclarativeBase", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 16, + "norm_label": "declarativebase", + "id": "declarativebase" + }, + { + "label": "seeds.py", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L1", + "community": 5, + "norm_label": "seeds.py", + "id": "backend_app_db_seeds_py" + }, + { + "label": "seed_post_conditions()", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L7", + "community": 5, + "norm_label": "seed_post_conditions()", + "id": "db_seeds_seed_post_conditions" + }, + { + "label": "seed_building_type_config()", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L63", + "community": 5, + "norm_label": "seed_building_type_config()", + "id": "db_seeds_seed_building_type_config" + }, + { + "label": "seed_post_priority_config()", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L91", + "community": 5, + "norm_label": "seed_post_priority_config()", + "id": "db_seeds_seed_post_priority_config" + }, + { + "label": "Seed functions for reference/static data tables.", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L1", + "community": 5, + "norm_label": "seed functions for reference/static data tables.", + "id": "db_seeds_rationale_1" + }, + { + "label": "Insert all 36 PostCondition rows. Safe to re-run (ON CONFLICT DO NOTHING).", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L8", + "community": 5, + "norm_label": "insert all 36 postcondition rows. safe to re-run (on conflict do nothing).", + "id": "db_seeds_rationale_8" + }, + { + "label": "Insert all 5 BuildingTypeConfig rows. Safe to re-run (ON CONFLICT DO NOTHING).", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L64", + "community": 5, + "norm_label": "insert all 5 buildingtypeconfig rows. safe to re-run (on conflict do nothing).", + "id": "db_seeds_rationale_64" + }, + { + "label": "Insert all 18 PostPriorityConfig rows with default priority=2. Safe to re-r", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L92", + "community": 5, + "norm_label": "insert all 18 postpriorityconfig rows with default priority=2. safe to re-r", + "id": "db_seeds_rationale_92" + }, + { + "label": "session.py", + "file_type": "code", + "source_file": "backend/app/db/session.py", + "source_location": "L1", + "community": 74, + "norm_label": "session.py", + "id": "backend_app_db_session_py" + }, + { + "label": "get_db()", + "file_type": "code", + "source_file": "backend/app/db/session.py", + "source_location": "L12", + "community": 74, + "norm_label": "get_db()", + "id": "db_session_get_db" + }, + { + "label": "AuthenticatedUser", + "file_type": "code", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L23", + "community": 26, + "norm_label": "authenticateduser", + "id": "dependencies_auth_authenticateduser" + }, + { + "label": "get_current_user()", + "file_type": "code", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L33", + "community": 26, + "norm_label": "get_current_user()", + "id": "dependencies_auth_get_current_user" + }, + { + "label": "FastAPI dependency for request authentication. Checks three paths in order: 1.", + "file_type": "rationale", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L1", + "community": 26, + "norm_label": "fastapi dependency for request authentication. checks three paths in order: 1.", + "id": "dependencies_auth_rationale_1" + }, + { + "label": "Represents the currently authenticated user or service principal.", + "file_type": "rationale", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L24", + "community": 26, + "norm_label": "represents the currently authenticated user or service principal.", + "id": "dependencies_auth_rationale_24" + }, + { + "label": "Resolve the caller's identity from the incoming request. Tries three mechan", + "file_type": "rationale", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L37", + "community": 26, + "norm_label": "resolve the caller's identity from the incoming request. tries three mechan", + "id": "dependencies_auth_rationale_37" + }, + { + "label": "Base", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 16, + "norm_label": "base", + "id": "base" + }, + { + "label": "BuildingGroup", + "file_type": "code", + "source_file": "backend/app/models/building_group.py", + "source_location": "L13", + "community": 16, + "norm_label": "buildinggroup", + "id": "models_building_group_buildinggroup" + }, + { + "label": "building_type_config.py", + "file_type": "code", + "source_file": "backend/app/models/building_type_config.py", + "source_location": "L1", + "community": 16, + "norm_label": "building_type_config.py", + "id": "backend_app_models_building_type_config_py" + }, + { + "label": "enums.py", + "file_type": "code", + "source_file": "backend/app/models/enums.py", + "source_location": "L1", + "community": 52, + "norm_label": "enums.py", + "id": "backend_app_models_enums_py" + }, + { + "label": "PowerLevel", + "file_type": "code", + "source_file": "backend/app/models/enums.py", + "source_location": "L25", + "community": 52, + "norm_label": "powerlevel", + "id": "models_enums_powerlevel" + }, + { + "label": "NotificationBatchStatus", + "file_type": "code", + "source_file": "backend/app/models/enums.py", + "source_location": "L33", + "community": 34, + "norm_label": "notificationbatchstatus", + "id": "models_enums_notificationbatchstatus" + }, + { + "label": "member.py", + "file_type": "code", + "source_file": "backend/app/models/member.py", + "source_location": "L1", + "community": 52, + "norm_label": "member.py", + "id": "backend_app_models_member_py" + }, + { + "label": "member_post_preference.py", + "file_type": "code", + "source_file": "backend/app/models/member_post_preference.py", + "source_location": "L1", + "community": 99, + "norm_label": "member_post_preference.py", + "id": "backend_app_models_member_post_preference_py" + }, + { + "label": "notification_batch_result.py", + "file_type": "code", + "source_file": "backend/app/models/notification_batch_result.py", + "source_location": "L1", + "community": 34, + "norm_label": "notification_batch_result.py", + "id": "backend_app_models_notification_batch_result_py" + }, + { + "label": "position.py", + "file_type": "code", + "source_file": "backend/app/models/position.py", + "source_location": "L1", + "community": 16, + "norm_label": "position.py", + "id": "backend_app_models_position_py" + }, + { + "label": "Position", + "file_type": "code", + "source_file": "backend/app/models/position.py", + "source_location": "L14", + "community": 16, + "norm_label": "position", + "id": "models_position_position" + }, + { + "label": "post.py", + "file_type": "code", + "source_file": "backend/app/models/post.py", + "source_location": "L1", + "community": 8, + "norm_label": "post.py", + "id": "backend_app_models_post_py" + }, + { + "label": "post_active_condition.py", + "file_type": "code", + "source_file": "backend/app/models/post_active_condition.py", + "source_location": "L1", + "community": 100, + "norm_label": "post_active_condition.py", + "id": "backend_app_models_post_active_condition_py" + }, + { + "label": "siege.py", + "file_type": "code", + "source_file": "backend/app/models/siege.py", + "source_location": "L1", + "community": 16, + "norm_label": "siege.py", + "id": "backend_app_models_siege_py" + }, + { + "label": "PositionBoardResponse", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L6", + "community": 8, + "norm_label": "positionboardresponse", + "id": "schemas_board_positionboardresponse" + }, + { + "label": "GroupBoardResponse", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L17", + "community": 8, + "norm_label": "groupboardresponse", + "id": "schemas_board_groupboardresponse" + }, + { + "label": "BuildingBoardResponse", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L25", + "community": 8, + "norm_label": "buildingboardresponse", + "id": "schemas_board_buildingboardresponse" + }, + { + "label": "PositionUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L40", + "community": 8, + "norm_label": "positionupdate", + "id": "schemas_board_positionupdate" + }, + { + "label": "BulkPositionUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L47", + "community": 8, + "norm_label": "bulkpositionupdate", + "id": "schemas_board_bulkpositionupdate" + }, + { + "label": "BuildingCreate", + "file_type": "code", + "source_file": "backend/app/schemas/building.py", + "source_location": "L6", + "community": 8, + "norm_label": "buildingcreate", + "id": "schemas_building_buildingcreate" + }, + { + "label": "BuildingUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/building.py", + "source_location": "L12", + "community": 0, + "norm_label": "buildingupdate", + "id": "schemas_building_buildingupdate" + }, + { + "label": "GroupCreate", + "file_type": "code", + "source_file": "backend/app/schemas/building.py", + "source_location": "L43", + "community": 8, + "norm_label": "groupcreate", + "id": "schemas_building_groupcreate" + }, + { + "label": "ChangelogStatusResponse", + "file_type": "code", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L8", + "community": 49, + "norm_label": "changelogstatusresponse", + "id": "schemas_changelog_changelogstatusresponse" + }, + { + "label": "Response schemas for the changelog endpoints.", + "file_type": "rationale", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L1", + "community": 49, + "norm_label": "response schemas for the changelog endpoints.", + "id": "schemas_changelog_rationale_1" + }, + { + "label": "Response shape for both GET /changelog/status and POST /changelog/mark-seen.", + "file_type": "rationale", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L9", + "community": 49, + "norm_label": "response shape for both get /changelog/status and post /changelog/mark-seen.", + "id": "schemas_changelog_rationale_9" + }, + { + "label": "common.py", + "file_type": "code", + "source_file": "backend/app/schemas/common.py", + "source_location": "L1", + "community": 8, + "norm_label": "common.py", + "id": "backend_app_schemas_common_py" + }, + { + "label": "ErrorResponse", + "file_type": "code", + "source_file": "backend/app/schemas/common.py", + "source_location": "L4", + "community": 8, + "norm_label": "errorresponse", + "id": "schemas_common_errorresponse" + }, + { + "label": "MemberBase", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L8", + "community": 52, + "norm_label": "memberbase", + "id": "schemas_member_memberbase" + }, + { + "label": "MemberCreate", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L15", + "community": 52, + "norm_label": "membercreate", + "id": "schemas_member_membercreate" + }, + { + "label": "MemberUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L19", + "community": 52, + "norm_label": "memberupdate", + "id": "schemas_member_memberupdate" + }, + { + "label": "MemberResponse", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L27", + "community": 52, + "norm_label": "memberresponse", + "id": "schemas_member_memberresponse" + }, + { + "label": "MemberPreferencesUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L35", + "community": 52, + "norm_label": "memberpreferencesupdate", + "id": "schemas_member_memberpreferencesupdate" + }, + { + "label": "SyncApply", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L59", + "community": 13, + "norm_label": "syncapply", + "id": "schemas_member_syncapply" + }, + { + "label": "SyncApplyResponse", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L65", + "community": 13, + "norm_label": "syncapplyresponse", + "id": "schemas_member_syncapplyresponse" + }, + { + "label": "PostResponse", + "file_type": "code", + "source_file": "backend/app/schemas/post.py", + "source_location": "L6", + "community": 8, + "norm_label": "postresponse", + "id": "schemas_post_postresponse" + }, + { + "label": "PostUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/post.py", + "source_location": "L17", + "community": 8, + "norm_label": "postupdate", + "id": "schemas_post_postupdate" + }, + { + "label": "PostConditionsUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/post.py", + "source_location": "L22", + "community": 8, + "norm_label": "postconditionsupdate", + "id": "schemas_post_postconditionsupdate" + }, + { + "label": "PostConditionResponse", + "file_type": "code", + "source_file": "backend/app/schemas/post_condition.py", + "source_location": "L4", + "community": 8, + "norm_label": "postconditionresponse", + "id": "schemas_post_condition_postconditionresponse" + }, + { + "label": "PostSuggestionApplyRequest", + "file_type": "code", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L79", + "community": 32, + "norm_label": "postsuggestionapplyrequest", + "id": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "label": "StaleEntry", + "file_type": "code", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L91", + "community": 24, + "norm_label": "staleentry", + "id": "schemas_post_suggestions_staleentry" + }, + { + "label": "Pydantic schemas for the Suggest Post Assignments feature. These schemas define", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L1", + "community": 24, + "norm_label": "pydantic schemas for the suggest post assignments feature. these schemas define", + "id": "schemas_post_suggestions_rationale_1" + }, + { + "label": "A single post assignment suggestion produced by the greedy algorithm. Attri", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L13", + "community": 8, + "norm_label": "a single post assignment suggestion produced by the greedy algorithm. attri", + "id": "schemas_post_suggestions_rationale_13" + }, + { + "label": "The full preview result returned by POST /post-suggestions. Attributes:", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L66", + "community": 36, + "norm_label": "the full preview result returned by post /post-suggestions. attributes:", + "id": "schemas_post_suggestions_rationale_66" + }, + { + "label": "Request body for POST /post-suggestions/apply. Attributes: apply_po", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L80", + "community": 32, + "norm_label": "request body for post /post-suggestions/apply. attributes: apply_po", + "id": "schemas_post_suggestions_rationale_80" + }, + { + "label": "A single stale-state violation detected during apply revalidation. Attribut", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L92", + "community": 24, + "norm_label": "a single stale-state violation detected during apply revalidation. attribut", + "id": "schemas_post_suggestions_rationale_92" + }, + { + "label": "Response body for a successful POST /post-suggestions/apply. Attributes:", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L117", + "community": 8, + "norm_label": "response body for a successful post /post-suggestions/apply. attributes:", + "id": "schemas_post_suggestions_rationale_117" + }, + { + "label": "SiegeCreate", + "file_type": "code", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L8", + "community": 16, + "norm_label": "siegecreate", + "id": "schemas_siege_siegecreate" + }, + { + "label": "SiegeUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L12", + "community": 16, + "norm_label": "siegeupdate", + "id": "schemas_siege_siegeupdate" + }, + { + "label": "SiegeResponse", + "file_type": "code", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L16", + "community": 16, + "norm_label": "siegeresponse", + "id": "schemas_siege_siegeresponse" + }, + { + "label": "SiegeMemberResponse", + "file_type": "code", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L6", + "community": 8, + "norm_label": "siegememberresponse", + "id": "schemas_siege_member_siegememberresponse" + }, + { + "label": "resolve_member_fields()", + "file_type": "code", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L19", + "community": 3, + "norm_label": "resolve_member_fields()", + "id": "schemas_siege_member_resolve_member_fields" + }, + { + "label": "SiegeMemberUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L27", + "community": 8, + "norm_label": "siegememberupdate", + "id": "schemas_siege_member_siegememberupdate" + }, + { + "label": "VersionResponse", + "file_type": "code", + "source_file": "backend/app/schemas/version.py", + "source_location": "L4", + "community": 40, + "norm_label": "versionresponse", + "id": "schemas_version_versionresponse" + }, + { + "label": "_build_preview()", + "file_type": "code", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L114", + "community": 24, + "norm_label": "_build_preview()", + "id": "services_attack_day_build_preview" + }, + { + "label": "_now_utc()", + "file_type": "code", + "source_file": "backend/app/services/autofill.py", + "source_location": "L23", + "community": 24, + "norm_label": "_now_utc()", + "id": "services_autofill_now_utc" + }, + { + "label": "_get_siege_for_position()", + "file_type": "code", + "source_file": "backend/app/services/board.py", + "source_location": "L89", + "community": 8, + "norm_label": "_get_siege_for_position()", + "id": "services_board_get_siege_for_position" + }, + { + "label": "_validate_position_state()", + "file_type": "code", + "source_file": "backend/app/services/board.py", + "source_location": "L97", + "community": 39, + "norm_label": "_validate_position_state()", + "id": "services_board_validate_position_state" + }, + { + "label": "_validate_member_active()", + "file_type": "code", + "source_file": "backend/app/services/board.py", + "source_location": "L112", + "community": 8, + "norm_label": "_validate_member_active()", + "id": "services_board_validate_member_active" + }, + { + "label": "Return the full nested board structure for a siege. Raises 404 if the siege", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L16", + "community": 8, + "norm_label": "return the full nested board structure for a siege. raises 404 if the siege", + "id": "services_board_rationale_16" + }, + { + "label": "Validate the logical consistency of position flag combinations.", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L98", + "community": 39, + "norm_label": "validate the logical consistency of position flag combinations.", + "id": "services_board_rationale_98" + }, + { + "label": "Update a single position's assignment. Raises: 404 if position not", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L123", + "community": 39, + "norm_label": "update a single position's assignment. raises: 404 if position not", + "id": "services_board_rationale_123" + }, + { + "label": "Apply multiple position updates in a single transaction. Each update dict m", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L172", + "community": 39, + "norm_label": "apply multiple position updates in a single transaction. each update dict m", + "id": "services_board_rationale_172" + }, + { + "label": "BotClient", + "file_type": "code", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L8", + "community": 61, + "norm_label": "botclient", + "id": "services_bot_client_botclient" + }, + { + "label": "._make_client()", + "file_type": "code", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L11", + "community": 61, + "norm_label": "._make_client()", + "id": "services_bot_client_botclient_make_client" + }, + { + "label": "HTTP client for the Discord bot sidecar API.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L1", + "community": 61, + "norm_label": "http client for the discord bot sidecar api.", + "id": "services_bot_client_rationale_1" + }, + { + "label": "Send DM via bot. Returns True on success, False on error.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L19", + "community": 61, + "norm_label": "send dm via bot. returns true on success, false on error.", + "id": "services_bot_client_rationale_19" + }, + { + "label": "Post text to channel. Returns True on success, False on error.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L32", + "community": 37, + "norm_label": "post text to channel. returns true on success, false on error.", + "id": "services_bot_client_rationale_32" + }, + { + "label": "Post image to channel. Returns the CDN URL on success, None on error.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L45", + "community": 37, + "norm_label": "post image to channel. returns the cdn url on success, none on error.", + "id": "services_bot_client_rationale_45" + }, + { + "label": "Check guild membership via bot sidecar. Returns the member dict (includi", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L72", + "community": 57, + "norm_label": "check guild membership via bot sidecar. returns the member dict (includi", + "id": "services_bot_client_rationale_72" + }, + { + "label": "_rebuild_groups_for_level()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L17", + "community": 45, + "norm_label": "_rebuild_groups_for_level()", + "id": "services_buildings_rebuild_groups_for_level" + }, + { + "label": "_get_building_type_config()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L114", + "community": 45, + "norm_label": "_get_building_type_config()", + "id": "services_buildings_get_building_type_config" + }, + { + "label": "_require_planning_or_not_locked()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L141", + "community": 45, + "norm_label": "_require_planning_or_not_locked()", + "id": "services_buildings_require_planning_or_not_locked" + }, + { + "label": "_create_groups_and_positions()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L150", + "community": 45, + "norm_label": "_create_groups_and_positions()", + "id": "services_buildings_create_groups_and_positions" + }, + { + "label": "Rebuild groups and positions so they match the level-appropriate configuration.", + "file_type": "rationale", + "source_file": "backend/app/services/buildings.py", + "source_location": "L23", + "community": 45, + "norm_label": "rebuild groups and positions so they match the level-appropriate configuration.", + "id": "services_buildings_rationale_23" + }, + { + "label": "Raise 400 if the siege is locked for layout changes.", + "file_type": "rationale", + "source_file": "backend/app/services/buildings.py", + "source_location": "L142", + "community": 45, + "norm_label": "raise 400 if the siege is locked for layout changes.", + "id": "services_buildings_rationale_142" + }, + { + "label": "Auto-create BuildingGroups and Positions from config.", + "file_type": "rationale", + "source_file": "backend/app/services/buildings.py", + "source_location": "L156", + "community": 45, + "norm_label": "auto-create buildinggroups and positions from config.", + "id": "services_buildings_rationale_156" + }, + { + "label": "building_capacity.py", + "file_type": "code", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L1", + "community": 30, + "norm_label": "building_capacity.py", + "id": "backend_app_services_building_capacity_py" + }, + { + "label": "get_team_count()", + "file_type": "code", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L13", + "community": 30, + "norm_label": "get_team_count()", + "id": "services_building_capacity_get_team_count" + }, + { + "label": "Return the theoretical total team slots for a building type at a given level.", + "file_type": "rationale", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L14", + "community": 30, + "norm_label": "return the theoretical total team slots for a building type at a given level.", + "id": "services_building_capacity_rationale_14" + }, + { + "label": "_load_assignments()", + "file_type": "code", + "source_file": "backend/app/services/comparison.py", + "source_location": "L13", + "community": 25, + "norm_label": "_load_assignments()", + "id": "services_comparison_load_assignments" + }, + { + "label": "_load_member_names()", + "file_type": "code", + "source_file": "backend/app/services/comparison.py", + "source_location": "L45", + "community": 25, + "norm_label": "_load_member_names()", + "id": "services_comparison_load_member_names" + }, + { + "label": "get_most_recent_completed()", + "file_type": "code", + "source_file": "backend/app/services/comparison.py", + "source_location": "L52", + "community": 25, + "norm_label": "get_most_recent_completed()", + "id": "services_comparison_get_most_recent_completed" + }, + { + "label": "Return {member_id: [PositionKey, ...]} for non-reserve, non-disabled assigned po", + "file_type": "rationale", + "source_file": "backend/app/services/comparison.py", + "source_location": "L14", + "community": 25, + "norm_label": "return {member_id: [positionkey, ...]} for non-reserve, non-disabled assigned po", + "id": "services_comparison_rationale_14" + }, + { + "label": "Service logic for Discord guild member \u2192 clan member matching.", + "file_type": "rationale", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L1", + "community": 13, + "norm_label": "service logic for discord guild member \u2192 clan member matching.", + "id": "services_discord_sync_rationale_1" + }, + { + "label": "Return proposed matches between Discord guild members and clan members. Mat", + "file_type": "rationale", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L12", + "community": 13, + "norm_label": "return proposed matches between discord guild members and clan members. mat", + "id": "services_discord_sync_rationale_12" + }, + { + "label": "Apply accepted sync matches, writing discord_username and discord_id. Unkno", + "file_type": "rationale", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L153", + "community": 13, + "norm_label": "apply accepted sync matches, writing discord_username and discord_id. unkno", + "id": "services_discord_sync_rationale_153" + }, + { + "label": "image_gen.py", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L1", + "community": 2, + "norm_label": "image_gen.py", + "id": "backend_app_services_image_gen_py" + }, + { + "label": "SiegeMemberWithName", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L14", + "community": 34, + "norm_label": "siegememberwithname", + "id": "services_image_gen_siegememberwithname" + }, + { + "label": "_build_assignments_html()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L61", + "community": 2, + "norm_label": "_build_assignments_html()", + "id": "services_image_gen_build_assignments_html" + }, + { + "label": "_build_reserves_html()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L233", + "community": 2, + "norm_label": "_build_reserves_html()", + "id": "services_image_gen_build_reserves_html" + }, + { + "label": "_render_html_to_png()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L331", + "community": 2, + "norm_label": "_render_html_to_png()", + "id": "services_image_gen_render_html_to_png" + }, + { + "label": "generate_assignments_image()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L350", + "community": 2, + "norm_label": "generate_assignments_image()", + "id": "services_image_gen_generate_assignments_image" + }, + { + "label": "generate_reserves_image()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L360", + "community": 2, + "norm_label": "generate_reserves_image()", + "id": "services_image_gen_generate_reserves_image" + }, + { + "label": "Image generation service \u2014 renders HTML/CSS to PNG via Playwright.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L1", + "community": 2, + "norm_label": "image generation service \u2014 renders html/css to png via playwright.", + "id": "services_image_gen_rationale_1" + }, + { + "label": "Build the full assignments board HTML string. Args: board: Validate", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L66", + "community": 2, + "norm_label": "build the full assignments board html string. args: board: validate", + "id": "services_image_gen_rationale_66" + }, + { + "label": "Build the reserves/members list HTML string. Args: members: Siege m", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L237", + "community": 2, + "norm_label": "build the reserves/members list html string. args: members: siege m", + "id": "services_image_gen_rationale_237" + }, + { + "label": "Render an HTML string to PNG bytes using headless Chromium.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L332", + "community": 2, + "norm_label": "render an html string to png bytes using headless chromium.", + "id": "services_image_gen_rationale_332" + }, + { + "label": "Render the assignments board as a PNG. Returns raw PNG bytes.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L355", + "community": 2, + "norm_label": "render the assignments board as a png. returns raw png bytes.", + "id": "services_image_gen_rationale_355" + }, + { + "label": "Render the members/reserves list as a PNG. Returns raw PNG bytes.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L364", + "community": 2, + "norm_label": "render the members/reserves list as a png. returns raw png bytes.", + "id": "services_image_gen_rationale_364" + }, + { + "label": "Transition a planning siege to active status. Raises: 404 if siege", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L18", + "community": 3, + "norm_label": "transition a planning siege to active status. raises: 404 if siege", + "id": "services_lifecycle_rationale_18" + }, + { + "label": "Transition an active siege to complete status. Raises: 404 if siege", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L62", + "community": 3, + "norm_label": "transition an active siege to complete status. raises: 404 if siege", + "id": "services_lifecycle_rationale_62" + }, + { + "label": "Transition a completed siege back to planning status. Raises: 404 i", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L86", + "community": 3, + "norm_label": "transition a completed siege back to planning status. raises: 404 i", + "id": "services_lifecycle_rationale_86" + }, + { + "label": "Deep-copy a siege into a new planning siege. Rules: - New siege: same d", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L110", + "community": 3, + "norm_label": "deep-copy a siege into a new planning siege. rules: - new siege: same d", + "id": "services_lifecycle_rationale_110" + }, + { + "label": "deactivate_member()", + "file_type": "code", + "source_file": "backend/app/services/members.py", + "source_location": "L81", + "community": 57, + "norm_label": "deactivate_member()", + "id": "services_members_deactivate_member" + }, + { + "label": "notification_message.py", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L1", + "community": 4, + "norm_label": "notification_message.py", + "id": "backend_app_services_notification_message_py" + }, + { + "label": "PositionInfo", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L60", + "community": 4, + "norm_label": "positioninfo", + "id": "services_notification_message_positioninfo" + }, + { + "label": "_position_sort_key()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L74", + "community": 4, + "norm_label": "_position_sort_key()", + "id": "services_notification_message_position_sort_key" + }, + { + "label": "_position_label()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L84", + "community": 4, + "norm_label": "_position_label()", + "id": "services_notification_message_position_label" + }, + { + "label": "_positions_to_key_set()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L110", + "community": 4, + "norm_label": "_positions_to_key_set()", + "id": "services_notification_message_positions_to_key_set" + }, + { + "label": "_positions_from_keys()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L117", + "community": 4, + "norm_label": "_positions_from_keys()", + "id": "services_notification_message_positions_from_keys" + }, + { + "label": "_build_section()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L126", + "community": 4, + "norm_label": "_build_section()", + "id": "services_notification_message_build_section" + }, + { + "label": "build_member_notification_message()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L153", + "community": 4, + "norm_label": "build_member_notification_message()", + "id": "services_notification_message_build_member_notification_message" + }, + { + "label": "Build rich per-member Discord DM messages for siege assignment notifications.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L1", + "community": 4, + "norm_label": "build rich per-member discord dm messages for siege assignment notifications.", + "id": "services_notification_message_rationale_1" + }, + { + "label": "Minimal description of a single assigned position.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L61", + "community": 4, + "norm_label": "minimal description of a single assigned position.", + "id": "services_notification_message_rationale_61" + }, + { + "label": "Return a sortable tuple for consistent ordering within a section. Sorts by:", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L75", + "community": 4, + "norm_label": "return a sortable tuple for consistent ordering within a section. sorts by:", + "id": "services_notification_message_rationale_75" + }, + { + "label": "Format a human-readable label for a position. Posts always use the short ``", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L85", + "community": 4, + "norm_label": "format a human-readable label for a position. posts always use the short ``", + "id": "services_notification_message_rationale_85" + }, + { + "label": "Convert a list of PositionInfo objects to a set of comparable tuples.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L111", + "community": 4, + "norm_label": "convert a list of positioninfo objects to a set of comparable tuples.", + "id": "services_notification_message_rationale_111" + }, + { + "label": "Filter ``positions`` to those whose key is in ``keys``, preserving PositionInfo", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L118", + "community": 4, + "norm_label": "filter ``positions`` to those whose key is in ``keys``, preserving positioninfo", + "id": "services_notification_message_rationale_118" + }, + { + "label": "Render one diff section as a header line followed by plain position lines.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L131", + "community": 4, + "norm_label": "render one diff section as a header line followed by plain position lines.", + "id": "services_notification_message_rationale_131" + }, + { + "label": "Build a rich Discord DM message for a single siege member. Args: si", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L161", + "community": 4, + "norm_label": "build a rich discord dm message for a single siege member. args: si", + "id": "services_notification_message_rationale_161" + }, + { + "label": "_get_siege_or_404()", + "file_type": "code", + "source_file": "backend/app/services/posts.py", + "source_location": "L15", + "community": 39, + "norm_label": "_get_siege_or_404()", + "id": "services_posts_get_siege_or_404" + }, + { + "label": "_get_post_for_siege_or_404()", + "file_type": "code", + "source_file": "backend/app/services/posts.py", + "source_location": "L23", + "community": 39, + "norm_label": "_get_post_for_siege_or_404()", + "id": "services_posts_get_post_for_siege_or_404" + }, + { + "label": "Return all Post records for a siege with active_conditions loaded. Raises:", + "file_type": "rationale", + "source_file": "backend/app/services/posts.py", + "source_location": "L37", + "community": 39, + "norm_label": "return all post records for a siege with active_conditions loaded. raises:", + "id": "services_posts_rationale_37" + }, + { + "label": "Update a post's priority and/or description. Raises: 404 if post no", + "file_type": "rationale", + "source_file": "backend/app/services/posts.py", + "source_location": "L55", + "community": 39, + "norm_label": "update a post's priority and/or description. raises: 404 if post no", + "id": "services_posts_rationale_55" + }, + { + "label": "Replace all active conditions on a post. Raises: 404 if post not fo", + "file_type": "rationale", + "source_file": "backend/app/services/posts.py", + "source_location": "L79", + "community": 39, + "norm_label": "replace all active conditions on a post. raises: 404 if post not fo", + "id": "services_posts_rationale_79" + }, + { + "label": "_get_target_position()", + "file_type": "code", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L517", + "community": 24, + "norm_label": "_get_target_position()", + "id": "services_post_suggestions_get_target_position" + }, + { + "label": "_null_entry()", + "file_type": "code", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L537", + "community": 24, + "norm_label": "_null_entry()", + "id": "services_post_suggestions_null_entry" + }, + { + "label": "Service implementing the Suggest Post Assignments feature. Public API: prev", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L1", + "community": 24, + "norm_label": "service implementing the suggest post assignments feature. public api: prev", + "id": "services_post_suggestions_rationale_1" + }, + { + "label": "Return the current UTC datetime (naive, matching DB TIMESTAMP columns).", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L71", + "community": 24, + "norm_label": "return the current utc datetime (naive, matching db timestamp columns).", + "id": "services_post_suggestions_rationale_71" + }, + { + "label": "Generate a greedy post assignment suggestion and persist it as a preview. T", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L79", + "community": 24, + "norm_label": "generate a greedy post assignment suggestion and persist it as a preview. t", + "id": "services_post_suggestions_rationale_79" + }, + { + "label": "Apply a subset of a stored post-suggestion preview atomically. The whole se", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L340", + "community": 24, + "norm_label": "apply a subset of a stored post-suggestion preview atomically. the whole se", + "id": "services_post_suggestions_rationale_340" + }, + { + "label": "Return the single target position from a post building, or None. Posts have", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L518", + "community": 24, + "norm_label": "return the single target position from a post building, or none. posts have", + "id": "services_post_suggestions_rationale_518" + }, + { + "label": "Build a PostSuggestionEntry with no suggestion (skipped post). Args:", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L546", + "community": 24, + "norm_label": "build a postsuggestionentry with no suggestion (skipped post). args:", + "id": "services_post_suggestions_rationale_546" + }, + { + "label": "# NOTE: _validate_position_state() from bulk_update_positions is NOT", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L418", + "community": 24, + "norm_label": "# note: _validate_position_state() from bulk_update_positions is not", + "id": "services_post_suggestions_rationale_418" + }, + { + "label": "# NOTE: session.refresh(pos) is not called post-write because the apply", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L489", + "community": 24, + "norm_label": "# note: session.refresh(pos) is not called post-write because the apply", + "id": "services_post_suggestions_rationale_489" + }, + { + "label": "scrolls_per_player()", + "file_type": "code", + "source_file": "backend/app/services/sieges.py", + "source_location": "L19", + "community": 42, + "norm_label": "scrolls_per_player()", + "id": "services_sieges_scrolls_per_player" + }, + { + "label": "compute_scroll_count()", + "file_type": "code", + "source_file": "backend/app/services/sieges.py", + "source_location": "L28", + "community": 30, + "norm_label": "compute_scroll_count()", + "id": "services_sieges_compute_scroll_count" + }, + { + "label": "Return the per-player scroll limit for a siege. Matches the UI formula: 4 s", + "file_type": "rationale", + "source_file": "backend/app/services/sieges.py", + "source_location": "L20", + "community": 42, + "norm_label": "return the per-player scroll limit for a siege. matches the ui formula: 4 s", + "id": "services_sieges_rationale_20" + }, + { + "label": "Compute total scroll count from the theoretical capacity of every building.", + "file_type": "rationale", + "source_file": "backend/app/services/sieges.py", + "source_location": "L29", + "community": 30, + "norm_label": "compute total scroll count from the theoretical capacity of every building.", + "id": "services_sieges_rationale_29" + }, + { + "label": "seed.py", + "file_type": "code", + "source_file": "backend/scripts/seed.py", + "source_location": "L1", + "community": 5, + "norm_label": "seed.py", + "id": "backend_scripts_seed_py" + }, + { + "label": "seed_demo.py", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L1", + "community": 5, + "norm_label": "seed_demo.py", + "id": "backend_scripts_seed_demo_py" + }, + { + "label": "get_or_create_members()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L95", + "community": 21, + "norm_label": "get_or_create_members()", + "id": "scripts_seed_demo_get_or_create_members" + }, + { + "label": "get_or_create_demo_siege()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L114", + "community": 5, + "norm_label": "get_or_create_demo_siege()", + "id": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "label": "seed_buildings_and_positions()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L133", + "community": 5, + "norm_label": "seed_buildings_and_positions()", + "id": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "label": "get_or_create_second_siege()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L203", + "community": 5, + "norm_label": "get_or_create_second_siege()", + "id": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "label": "seed_siege_members()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L220", + "community": 5, + "norm_label": "seed_siege_members()", + "id": "scripts_seed_demo_seed_siege_members" + }, + { + "label": "Return existing demo members or create them.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L96", + "community": 21, + "norm_label": "return existing demo members or create them.", + "id": "scripts_seed_demo_rationale_96" + }, + { + "label": "Return the existing demo siege or create a new one.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L115", + "community": 5, + "norm_label": "return the existing demo siege or create a new one.", + "id": "scripts_seed_demo_rationale_115" + }, + { + "label": "Create buildings, groups, and positions; assign members round-robin. member", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L139", + "community": 5, + "norm_label": "create buildings, groups, and positions; assign members round-robin. member", + "id": "scripts_seed_demo_rationale_139" + }, + { + "label": "Return the existing planning siege or create one one week after the first.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L204", + "community": 5, + "norm_label": "return the existing planning siege or create one one week after the first.", + "id": "scripts_seed_demo_rationale_204" + }, + { + "label": "Enrol members in the siege with attack day assignments.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L225", + "community": 5, + "norm_label": "enrol members in the siege with attack day assignments.", + "id": "scripts_seed_demo_rationale_225" + }, + { + "label": "disable_auth_for_tests()", + "file_type": "code", + "source_file": "backend/tests/conftest.py", + "source_location": "L30", + "community": 51, + "norm_label": "disable_auth_for_tests()", + "id": "tests_conftest_disable_auth_for_tests" + }, + { + "label": "Shared pytest configuration for backend tests. Sets required environment variab", + "file_type": "rationale", + "source_file": "backend/tests/conftest.py", + "source_location": "L1", + "community": 51, + "norm_label": "shared pytest configuration for backend tests. sets required environment variab", + "id": "tests_conftest_rationale_1" + }, + { + "label": "Bypass auth middleware for all tests by default. Individual tests that exer", + "file_type": "rationale", + "source_file": "backend/tests/conftest.py", + "source_location": "L31", + "community": 51, + "norm_label": "bypass auth middleware for all tests by default. individual tests that exer", + "id": "tests_conftest_rationale_31" + }, + { + "label": "test_attack_day.py", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L1", + "community": 11, + "norm_label": "test_attack_day.py", + "id": "backend_tests_test_attack_day_py" + }, + { + "label": "test_preview_attack_day_endpoint_200()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L62", + "community": 11, + "norm_label": "test_preview_attack_day_endpoint_200()", + "id": "tests_test_attack_day_test_preview_attack_day_endpoint_200" + }, + { + "label": "test_apply_attack_day_endpoint_200()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L80", + "community": 11, + "norm_label": "test_apply_attack_day_endpoint_200()", + "id": "tests_test_attack_day_test_apply_attack_day_endpoint_200" + }, + { + "label": "_session_for_siege()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L100", + "community": 11, + "norm_label": "_session_for_siege()", + "id": "tests_test_attack_day_session_for_siege" + }, + { + "label": "test_heavy_hitters_and_advanced_always_day2()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L113", + "community": 11, + "norm_label": "test_heavy_hitters_and_advanced_always_day2()", + "id": "tests_test_attack_day_test_heavy_hitters_and_advanced_always_day2" + }, + { + "label": "test_medium_promoted_when_under_10()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L129", + "community": 11, + "norm_label": "test_medium_promoted_when_under_10()", + "id": "tests_test_attack_day_test_medium_promoted_when_under_10" + }, + { + "label": "test_novice_promoted_when_still_under_10()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L152", + "community": 11, + "norm_label": "test_novice_promoted_when_still_under_10()", + "id": "tests_test_attack_day_test_novice_promoted_when_still_under_10" + }, + { + "label": "test_pinned_members_count_toward_threshold()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L182", + "community": 11, + "norm_label": "test_pinned_members_count_toward_threshold()", + "id": "tests_test_attack_day_test_pinned_members_count_toward_threshold" + }, + { + "label": "test_overridden_members_not_changed()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L211", + "community": 11, + "norm_label": "test_overridden_members_not_changed()", + "id": "tests_test_attack_day_test_overridden_members_not_changed" + }, + { + "label": "test_boundary_at_exactly_10()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L227", + "community": 11, + "norm_label": "test_boundary_at_exactly_10()", + "id": "tests_test_attack_day_test_boundary_at_exactly_10" + }, + { + "label": "test_apply_attack_day_commits()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L245", + "community": 11, + "norm_label": "test_apply_attack_day_commits()", + "id": "tests_test_attack_day_test_apply_attack_day_commits" + }, + { + "label": "test_apply_attack_day_409_no_preview()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L276", + "community": 11, + "norm_label": "test_apply_attack_day_409_no_preview()", + "id": "tests_test_attack_day_test_apply_attack_day_409_no_preview" + }, + { + "label": "test_apply_attack_day_409_expired()", + "file_type": "code", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L299", + "community": 11, + "norm_label": "test_apply_attack_day_409_expired()", + "id": "tests_test_attack_day_test_apply_attack_day_409_expired" + }, + { + "label": "Tests for the attack day auto-assign algorithm.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L1", + "community": 11, + "norm_label": "tests for the attack day auto-assign algorithm.", + "id": "tests_test_attack_day_rationale_1" + }, + { + "label": "Heavy hitters and advanced always get Day 2 regardless of threshold.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L114", + "community": 11, + "norm_label": "heavy hitters and advanced always get day 2 regardless of threshold.", + "id": "tests_test_attack_day_rationale_114" + }, + { + "label": "Medium members are promoted to Day 2 (by power desc) when count < 10.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L130", + "community": 11, + "norm_label": "medium members are promoted to day 2 (by power desc) when count < 10.", + "id": "tests_test_attack_day_rationale_130" + }, + { + "label": "Novice promoted by power desc after medium if still < 10.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L153", + "community": 11, + "norm_label": "novice promoted by power desc after medium if still < 10.", + "id": "tests_test_attack_day_rationale_153" + }, + { + "label": "Overridden Day 2 members count toward the 10-threshold.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L183", + "community": 11, + "norm_label": "overridden day 2 members count toward the 10-threshold.", + "id": "tests_test_attack_day_rationale_183" + }, + { + "label": "attack_day_override=True members keep their existing attack_day.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L212", + "community": 11, + "norm_label": "attack_day_override=true members keep their existing attack_day.", + "id": "tests_test_attack_day_rationale_212" + }, + { + "label": "Exactly 10 HH/ADV \u2192 all remaining go to Day 1.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L228", + "community": 11, + "norm_label": "exactly 10 hh/adv \u2192 all remaining go to day 1.", + "id": "tests_test_attack_day_rationale_228" + }, + { + "label": "Apply reads stored preview and updates siege_member attack_day values.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L246", + "community": 11, + "norm_label": "apply reads stored preview and updates siege_member attack_day values.", + "id": "tests_test_attack_day_rationale_246" + }, + { + "label": "Returns 409 when no preview exists.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L277", + "community": 11, + "norm_label": "returns 409 when no preview exists.", + "id": "tests_test_attack_day_rationale_277" + }, + { + "label": "Returns 409 when preview has expired.", + "file_type": "rationale", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L300", + "community": 11, + "norm_label": "returns 409 when preview has expired.", + "id": "tests_test_attack_day_rationale_300" + }, + { + "label": "test_auth.py", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L1", + "community": 33, + "norm_label": "test_auth.py", + "id": "backend_tests_test_auth_py" + }, + { + "label": "_make_jwt()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L24", + "community": 55, + "norm_label": "_make_jwt()", + "id": "tests_test_auth_make_jwt" + }, + { + "label": "_make_expired_jwt()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L38", + "community": 33, + "norm_label": "_make_expired_jwt()", + "id": "tests_test_auth_make_expired_jwt" + }, + { + "label": "_make_member()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L53", + "community": 6, + "norm_label": "_make_member()", + "id": "tests_test_auth_make_member" + }, + { + "label": "_make_mock_db()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L70", + "community": 31, + "norm_label": "_make_mock_db()", + "id": "tests_test_auth_make_mock_db" + }, + { + "label": "test_auth_disabled_allows_access()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L92", + "community": 82, + "norm_label": "test_auth_disabled_allows_access()", + "id": "tests_test_auth_test_auth_disabled_allows_access" + }, + { + "label": "test_valid_service_token_allows_access()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L117", + "community": 31, + "norm_label": "test_valid_service_token_allows_access()", + "id": "tests_test_auth_test_valid_service_token_allows_access" + }, + { + "label": "test_invalid_service_token_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L145", + "community": 33, + "norm_label": "test_invalid_service_token_returns_401()", + "id": "tests_test_auth_test_invalid_service_token_returns_401" + }, + { + "label": "test_valid_jwt_cookie_allows_access()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L167", + "community": 55, + "norm_label": "test_valid_jwt_cookie_allows_access()", + "id": "tests_test_auth_test_valid_jwt_cookie_allows_access" + }, + { + "label": "test_expired_jwt_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L196", + "community": 33, + "norm_label": "test_expired_jwt_returns_401()", + "id": "tests_test_auth_test_expired_jwt_returns_401" + }, + { + "label": "test_jwt_with_wrong_secret_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L218", + "community": 55, + "norm_label": "test_jwt_with_wrong_secret_returns_401()", + "id": "tests_test_auth_test_jwt_with_wrong_secret_returns_401" + }, + { + "label": "test_jwt_with_deleted_member_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L241", + "community": 55, + "norm_label": "test_jwt_with_deleted_member_returns_401()", + "id": "tests_test_auth_test_jwt_with_deleted_member_returns_401" + }, + { + "label": "test_no_auth_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L266", + "community": 84, + "norm_label": "test_no_auth_returns_401()", + "id": "tests_test_auth_test_no_auth_returns_401" + }, + { + "label": "test_health_no_auth_required()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L286", + "community": 78, + "norm_label": "test_health_no_auth_required()", + "id": "tests_test_auth_test_health_no_auth_required" + }, + { + "label": "test_version_no_auth_required()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L305", + "community": 33, + "norm_label": "test_version_no_auth_required()", + "id": "tests_test_auth_test_version_no_auth_required" + }, + { + "label": "test_login_returns_discord_url_and_state_cookie()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L323", + "community": 83, + "norm_label": "test_login_returns_discord_url_and_state_cookie()", + "id": "tests_test_auth_test_login_returns_discord_url_and_state_cookie" + }, + { + "label": "test_callback_invalid_state_redirects()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L343", + "community": 33, + "norm_label": "test_callback_invalid_state_redirects()", + "id": "tests_test_auth_test_callback_invalid_state_redirects" + }, + { + "label": "test_callback_happy_path()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L361", + "community": 31, + "norm_label": "test_callback_happy_path()", + "id": "tests_test_auth_test_callback_happy_path" + }, + { + "label": "test_callback_not_in_guild_redirects()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L412", + "community": 79, + "norm_label": "test_callback_not_in_guild_redirects()", + "id": "tests_test_auth_test_callback_not_in_guild_redirects" + }, + { + "label": "test_callback_insufficient_role_redirects()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L445", + "community": 77, + "norm_label": "test_callback_insufficient_role_redirects()", + "id": "tests_test_auth_test_callback_insufficient_role_redirects" + }, + { + "label": "test_callback_insufficient_role_missing_role_names_key_redirects()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L481", + "community": 33, + "norm_label": "test_callback_insufficient_role_missing_role_names_key_redirects()", + "id": "tests_test_auth_test_callback_insufficient_role_missing_role_names_key_redirects" + }, + { + "label": "test_callback_with_required_role_proceeds_to_member_lookup()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L516", + "community": 31, + "norm_label": "test_callback_with_required_role_proceeds_to_member_lookup()", + "id": "tests_test_auth_test_callback_with_required_role_proceeds_to_member_lookup" + }, + { + "label": "test_callback_bot_unreachable_redirects_service_unavailable()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L567", + "community": 33, + "norm_label": "test_callback_bot_unreachable_redirects_service_unavailable()", + "id": "tests_test_auth_test_callback_bot_unreachable_redirects_service_unavailable" + }, + { + "label": "test_callback_no_member_record_redirects()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L600", + "community": 33, + "norm_label": "test_callback_no_member_record_redirects()", + "id": "tests_test_auth_test_callback_no_member_record_redirects" + }, + { + "label": "test_logout_clears_session_cookie()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L647", + "community": 80, + "norm_label": "test_logout_clears_session_cookie()", + "id": "tests_test_auth_test_logout_clears_session_cookie" + }, + { + "label": "test_me_with_valid_session()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L660", + "community": 55, + "norm_label": "test_me_with_valid_session()", + "id": "tests_test_auth_test_me_with_valid_session" + }, + { + "label": "test_me_without_auth_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L692", + "community": 81, + "norm_label": "test_me_without_auth_returns_401()", + "id": "tests_test_auth_test_me_without_auth_returns_401" + }, + { + "label": "TestStartupValidation", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L716", + "community": 33, + "norm_label": "teststartupvalidation", + "id": "tests_test_auth_teststartupvalidation" + }, + { + "label": "test_startup_rejects_empty_session_secret()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L719", + "community": 33, + "norm_label": "test_startup_rejects_empty_session_secret()", + "id": "tests_test_auth_test_startup_rejects_empty_session_secret" + }, + { + "label": "test_startup_rejects_missing_bot_service_token_in_production()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L730", + "community": 33, + "norm_label": "test_startup_rejects_missing_bot_service_token_in_production()", + "id": "tests_test_auth_test_startup_rejects_missing_bot_service_token_in_production" + }, + { + "label": "test_startup_allows_empty_bot_service_token_in_development()", + "file_type": "code", + "source_file": "backend/tests/test_auth.py", + "source_location": "L742", + "community": 33, + "norm_label": "test_startup_allows_empty_bot_service_token_in_development()", + "id": "tests_test_auth_test_startup_allows_empty_bot_service_token_in_development" + }, + { + "label": "Tests for Discord OAuth2 auth middleware and endpoints.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L1", + "community": 33, + "norm_label": "tests for discord oauth2 auth middleware and endpoints.", + "id": "tests_test_auth_rationale_1" + }, + { + "label": "Return an AsyncMock session whose db.get() returns `member`.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L71", + "community": 31, + "norm_label": "return an asyncmock session whose db.get() returns `member`.", + "id": "tests_test_auth_rationale_71" + }, + { + "label": "AUTH_DISABLED=true + ENVIRONMENT=development bypasses auth entirely.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L93", + "community": 82, + "norm_label": "auth_disabled=true + environment=development bypasses auth entirely.", + "id": "tests_test_auth_rationale_93" + }, + { + "label": "A correct Bearer token grants access as the bot-service principal.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L118", + "community": 31, + "norm_label": "a correct bearer token grants access as the bot-service principal.", + "id": "tests_test_auth_rationale_118" + }, + { + "label": "A wrong Bearer token is rejected with 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L146", + "community": 33, + "norm_label": "a wrong bearer token is rejected with 401.", + "id": "tests_test_auth_rationale_146" + }, + { + "label": "A valid JWT session cookie with an existing member grants access.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L168", + "community": 55, + "norm_label": "a valid jwt session cookie with an existing member grants access.", + "id": "tests_test_auth_rationale_168" + }, + { + "label": "An expired JWT cookie is rejected with 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L197", + "community": 33, + "norm_label": "an expired jwt cookie is rejected with 401.", + "id": "tests_test_auth_rationale_197" + }, + { + "label": "A JWT signed with a different secret is rejected with 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L219", + "community": 55, + "norm_label": "a jwt signed with a different secret is rejected with 401.", + "id": "tests_test_auth_rationale_219" + }, + { + "label": "A valid JWT whose member no longer exists in the DB returns 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L242", + "community": 55, + "norm_label": "a valid jwt whose member no longer exists in the db returns 401.", + "id": "tests_test_auth_rationale_242" + }, + { + "label": "No credentials at all \u2192 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L267", + "community": 84, + "norm_label": "no credentials at all \u2192 401.", + "id": "tests_test_auth_rationale_267" + }, + { + "label": "/api/health is accessible without any credentials.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L287", + "community": 78, + "norm_label": "/api/health is accessible without any credentials.", + "id": "tests_test_auth_rationale_287" + }, + { + "label": "/api/version is accessible without any credentials.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L306", + "community": 33, + "norm_label": "/api/version is accessible without any credentials.", + "id": "tests_test_auth_rationale_306" + }, + { + "label": "GET /api/auth/login returns a Discord authorization URL and sets a state cookie.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L324", + "community": 83, + "norm_label": "get /api/auth/login returns a discord authorization url and sets a state cookie.", + "id": "tests_test_auth_rationale_324" + }, + { + "label": "Mismatched OAuth state redirects to /login?error=invalid_state.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L344", + "community": 33, + "norm_label": "mismatched oauth state redirects to /login?error=invalid_state.", + "id": "tests_test_auth_rationale_344" + }, + { + "label": "Full valid callback flow issues a session cookie and redirects to /.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L362", + "community": 31, + "norm_label": "full valid callback flow issues a session cookie and redirects to /.", + "id": "tests_test_auth_rationale_362" + }, + { + "label": "User not in the guild redirects to /login?error=unauthorized.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L413", + "community": 79, + "norm_label": "user not in the guild redirects to /login?error=unauthorized.", + "id": "tests_test_auth_rationale_413" + }, + { + "label": "Guild member without required Discord role redirects to /login?error=insuffi", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L446", + "community": 77, + "norm_label": "guild member without required discord role redirects to /login?error=insuffi", + "id": "tests_test_auth_rationale_446" + }, + { + "label": "Guild member response without role_names key is treated as no roles (rejected).", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L482", + "community": 33, + "norm_label": "guild member response without role_names key is treated as no roles (rejected).", + "id": "tests_test_auth_rationale_482" + }, + { + "label": "Guild member WITH the required role passes the role check and proceeds normally.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L517", + "community": 31, + "norm_label": "guild member with the required role passes the role check and proceeds normally.", + "id": "tests_test_auth_rationale_517" + }, + { + "label": "Bot sidecar connection error redirects to /login?error=service_unavailable.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L568", + "community": 33, + "norm_label": "bot sidecar connection error redirects to /login?error=service_unavailable.", + "id": "tests_test_auth_rationale_568" + }, + { + "label": "Guild member whose discord_id isn't in the DB redirects to /login?error=unauthor", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L601", + "community": 33, + "norm_label": "guild member whose discord_id isn't in the db redirects to /login?error=unauthor", + "id": "tests_test_auth_rationale_601" + }, + { + "label": "POST /api/auth/logout clears the session cookie.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L648", + "community": 80, + "norm_label": "post /api/auth/logout clears the session cookie.", + "id": "tests_test_auth_rationale_648" + }, + { + "label": "GET /api/auth/me returns member info when authenticated via session cookie.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L661", + "community": 55, + "norm_label": "get /api/auth/me returns member info when authenticated via session cookie.", + "id": "tests_test_auth_rationale_661" + }, + { + "label": "GET /api/auth/me without credentials returns 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L693", + "community": 81, + "norm_label": "get /api/auth/me without credentials returns 401.", + "id": "tests_test_auth_rationale_693" + }, + { + "label": "Startup rejects empty SESSION_SECRET when auth is enabled.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L720", + "community": 101, + "norm_label": "startup rejects empty session_secret when auth is enabled.", + "id": "tests_test_auth_rationale_720" + }, + { + "label": "Startup rejects missing BOT_SERVICE_TOKEN in non-dev environments.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L731", + "community": 102, + "norm_label": "startup rejects missing bot_service_token in non-dev environments.", + "id": "tests_test_auth_rationale_731" + }, + { + "label": "Development environment allows empty BOT_SERVICE_TOKEN.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth.py", + "source_location": "L743", + "community": 103, + "norm_label": "development environment allows empty bot_service_token.", + "id": "tests_test_auth_rationale_743" + }, + { + "label": "test_auth_rate_limit.py", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L1", + "community": 19, + "norm_label": "test_auth_rate_limit.py", + "id": "backend_tests_test_auth_rate_limit_py" + }, + { + "label": "reset_rate_limit_state()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L49", + "community": 19, + "norm_label": "reset_rate_limit_state()", + "id": "tests_test_auth_rate_limit_reset_rate_limit_state" + }, + { + "label": "_get()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L89", + "community": 19, + "norm_label": "_get()", + "id": "tests_test_auth_rate_limit_get" + }, + { + "label": "test_login_rate_limit_triggers_429()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L100", + "community": 19, + "norm_label": "test_login_rate_limit_triggers_429()", + "id": "tests_test_auth_rate_limit_test_login_rate_limit_triggers_429" + }, + { + "label": "test_login_rate_limit_independent_per_ip()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L124", + "community": 19, + "norm_label": "test_login_rate_limit_independent_per_ip()", + "id": "tests_test_auth_rate_limit_test_login_rate_limit_independent_per_ip" + }, + { + "label": "test_callback_rate_limit_triggers_429()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L150", + "community": 19, + "norm_label": "test_callback_rate_limit_triggers_429()", + "id": "tests_test_auth_rate_limit_test_callback_rate_limit_triggers_429" + }, + { + "label": "test_login_no_429_when_auth_disabled()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L194", + "community": 19, + "norm_label": "test_login_no_429_when_auth_disabled()", + "id": "tests_test_auth_rate_limit_test_login_no_429_when_auth_disabled" + }, + { + "label": "test_callback_no_429_when_auth_disabled()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L209", + "community": 19, + "norm_label": "test_callback_no_429_when_auth_disabled()", + "id": "tests_test_auth_rate_limit_test_callback_no_429_when_auth_disabled" + }, + { + "label": "test_xff_pathological_header_parses_to_leftmost_ip()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L236", + "community": 19, + "norm_label": "test_xff_pathological_header_parses_to_leftmost_ip()", + "id": "tests_test_auth_rate_limit_test_xff_pathological_header_parses_to_leftmost_ip" + }, + { + "label": "test_garbage_xff_falls_back_to_remote_address_bucket()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L271", + "community": 19, + "norm_label": "test_garbage_xff_falls_back_to_remote_address_bucket()", + "id": "tests_test_auth_rate_limit_test_garbage_xff_falls_back_to_remote_address_bucket" + }, + { + "label": "test_different_garbage_xff_values_share_remote_address_bucket()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L301", + "community": 19, + "norm_label": "test_different_garbage_xff_values_share_remote_address_bucket()", + "id": "tests_test_auth_rate_limit_test_different_garbage_xff_values_share_remote_address_bucket" + }, + { + "label": "test_valid_xff_still_buckets_by_ip()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L331", + "community": 19, + "norm_label": "test_valid_xff_still_buckets_by_ip()", + "id": "tests_test_auth_rate_limit_test_valid_xff_still_buckets_by_ip" + }, + { + "label": "test_429_response_includes_retry_after_header()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L361", + "community": 19, + "norm_label": "test_429_response_includes_retry_after_header()", + "id": "tests_test_auth_rate_limit_test_429_response_includes_retry_after_header" + }, + { + "label": "test_missing_xff_in_production_logs_warning()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L405", + "community": 19, + "norm_label": "test_missing_xff_in_production_logs_warning()", + "id": "tests_test_auth_rate_limit_test_missing_xff_in_production_logs_warning" + }, + { + "label": "test_missing_xff_in_development_does_not_log_warning()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L434", + "community": 19, + "norm_label": "test_missing_xff_in_development_does_not_log_warning()", + "id": "tests_test_auth_rate_limit_test_missing_xff_in_development_does_not_log_warning" + }, + { + "label": "test_concurrent_absent_xff_in_production_warns_exactly_once()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L464", + "community": 19, + "norm_label": "test_concurrent_absent_xff_in_production_warns_exactly_once()", + "id": "tests_test_auth_rate_limit_test_concurrent_absent_xff_in_production_warns_exactly_once" + }, + { + "label": "test_invalid_xff_in_production_logs_warning()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L534", + "community": 19, + "norm_label": "test_invalid_xff_in_production_logs_warning()", + "id": "tests_test_auth_rate_limit_test_invalid_xff_in_production_logs_warning" + }, + { + "label": "test_invalid_xff_in_development_does_not_log_warning()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L566", + "community": 19, + "norm_label": "test_invalid_xff_in_development_does_not_log_warning()", + "id": "tests_test_auth_rate_limit_test_invalid_xff_in_development_does_not_log_warning" + }, + { + "label": "test_invalid_xff_warning_is_throttled_to_once_per_window()", + "file_type": "code", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L597", + "community": 19, + "norm_label": "test_invalid_xff_warning_is_throttled_to_once_per_window()", + "id": "tests_test_auth_rate_limit_test_invalid_xff_warning_is_throttled_to_once_per_window" + }, + { + "label": "Tests for rate limiting on the Discord OAuth2 auth endpoints. Covers: - /api/au", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L1", + "community": 19, + "norm_label": "tests for rate limiting on the discord oauth2 auth endpoints. covers: - /api/au", + "id": "tests_test_auth_rate_limit_rationale_1" + }, + { + "label": "Reset per-test rate-limit state before each test. Resets module-level state", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L50", + "community": 19, + "norm_label": "reset per-test rate-limit state before each test. resets module-level state", + "id": "tests_test_auth_rate_limit_rationale_50" + }, + { + "label": "Send a GET and return the status code.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L90", + "community": 19, + "norm_label": "send a get and return the status code.", + "id": "tests_test_auth_rate_limit_rationale_90" + }, + { + "label": "3rd rapid request to /api/auth/login returns 429 when limit is 2/minute. Th", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L101", + "community": 19, + "norm_label": "3rd rapid request to /api/auth/login returns 429 when limit is 2/minute. th", + "id": "tests_test_auth_rate_limit_rationale_101" + }, + { + "label": "Two different X-Forwarded-For IPs have independent rate-limit buckets.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L125", + "community": 19, + "norm_label": "two different x-forwarded-for ips have independent rate-limit buckets.", + "id": "tests_test_auth_rate_limit_rationale_125" + }, + { + "label": "3rd rapid request to /api/auth/callback returns 429 when limit is 2/minute.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L151", + "community": 19, + "norm_label": "3rd rapid request to /api/auth/callback returns 429 when limit is 2/minute.", + "id": "tests_test_auth_rate_limit_rationale_151" + }, + { + "label": "When AUTH_DISABLED=true, 50 rapid requests to /login never return 429.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L195", + "community": 19, + "norm_label": "when auth_disabled=true, 50 rapid requests to /login never return 429.", + "id": "tests_test_auth_rate_limit_rationale_195" + }, + { + "label": "Pathologically long X-Forwarded-For header is handled without error. Constr", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L237", + "community": 19, + "norm_label": "pathologically long x-forwarded-for header is handled without error. constr", + "id": "tests_test_auth_rate_limit_rationale_237" + }, + { + "label": "Garbage XFF value falls back to the ASGI remote-address bucket. Sending ``X", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L272", + "community": 19, + "norm_label": "garbage xff value falls back to the asgi remote-address bucket. sending ``x", + "id": "tests_test_auth_rate_limit_rationale_272" + }, + { + "label": "Different garbage XFF strings all resolve to the same remote-address bucket.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L302", + "community": 19, + "norm_label": "different garbage xff strings all resolve to the same remote-address bucket.", + "id": "tests_test_auth_rate_limit_rationale_302" + }, + { + "label": "Valid XFF IP values are still used as the bucket key (regression guard). En", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L332", + "community": 19, + "norm_label": "valid xff ip values are still used as the bucket key (regression guard). en", + "id": "tests_test_auth_rate_limit_rationale_332" + }, + { + "label": "A 429 response must include a Retry-After header with a positive integer. V", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L362", + "community": 19, + "norm_label": "a 429 response must include a retry-after header with a positive integer. v", + "id": "tests_test_auth_rate_limit_rationale_362" + }, + { + "label": "XFF absent in production causes the absent-XFF warning branch to execute. A", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L406", + "community": 19, + "norm_label": "xff absent in production causes the absent-xff warning branch to execute. a", + "id": "tests_test_auth_rate_limit_rationale_406" + }, + { + "label": "XFF absent in development must NOT emit the production trust-model warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L435", + "community": 19, + "norm_label": "xff absent in development must not emit the production trust-model warning.", + "id": "tests_test_auth_rate_limit_rationale_435" + }, + { + "label": "Concurrent no-XFF requests in production advance the absent-XFF timestamp once.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L465", + "community": 19, + "norm_label": "concurrent no-xff requests in production advance the absent-xff timestamp once.", + "id": "tests_test_auth_rate_limit_rationale_465" + }, + { + "label": "Invalid XFF in production causes the invalid-XFF warning branch to execute.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L535", + "community": 19, + "norm_label": "invalid xff in production causes the invalid-xff warning branch to execute.", + "id": "tests_test_auth_rate_limit_rationale_535" + }, + { + "label": "Invalid X-Forwarded-For in development must NOT emit a warning. Direct / to", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L567", + "community": 19, + "norm_label": "invalid x-forwarded-for in development must not emit a warning. direct / to", + "id": "tests_test_auth_rate_limit_rationale_567" + }, + { + "label": "Rapid invalid-XFF requests in production advance the timestamp exactly once.", + "file_type": "rationale", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L598", + "community": 19, + "norm_label": "rapid invalid-xff requests in production advance the timestamp exactly once.", + "id": "tests_test_auth_rate_limit_rationale_598" + }, + { + "label": "test_autofill.py", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L1", + "community": 11, + "norm_label": "test_autofill.py", + "id": "backend_tests_test_autofill_py" + }, + { + "label": "_make_group()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L63", + "community": 0, + "norm_label": "_make_group()", + "id": "tests_test_autofill_make_group" + }, + { + "label": "_make_sm()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L81", + "community": 11, + "norm_label": "_make_sm()", + "id": "tests_test_autofill_make_sm" + }, + { + "label": "test_preview_endpoint_returns_200()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L108", + "community": 11, + "norm_label": "test_preview_endpoint_returns_200()", + "id": "tests_test_autofill_test_preview_endpoint_returns_200" + }, + { + "label": "test_apply_endpoint_returns_200()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L127", + "community": 11, + "norm_label": "test_apply_endpoint_returns_200()", + "id": "tests_test_autofill_test_apply_endpoint_returns_200" + }, + { + "label": "test_preview_respects_scroll_count()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L148", + "community": 11, + "norm_label": "test_preview_respects_scroll_count()", + "id": "tests_test_autofill_test_preview_respects_scroll_count" + }, + { + "label": "test_preview_marks_leftover_as_reserve()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L182", + "community": 11, + "norm_label": "test_preview_marks_leftover_as_reserve()", + "id": "tests_test_autofill_test_preview_marks_leftover_as_reserve" + }, + { + "label": "test_apply_commits_preview()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L212", + "community": 11, + "norm_label": "test_apply_commits_preview()", + "id": "tests_test_autofill_test_apply_commits_preview" + }, + { + "label": "test_apply_returns_409_when_no_preview()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L251", + "community": 11, + "norm_label": "test_apply_returns_409_when_no_preview()", + "id": "tests_test_autofill_test_apply_returns_409_when_no_preview" + }, + { + "label": "test_apply_returns_409_when_preview_expired()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L273", + "community": 11, + "norm_label": "test_apply_returns_409_when_preview_expired()", + "id": "tests_test_autofill_test_apply_returns_409_when_preview_expired" + }, + { + "label": "test_preview_skips_broken_building_positions()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L299", + "community": 11, + "norm_label": "test_preview_skips_broken_building_positions()", + "id": "tests_test_autofill_test_preview_skips_broken_building_positions" + }, + { + "label": "_enable_sqlite_fk_autofill()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L349", + "community": 11, + "norm_label": "_enable_sqlite_fk_autofill()", + "id": "tests_test_autofill_enable_sqlite_fk_autofill" + }, + { + "label": "test_apply_autofill_skips_broken_building_positions()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L367", + "community": 76, + "norm_label": "test_apply_autofill_skips_broken_building_positions()", + "id": "tests_test_autofill_test_apply_autofill_skips_broken_building_positions" + }, + { + "label": "_make_session_for_preview()", + "file_type": "code", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L466", + "community": 11, + "norm_label": "_make_session_for_preview()", + "id": "tests_test_autofill_make_session_for_preview" + }, + { + "label": "Tests for auto-fill preview and apply.", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L1", + "community": 11, + "norm_label": "tests for auto-fill preview and apply.", + "id": "tests_test_autofill_rationale_1" + }, + { + "label": "With 3 members, 10 positions, and <90 total positions, limit=3. All 10 posi", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L149", + "community": 11, + "norm_label": "with 3 members, 10 positions, and <90 total positions, limit=3. all 10 posi", + "id": "tests_test_autofill_rationale_149" + }, + { + "label": "With 1 member, 5 positions, and position_count=5 (<90), limit=3. The member", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L183", + "community": 11, + "norm_label": "with 1 member, 5 positions, and position_count=5 (<90), limit=3. the member", + "id": "tests_test_autofill_rationale_183" + }, + { + "label": "Apply reads the stored preview and updates positions.", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L213", + "community": 11, + "norm_label": "apply reads the stored preview and updates positions.", + "id": "tests_test_autofill_rationale_213" + }, + { + "label": "Apply returns 409 when no preview exists.", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L252", + "community": 11, + "norm_label": "apply returns 409 when no preview exists.", + "id": "tests_test_autofill_rationale_252" + }, + { + "label": "Apply returns 409 when preview has expired.", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L274", + "community": 11, + "norm_label": "apply returns 409 when preview has expired.", + "id": "tests_test_autofill_rationale_274" + }, + { + "label": "Broken building positions are excluded from autofill (issue #94). Siege has", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L300", + "community": 11, + "norm_label": "broken building positions are excluded from autofill (issue #94). siege has", + "id": "tests_test_autofill_rationale_300" + }, + { + "label": "apply_autofill must not assign members to positions on broken buildings. Th", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L368", + "community": 76, + "norm_label": "apply_autofill must not assign members to positions on broken buildings. th", + "id": "tests_test_autofill_rationale_368" + }, + { + "label": "Return a mock AsyncSession that handles the two execute calls in preview_autofil", + "file_type": "rationale", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L467", + "community": 11, + "norm_label": "return a mock asyncsession that handles the two execute calls in preview_autofil", + "id": "tests_test_autofill_rationale_467" + }, + { + "label": "test_board.py", + "file_type": "code", + "source_file": "backend/tests/test_board.py", + "source_location": "L1", + "community": 62, + "norm_label": "test_board.py", + "id": "backend_tests_test_board_py" + }, + { + "label": "_make_position()", + "file_type": "code", + "source_file": "backend/tests/test_board.py", + "source_location": "L13", + "community": 20, + "norm_label": "_make_position()", + "id": "tests_test_board_make_position" + }, + { + "label": "client()", + "file_type": "code", + "source_file": "backend/tests/test_board.py", + "source_location": "L33", + "community": 11, + "norm_label": "client()", + "id": "tests_test_board_client" + }, + { + "label": "test_get_board_returns_nested_structure()", + "file_type": "code", + "source_file": "backend/tests/test_board.py", + "source_location": "L43", + "community": 62, + "norm_label": "test_get_board_returns_nested_structure()", + "id": "tests_test_board_test_get_board_returns_nested_structure" + }, + { + "label": "test_update_position_assign_member()", + "file_type": "code", + "source_file": "backend/tests/test_board.py", + "source_location": "L75", + "community": 62, + "norm_label": "test_update_position_assign_member()", + "id": "tests_test_board_test_update_position_assign_member" + }, + { + "label": "test_update_position_invalid_state_reserve_with_member()", + "file_type": "code", + "source_file": "backend/tests/test_board.py", + "source_location": "L97", + "community": 62, + "norm_label": "test_update_position_invalid_state_reserve_with_member()", + "id": "tests_test_board_test_update_position_invalid_state_reserve_with_member" + }, + { + "label": "test_update_position_not_found()", + "file_type": "code", + "source_file": "backend/tests/test_board.py", + "source_location": "L119", + "community": 62, + "norm_label": "test_update_position_not_found()", + "id": "tests_test_board_test_update_position_not_found" + }, + { + "label": "Endpoint tests for board, position update, and bulk assignment routes.", + "file_type": "rationale", + "source_file": "backend/tests/test_board.py", + "source_location": "L1", + "community": 62, + "norm_label": "endpoint tests for board, position update, and bulk assignment routes.", + "id": "tests_test_board_rationale_1" + }, + { + "label": "test_bot_client.py", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L1", + "community": 27, + "norm_label": "test_bot_client.py", + "id": "backend_tests_test_bot_client_py" + }, + { + "label": "_make_ok_response()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L15", + "community": 27, + "norm_label": "_make_ok_response()", + "id": "tests_test_bot_client_make_ok_response" + }, + { + "label": "_async_client_that_raises()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L24", + "community": 27, + "norm_label": "_async_client_that_raises()", + "id": "tests_test_bot_client_async_client_that_raises" + }, + { + "label": "_async_client_that_returns()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L34", + "community": 27, + "norm_label": "_async_client_that_returns()", + "id": "tests_test_bot_client_async_client_that_returns" + }, + { + "label": "test_notify_returns_false_on_http_error()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L50", + "community": 27, + "norm_label": "test_notify_returns_false_on_http_error()", + "id": "tests_test_bot_client_test_notify_returns_false_on_http_error" + }, + { + "label": "test_post_message_returns_false_on_http_error()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L59", + "community": 27, + "norm_label": "test_post_message_returns_false_on_http_error()", + "id": "tests_test_bot_client_test_post_message_returns_false_on_http_error" + }, + { + "label": "test_post_image_returns_none_on_http_error()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L68", + "community": 27, + "norm_label": "test_post_image_returns_none_on_http_error()", + "id": "tests_test_bot_client_test_post_image_returns_none_on_http_error" + }, + { + "label": "test_get_members_returns_empty_on_http_error()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L77", + "community": 27, + "norm_label": "test_get_members_returns_empty_on_http_error()", + "id": "tests_test_bot_client_test_get_members_returns_empty_on_http_error" + }, + { + "label": "test_notify_returns_true_on_success()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L86", + "community": 27, + "norm_label": "test_notify_returns_true_on_success()", + "id": "tests_test_bot_client_test_notify_returns_true_on_success" + }, + { + "label": "test_get_member_returns_not_member()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L112", + "community": 27, + "norm_label": "test_get_member_returns_not_member()", + "id": "tests_test_bot_client_test_get_member_returns_not_member" + }, + { + "label": "test_get_member_raises_on_connection_error()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L123", + "community": 27, + "norm_label": "test_get_member_raises_on_connection_error()", + "id": "tests_test_bot_client_test_get_member_raises_on_connection_error" + }, + { + "label": "test_get_member_raises_on_503()", + "file_type": "code", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L132", + "community": 27, + "norm_label": "test_get_member_raises_on_503()", + "id": "tests_test_bot_client_test_get_member_raises_on_503" + }, + { + "label": "Tests for bot HTTP client graceful degradation.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L1", + "community": 27, + "norm_label": "tests for bot http client graceful degradation.", + "id": "tests_test_bot_client_rationale_1" + }, + { + "label": "Return a context-manager-compatible mock AsyncClient that raises on any request.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L25", + "community": 27, + "norm_label": "return a context-manager-compatible mock asyncclient that raises on any request.", + "id": "tests_test_bot_client_rationale_25" + }, + { + "label": "notify() returns False when the bot HTTP call raises an HTTPError.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L51", + "community": 27, + "norm_label": "notify() returns false when the bot http call raises an httperror.", + "id": "tests_test_bot_client_rationale_51" + }, + { + "label": "post_message() returns False when the bot HTTP call raises an HTTPError.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L60", + "community": 27, + "norm_label": "post_message() returns false when the bot http call raises an httperror.", + "id": "tests_test_bot_client_rationale_60" + }, + { + "label": "post_image() returns None when the bot HTTP call raises an HTTPError.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L69", + "community": 27, + "norm_label": "post_image() returns none when the bot http call raises an httperror.", + "id": "tests_test_bot_client_rationale_69" + }, + { + "label": "get_members() returns [] when the bot HTTP call raises an HTTPError.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L78", + "community": 27, + "norm_label": "get_members() returns [] when the bot http call raises an httperror.", + "id": "tests_test_bot_client_rationale_78" + }, + { + "label": "notify() returns True when the bot returns a 200 response.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L87", + "community": 27, + "norm_label": "notify() returns true when the bot returns a 200 response.", + "id": "tests_test_bot_client_rationale_87" + }, + { + "label": "get_member() returns the member dict when sidecar responds 200.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L102", + "community": 27, + "norm_label": "get_member() returns the member dict when sidecar responds 200.", + "id": "tests_test_bot_client_rationale_102" + }, + { + "label": "get_member() returns the dict as-is when sidecar responds with is_member=False.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L113", + "community": 27, + "norm_label": "get_member() returns the dict as-is when sidecar responds with is_member=false.", + "id": "tests_test_bot_client_rationale_113" + }, + { + "label": "get_member() raises httpx.HTTPError when the sidecar is unreachable.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L124", + "community": 27, + "norm_label": "get_member() raises httpx.httperror when the sidecar is unreachable.", + "id": "tests_test_bot_client_rationale_124" + }, + { + "label": "get_member() raises httpx.HTTPStatusError when sidecar returns 503.", + "file_type": "rationale", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L133", + "community": 27, + "norm_label": "get_member() raises httpx.httpstatuserror when sidecar returns 503.", + "id": "tests_test_bot_client_rationale_133" + }, + { + "label": "test_buildings.py", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L1", + "community": 0, + "norm_label": "test_buildings.py", + "id": "backend_tests_test_buildings_py" + }, + { + "label": "_make_config()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L46", + "community": 0, + "norm_label": "_make_config()", + "id": "tests_test_buildings_make_config" + }, + { + "label": "_make_post_priority_config()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L55", + "community": 46, + "norm_label": "_make_post_priority_config()", + "id": "tests_test_buildings_make_post_priority_config" + }, + { + "label": "_scalars_all()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L63", + "community": 0, + "norm_label": "_scalars_all()", + "id": "tests_test_buildings_scalars_all" + }, + { + "label": "_scalars_first()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L70", + "community": 0, + "norm_label": "_scalars_first()", + "id": "tests_test_buildings_scalars_first" + }, + { + "label": "_scalar_one_or_none()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L77", + "community": 0, + "norm_label": "_scalar_one_or_none()", + "id": "tests_test_buildings_scalar_one_or_none" + }, + { + "label": "test_update_building_unbreak_restores_groups()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L94", + "community": 0, + "norm_label": "test_update_building_unbreak_restores_groups()", + "id": "tests_test_buildings_test_update_building_unbreak_restores_groups" + }, + { + "label": "test_update_building_unbreak_restores_last_slot_count()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L172", + "community": 0, + "norm_label": "test_update_building_unbreak_restores_last_slot_count()", + "id": "tests_test_buildings_test_update_building_unbreak_restores_last_slot_count" + }, + { + "label": "test_update_building_break_then_unbreak_roundtrip()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L247", + "community": 0, + "norm_label": "test_update_building_break_then_unbreak_roundtrip()", + "id": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip" + }, + { + "label": "test_add_building_post_uses_priority_config()", + "file_type": "code", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L392", + "community": 0, + "norm_label": "test_add_building_post_uses_priority_config()", + "id": "tests_test_buildings_test_add_building_post_uses_priority_config" + }, + { + "label": "Service-layer tests for update_building \u2014 focus on unbreak restoration.", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L1", + "community": 0, + "norm_label": "service-layer tests for update_building \u2014 focus on unbreak restoration.", + "id": "tests_test_buildings_rationale_1" + }, + { + "label": "Return a MagicMock shaped like scalars().all() \u2192 items.", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L64", + "community": 0, + "norm_label": "return a magicmock shaped like scalars().all() \u2192 items.", + "id": "tests_test_buildings_rationale_64" + }, + { + "label": "Return a MagicMock shaped like scalars().first() \u2192 item.", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L71", + "community": 0, + "norm_label": "return a magicmock shaped like scalars().first() \u2192 item.", + "id": "tests_test_buildings_rationale_71" + }, + { + "label": "Return a MagicMock shaped like scalar_one_or_none() \u2192 item.", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L78", + "community": 0, + "norm_label": "return a magicmock shaped like scalar_one_or_none() \u2192 item.", + "id": "tests_test_buildings_rationale_78" + }, + { + "label": "A Stronghold at level 6 (10 groups \u00d7 3 slots) was broken down to the base co", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L95", + "community": 0, + "norm_label": "a stronghold at level 6 (10 groups \u00d7 3 slots) was broken down to the base co", + "id": "tests_test_buildings_rationale_95" + }, + { + "label": "A Mana Shrine at level 5 has 13 teams = 4 full groups + 1 slot last group (4", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L173", + "community": 0, + "norm_label": "a mana shrine at level 5 has 13 teams = 4 full groups + 1 slot last group (4", + "id": "tests_test_buildings_rationale_173" + }, + { + "label": "Stronghold level 6: 10 groups \u00d7 3 slots. Break \u2192 reduces to base config (4 g", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L248", + "community": 0, + "norm_label": "stronghold level 6: 10 groups \u00d7 3 slots. break \u2192 reduces to base config (4 g", + "id": "tests_test_buildings_rationale_248" + }, + { + "label": "Adding a post-type building must use PostPriorityConfig to set the Post prio", + "file_type": "rationale", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L393", + "community": 0, + "norm_label": "adding a post-type building must use postpriorityconfig to set the post prio", + "id": "tests_test_buildings_rationale_393" + }, + { + "label": "test_changelog.py", + "file_type": "code", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L1", + "community": 31, + "norm_label": "test_changelog.py", + "id": "backend_tests_test_changelog_py" + }, + { + "label": "test_get_status_fresh_user_returns_null()", + "file_type": "code", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L81", + "community": 31, + "norm_label": "test_get_status_fresh_user_returns_null()", + "id": "tests_test_changelog_test_get_status_fresh_user_returns_null" + }, + { + "label": "test_mark_seen_then_get_status_returns_timestamp()", + "file_type": "code", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L113", + "community": 31, + "norm_label": "test_mark_seen_then_get_status_returns_timestamp()", + "id": "tests_test_changelog_test_mark_seen_then_get_status_returns_timestamp" + }, + { + "label": "test_mark_seen_twice_is_idempotent()", + "file_type": "code", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L154", + "community": 31, + "norm_label": "test_mark_seen_twice_is_idempotent()", + "id": "tests_test_changelog_test_mark_seen_twice_is_idempotent" + }, + { + "label": "test_get_status_no_auth_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L193", + "community": 31, + "norm_label": "test_get_status_no_auth_returns_401()", + "id": "tests_test_changelog_test_get_status_no_auth_returns_401" + }, + { + "label": "test_post_mark_seen_no_auth_returns_401()", + "file_type": "code", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L218", + "community": 31, + "norm_label": "test_post_mark_seen_no_auth_returns_401()", + "id": "tests_test_changelog_test_post_mark_seen_no_auth_returns_401" + }, + { + "label": "test_get_status_service_token_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L243", + "community": 31, + "norm_label": "test_get_status_service_token_returns_400()", + "id": "tests_test_changelog_test_get_status_service_token_returns_400" + }, + { + "label": "Endpoint tests for /api/changelog \u2014 status and mark-seen endpoints. Covers AC #", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L1", + "community": 31, + "norm_label": "endpoint tests for /api/changelog \u2014 status and mark-seen endpoints. covers ac #", + "id": "tests_test_changelog_rationale_1" + }, + { + "label": "Return a signed JWT for the given member ID.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L30", + "community": 55, + "norm_label": "return a signed jwt for the given member id.", + "id": "tests_test_changelog_rationale_30" + }, + { + "label": "Return a minimal Member-like namespace.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L54", + "community": 6, + "norm_label": "return a minimal member-like namespace.", + "id": "tests_test_changelog_rationale_54" + }, + { + "label": "A user who has never viewed the changelog gets last_seen_changelog_at: null.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L82", + "community": 31, + "norm_label": "a user who has never viewed the changelog gets last_seen_changelog_at: null.", + "id": "tests_test_changelog_rationale_82" + }, + { + "label": "After marking changelog as seen the GET endpoint returns a non-null timestamp.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L114", + "community": 31, + "norm_label": "after marking changelog as seen the get endpoint returns a non-null timestamp.", + "id": "tests_test_changelog_rationale_114" + }, + { + "label": "Calling mark-seen twice both succeed; second timestamp >= first.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L155", + "community": 31, + "norm_label": "calling mark-seen twice both succeed; second timestamp >= first.", + "id": "tests_test_changelog_rationale_155" + }, + { + "label": "GET /api/changelog/status without credentials returns 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L194", + "community": 31, + "norm_label": "get /api/changelog/status without credentials returns 401.", + "id": "tests_test_changelog_rationale_194" + }, + { + "label": "POST /api/changelog/mark-seen without credentials returns 401.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L219", + "community": 31, + "norm_label": "post /api/changelog/mark-seen without credentials returns 401.", + "id": "tests_test_changelog_rationale_219" + }, + { + "label": "Service principals (Bearer token) cannot use the changelog endpoint.", + "file_type": "rationale", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L244", + "community": 31, + "norm_label": "service principals (bearer token) cannot use the changelog endpoint.", + "id": "tests_test_changelog_rationale_244" + }, + { + "label": "test_comparison.py", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L1", + "community": 25, + "norm_label": "test_comparison.py", + "id": "backend_tests_test_comparison_py" + }, + { + "label": "test_compare_returns_404_when_no_completed_siege()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L47", + "community": 25, + "norm_label": "test_compare_returns_404_when_no_completed_siege()", + "id": "tests_test_comparison_test_compare_returns_404_when_no_completed_siege" + }, + { + "label": "test_compare_with_specific_endpoint_200()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L75", + "community": 25, + "norm_label": "test_compare_with_specific_endpoint_200()", + "id": "tests_test_comparison_test_compare_with_specific_endpoint_200" + }, + { + "label": "_build_siege_assignments()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L124", + "community": 25, + "norm_label": "_build_siege_assignments()", + "id": "tests_test_comparison_build_siege_assignments" + }, + { + "label": "test_compare_added_positions()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L142", + "community": 25, + "norm_label": "test_compare_added_positions()", + "id": "tests_test_comparison_test_compare_added_positions" + }, + { + "label": "test_compare_removed_positions()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L185", + "community": 25, + "norm_label": "test_compare_removed_positions()", + "id": "tests_test_comparison_test_compare_removed_positions" + }, + { + "label": "test_compare_unchanged_positions()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L221", + "community": 25, + "norm_label": "test_compare_unchanged_positions()", + "id": "tests_test_comparison_test_compare_unchanged_positions" + }, + { + "label": "test_compare_reserve_positions_excluded()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L251", + "community": 25, + "norm_label": "test_compare_reserve_positions_excluded()", + "id": "tests_test_comparison_test_compare_reserve_positions_excluded" + }, + { + "label": "test_inactive_member_excluded_from_comparison()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L276", + "community": 25, + "norm_label": "test_inactive_member_excluded_from_comparison()", + "id": "tests_test_comparison_test_inactive_member_excluded_from_comparison" + }, + { + "label": "test_inactive_member_rows_absent_from_comparison_result()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L307", + "community": 25, + "norm_label": "test_inactive_member_rows_absent_from_comparison_result()", + "id": "tests_test_comparison_test_inactive_member_rows_absent_from_comparison_result" + }, + { + "label": "test_get_most_recent_completed_returns_none()", + "file_type": "code", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L348", + "community": 25, + "norm_label": "test_get_most_recent_completed_returns_none()", + "id": "tests_test_comparison_test_get_most_recent_completed_returns_none" + }, + { + "label": "Tests for siege comparison service and endpoints.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L1", + "community": 25, + "norm_label": "tests for siege comparison service and endpoints.", + "id": "tests_test_comparison_rationale_1" + }, + { + "label": "Build (Position, BuildingGroup, Building) rows for mock execute results.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L125", + "community": 25, + "norm_label": "build (position, buildinggroup, building) rows for mock execute results.", + "id": "tests_test_comparison_rationale_125" + }, + { + "label": "Position in B but not A \u2192 appears in added.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L143", + "community": 25, + "norm_label": "position in b but not a \u2192 appears in added.", + "id": "tests_test_comparison_rationale_143" + }, + { + "label": "Position in A but not B \u2192 appears in removed.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L186", + "community": 25, + "norm_label": "position in a but not b \u2192 appears in removed.", + "id": "tests_test_comparison_rationale_186" + }, + { + "label": "Position in both A and B \u2192 appears in unchanged.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L222", + "community": 25, + "norm_label": "position in both a and b \u2192 appears in unchanged.", + "id": "tests_test_comparison_rationale_222" + }, + { + "label": "Reserve positions must not appear in any diff.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L252", + "community": 25, + "norm_label": "reserve positions must not appear in any diff.", + "id": "tests_test_comparison_rationale_252" + }, + { + "label": "Inactive members with assignments (e.g. from a cloned siege) must not appear in", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L277", + "community": 25, + "norm_label": "inactive members with assignments (e.g. from a cloned siege) must not appear in", + "id": "tests_test_comparison_rationale_277" + }, + { + "label": "Integration-style: inactive member rows filtered by query do not appear in resul", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L308", + "community": 25, + "norm_label": "integration-style: inactive member rows filtered by query do not appear in resul", + "id": "tests_test_comparison_rationale_308" + }, + { + "label": "Returns None when no completed siege exists.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L349", + "community": 25, + "norm_label": "returns none when no completed siege exists.", + "id": "tests_test_comparison_rationale_349" + }, + { + "label": "Returns the siege when one exists.", + "file_type": "rationale", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L365", + "community": 25, + "norm_label": "returns the siege when one exists.", + "id": "tests_test_comparison_rationale_365" + }, + { + "label": "test_config.py", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L1", + "community": 10, + "norm_label": "test_config.py", + "id": "backend_tests_test_config_py" + }, + { + "label": "TestSettingsDefaults", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L23", + "community": 10, + "norm_label": "testsettingsdefaults", + "id": "tests_test_config_testsettingsdefaults" + }, + { + "label": "._make_settings()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L26", + "community": 10, + "norm_label": "._make_settings()", + "id": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "label": ".test_discord_client_id_defaults_to_empty()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L38", + "community": 10, + "norm_label": ".test_discord_client_id_defaults_to_empty()", + "id": "tests_test_config_testsettingsdefaults_test_discord_client_id_defaults_to_empty" + }, + { + "label": ".test_discord_client_secret_defaults_to_empty()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L42", + "community": 10, + "norm_label": ".test_discord_client_secret_defaults_to_empty()", + "id": "tests_test_config_testsettingsdefaults_test_discord_client_secret_defaults_to_empty" + }, + { + "label": ".test_discord_redirect_uri_defaults_to_empty()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L46", + "community": 10, + "norm_label": ".test_discord_redirect_uri_defaults_to_empty()", + "id": "tests_test_config_testsettingsdefaults_test_discord_redirect_uri_defaults_to_empty" + }, + { + "label": ".test_session_secret_defaults_to_empty()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L50", + "community": 10, + "norm_label": ".test_session_secret_defaults_to_empty()", + "id": "tests_test_config_testsettingsdefaults_test_session_secret_defaults_to_empty" + }, + { + "label": ".test_bot_service_token_defaults_to_empty()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L54", + "community": 10, + "norm_label": ".test_bot_service_token_defaults_to_empty()", + "id": "tests_test_config_testsettingsdefaults_test_bot_service_token_defaults_to_empty" + }, + { + "label": ".test_auth_disabled_defaults_to_false()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L58", + "community": 10, + "norm_label": ".test_auth_disabled_defaults_to_false()", + "id": "tests_test_config_testsettingsdefaults_test_auth_disabled_defaults_to_false" + }, + { + "label": ".test_discord_required_role_defaults_to_clan_deputies()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L62", + "community": 10, + "norm_label": ".test_discord_required_role_defaults_to_clan_deputies()", + "id": "tests_test_config_testsettingsdefaults_test_discord_required_role_defaults_to_clan_deputies" + }, + { + "label": ".test_discord_required_role_accepts_override()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L66", + "community": 10, + "norm_label": ".test_discord_required_role_accepts_override()", + "id": "tests_test_config_testsettingsdefaults_test_discord_required_role_accepts_override" + }, + { + "label": ".test_allowed_origins_defaults_to_localhost()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L70", + "community": 10, + "norm_label": ".test_allowed_origins_defaults_to_localhost()", + "id": "tests_test_config_testsettingsdefaults_test_allowed_origins_defaults_to_localhost" + }, + { + "label": ".test_allowed_origins_accepts_override()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L74", + "community": 10, + "norm_label": ".test_allowed_origins_accepts_override()", + "id": "tests_test_config_testsettingsdefaults_test_allowed_origins_accepts_override" + }, + { + "label": ".test_allowed_origins_accepts_comma_separated_values()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L78", + "community": 10, + "norm_label": ".test_allowed_origins_accepts_comma_separated_values()", + "id": "tests_test_config_testsettingsdefaults_test_allowed_origins_accepts_comma_separated_values" + }, + { + "label": ".test_new_fields_accept_provided_values()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L82", + "community": 10, + "norm_label": ".test_new_fields_accept_provided_values()", + "id": "tests_test_config_testsettingsdefaults_test_new_fields_accept_provided_values" + }, + { + "label": "TestEnvironmentRequired", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L99", + "community": 10, + "norm_label": "testenvironmentrequired", + "id": "tests_test_config_testenvironmentrequired" + }, + { + "label": ".test_missing_environment_raises_validation_error()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L102", + "community": 10, + "norm_label": ".test_missing_environment_raises_validation_error()", + "id": "tests_test_config_testenvironmentrequired_test_missing_environment_raises_validation_error" + }, + { + "label": "TestLifespanAuthGuard", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L126", + "community": 10, + "norm_label": "testlifespanauthguard", + "id": "tests_test_config_testlifespanauthguard" + }, + { + "label": "test_auth_disabled_allowed_in_development()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L130", + "community": 10, + "norm_label": "test_auth_disabled_allowed_in_development()", + "id": "tests_test_config_test_auth_disabled_allowed_in_development" + }, + { + "label": "test_auth_disabled_rejected_in_production()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L162", + "community": 10, + "norm_label": "test_auth_disabled_rejected_in_production()", + "id": "tests_test_config_test_auth_disabled_rejected_in_production" + }, + { + "label": "test_auth_disabled_rejected_in_test_environment()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L186", + "community": 10, + "norm_label": "test_auth_disabled_rejected_in_test_environment()", + "id": "tests_test_config_test_auth_disabled_rejected_in_test_environment" + }, + { + "label": "test_auth_not_disabled_allowed_in_any_environment()", + "file_type": "code", + "source_file": "backend/tests/test_config.py", + "source_location": "L208", + "community": 10, + "norm_label": "test_auth_not_disabled_allowed_in_any_environment()", + "id": "tests_test_config_test_auth_not_disabled_allowed_in_any_environment" + }, + { + "label": "Tests for backend/app/config.py and the lifespan startup guard in main.py. Cove", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L1", + "community": 10, + "norm_label": "tests for backend/app/config.py and the lifespan startup guard in main.py. cove", + "id": "tests_test_config_rationale_1" + }, + { + "label": "New auth fields should be present and have correct empty-string defaults.", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L24", + "community": 10, + "norm_label": "new auth fields should be present and have correct empty-string defaults.", + "id": "tests_test_config_rationale_24" + }, + { + "label": "Construct a Settings instance with all required fields plus optional overrides.", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L27", + "community": 10, + "norm_label": "construct a settings instance with all required fields plus optional overrides.", + "id": "tests_test_config_rationale_27" + }, + { + "label": "ENVIRONMENT must be explicitly provided \u2014 no default allows silent misconfigurat", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L100", + "community": 10, + "norm_label": "environment must be explicitly provided \u2014 no default allows silent misconfigurat", + "id": "tests_test_config_rationale_100" + }, + { + "label": "auth_disabled=True must raise at startup when environment != 'development'.", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L127", + "community": 10, + "norm_label": "auth_disabled=true must raise at startup when environment != 'development'.", + "id": "tests_test_config_rationale_127" + }, + { + "label": "No RuntimeError when AUTH_DISABLED=true and ENVIRONMENT=development.", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L131", + "community": 104, + "norm_label": "no runtimeerror when auth_disabled=true and environment=development.", + "id": "tests_test_config_rationale_131" + }, + { + "label": "RuntimeError raised at startup when AUTH_DISABLED=true outside development.", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L163", + "community": 105, + "norm_label": "runtimeerror raised at startup when auth_disabled=true outside development.", + "id": "tests_test_config_rationale_163" + }, + { + "label": "RuntimeError raised when AUTH_DISABLED=true and environment is 'test'.", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L187", + "community": 106, + "norm_label": "runtimeerror raised when auth_disabled=true and environment is 'test'.", + "id": "tests_test_config_rationale_187" + }, + { + "label": "No RuntimeError when auth_disabled=False regardless of environment.", + "file_type": "rationale", + "source_file": "backend/tests/test_config.py", + "source_location": "L209", + "community": 107, + "norm_label": "no runtimeerror when auth_disabled=false regardless of environment.", + "id": "tests_test_config_rationale_209" + }, + { + "label": "test_config_endpoint.py", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L1", + "community": 10, + "norm_label": "test_config_endpoint.py", + "id": "backend_tests_test_config_endpoint_py" + }, + { + "label": "override_db()", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L27", + "community": 10, + "norm_label": "override_db()", + "id": "tests_test_config_endpoint_override_db" + }, + { + "label": "test_config_returns_auth_disabled_true()", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L40", + "community": 10, + "norm_label": "test_config_returns_auth_disabled_true()", + "id": "tests_test_config_endpoint_test_config_returns_auth_disabled_true" + }, + { + "label": "test_config_endpoint_is_public()", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L94", + "community": 10, + "norm_label": "test_config_endpoint_is_public()", + "id": "tests_test_config_endpoint_test_config_endpoint_is_public" + }, + { + "label": "TestStartupSessionSecretGuard", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L123", + "community": 10, + "norm_label": "teststartupsessionsecretguard", + "id": "tests_test_config_endpoint_teststartupsessionsecretguard" + }, + { + "label": "test_missing_session_secret_raises_at_startup()", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L127", + "community": 10, + "norm_label": "test_missing_session_secret_raises_at_startup()", + "id": "tests_test_config_endpoint_test_missing_session_secret_raises_at_startup" + }, + { + "label": "test_changeme_placeholder_raises_at_startup()", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L149", + "community": 10, + "norm_label": "test_changeme_placeholder_raises_at_startup()", + "id": "tests_test_config_endpoint_test_changeme_placeholder_raises_at_startup" + }, + { + "label": "test_changeme_uppercase_raises_at_startup()", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L173", + "community": 10, + "norm_label": "test_changeme_uppercase_raises_at_startup()", + "id": "tests_test_config_endpoint_test_changeme_uppercase_raises_at_startup" + }, + { + "label": "test_present_session_secret_does_not_raise()", + "file_type": "code", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L197", + "community": 10, + "norm_label": "test_present_session_secret_does_not_raise()", + "id": "tests_test_config_endpoint_test_present_session_secret_does_not_raise" + }, + { + "label": "Tests for the /api/config public endpoint and startup guards. Covers: - /api/", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L1", + "community": 10, + "norm_label": "tests for the /api/config public endpoint and startup guards. covers: - /api/", + "id": "tests_test_config_endpoint_rationale_1" + }, + { + "label": "GET /api/config returns the current auth_disabled flag.", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L37", + "community": 10, + "norm_label": "get /api/config returns the current auth_disabled flag.", + "id": "tests_test_config_endpoint_rationale_37" + }, + { + "label": "Config endpoint must be reachable without an Authorization header.", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L95", + "community": 108, + "norm_label": "config endpoint must be reachable without an authorization header.", + "id": "tests_test_config_endpoint_rationale_95" + }, + { + "label": "Backend must refuse to start when SESSION_SECRET is missing and auth is enabled.", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L124", + "community": 10, + "norm_label": "backend must refuse to start when session_secret is missing and auth is enabled.", + "id": "tests_test_config_endpoint_rationale_124" + }, + { + "label": "RuntimeError raised when auth_disabled=False and session_secret is empty.", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L128", + "community": 109, + "norm_label": "runtimeerror raised when auth_disabled=false and session_secret is empty.", + "id": "tests_test_config_endpoint_rationale_128" + }, + { + "label": "RuntimeError raised when SESSION_SECRET contains the default placeholder.", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L150", + "community": 110, + "norm_label": "runtimeerror raised when session_secret contains the default placeholder.", + "id": "tests_test_config_endpoint_rationale_150" + }, + { + "label": "RuntimeError raised for uppercase variant of the placeholder.", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L174", + "community": 111, + "norm_label": "runtimeerror raised for uppercase variant of the placeholder.", + "id": "tests_test_config_endpoint_rationale_174" + }, + { + "label": "No RuntimeError when auth_disabled=False and session_secret is provided.", + "file_type": "rationale", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L198", + "community": 112, + "norm_label": "no runtimeerror when auth_disabled=false and session_secret is provided.", + "id": "tests_test_config_endpoint_rationale_198" + }, + { + "label": "test_cors.py", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L1", + "community": 17, + "norm_label": "test_cors.py", + "id": "backend_tests_test_cors_py" + }, + { + "label": "_make_app()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L26", + "community": 17, + "norm_label": "_make_app()", + "id": "tests_test_cors_make_app" + }, + { + "label": "_cors_headers()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L52", + "community": 17, + "norm_label": "_cors_headers()", + "id": "tests_test_cors_cors_headers" + }, + { + "label": "TestAllowedOriginsParsingIntegration", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L64", + "community": 17, + "norm_label": "testallowedoriginsparsingintegration", + "id": "tests_test_cors_testallowedoriginsparsingintegration" + }, + { + "label": ".test_single_origin_is_allowed()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L67", + "community": 17, + "norm_label": ".test_single_origin_is_allowed()", + "id": "tests_test_cors_testallowedoriginsparsingintegration_test_single_origin_is_allowed" + }, + { + "label": ".test_first_of_two_origins_is_allowed()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L72", + "community": 17, + "norm_label": ".test_first_of_two_origins_is_allowed()", + "id": "tests_test_cors_testallowedoriginsparsingintegration_test_first_of_two_origins_is_allowed" + }, + { + "label": ".test_second_of_two_origins_is_allowed()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L77", + "community": 17, + "norm_label": ".test_second_of_two_origins_is_allowed()", + "id": "tests_test_cors_testallowedoriginsparsingintegration_test_second_of_two_origins_is_allowed" + }, + { + "label": ".test_whitespace_around_origins_is_stripped()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L82", + "community": 17, + "norm_label": ".test_whitespace_around_origins_is_stripped()", + "id": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_around_origins_is_stripped" + }, + { + "label": ".test_trailing_comma_is_ignored()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L88", + "community": 17, + "norm_label": ".test_trailing_comma_is_ignored()", + "id": "tests_test_cors_testallowedoriginsparsingintegration_test_trailing_comma_is_ignored" + }, + { + "label": ".test_leading_comma_is_ignored()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L94", + "community": 17, + "norm_label": ".test_leading_comma_is_ignored()", + "id": "tests_test_cors_testallowedoriginsparsingintegration_test_leading_comma_is_ignored" + }, + { + "label": ".test_whitespace_only_entries_are_excluded()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L100", + "community": 17, + "norm_label": ".test_whitespace_only_entries_are_excluded()", + "id": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_only_entries_are_excluded" + }, + { + "label": "TestAllowedOriginReceivesCorsHeaders", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L112", + "community": 17, + "norm_label": "testallowedoriginreceivescorsheaders", + "id": "tests_test_cors_testallowedoriginreceivescorsheaders" + }, + { + "label": ".test_allowed_origin_acao_matches_request_origin()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L120", + "community": 17, + "norm_label": ".test_allowed_origin_acao_matches_request_origin()", + "id": "tests_test_cors_testallowedoriginreceivescorsheaders_test_allowed_origin_acao_matches_request_origin" + }, + { + "label": ".test_localhost_dev_origin_allowed_by_default_config()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L132", + "community": 17, + "norm_label": ".test_localhost_dev_origin_allowed_by_default_config()", + "id": "tests_test_cors_testallowedoriginreceivescorsheaders_test_localhost_dev_origin_allowed_by_default_config" + }, + { + "label": "TestDisallowedOriginReceivesNoCorsHeaders", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L144", + "community": 17, + "norm_label": "testdisallowedoriginreceivesnocorsheaders", + "id": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders" + }, + { + "label": ".test_disallowed_origin_has_no_acao_header()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L147", + "community": 17, + "norm_label": ".test_disallowed_origin_has_no_acao_header()", + "id": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_disallowed_origin_has_no_acao_header" + }, + { + "label": ".test_subdomain_not_allowed_when_only_apex_configured()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L152", + "community": 17, + "norm_label": ".test_subdomain_not_allowed_when_only_apex_configured()", + "id": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_subdomain_not_allowed_when_only_apex_configured" + }, + { + "label": ".test_http_disallowed_when_only_https_configured()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L158", + "community": 17, + "norm_label": ".test_http_disallowed_when_only_https_configured()", + "id": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_http_disallowed_when_only_https_configured" + }, + { + "label": ".test_wrong_port_disallowed()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L164", + "community": 17, + "norm_label": ".test_wrong_port_disallowed()", + "id": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_wrong_port_disallowed" + }, + { + "label": "TestPreflightRequest", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L176", + "community": 17, + "norm_label": "testpreflightrequest", + "id": "tests_test_cors_testpreflightrequest" + }, + { + "label": ".test_preflight_allowed_origin_returns_200()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L179", + "community": 17, + "norm_label": ".test_preflight_allowed_origin_returns_200()", + "id": "tests_test_cors_testpreflightrequest_test_preflight_allowed_origin_returns_200" + }, + { + "label": ".test_preflight_disallowed_origin_has_no_acao()", + "file_type": "code", + "source_file": "backend/tests/test_cors.py", + "source_location": "L191", + "community": 17, + "norm_label": ".test_preflight_disallowed_origin_has_no_acao()", + "id": "tests_test_cors_testpreflightrequest_test_preflight_disallowed_origin_has_no_acao" + }, + { + "label": "Integration tests for the CORS middleware wired in app/main.py. The middleware", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L1", + "community": 17, + "norm_label": "integration tests for the cors middleware wired in app/main.py. the middleware", + "id": "tests_test_cors_rationale_1" + }, + { + "label": "Return a minimal FastAPI app whose CORS middleware mirrors main.py logic. T", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L27", + "community": 17, + "norm_label": "return a minimal fastapi app whose cors middleware mirrors main.py logic. t", + "id": "tests_test_cors_rationale_27" + }, + { + "label": "Send a simple GET with an Origin header and return the response headers.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L53", + "community": 17, + "norm_label": "send a simple get with an origin header and return the response headers.", + "id": "tests_test_cors_rationale_53" + }, + { + "label": "The middleware must honour each comma-separated origin independently.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L65", + "community": 17, + "norm_label": "the middleware must honour each comma-separated origin independently.", + "id": "tests_test_cors_rationale_65" + }, + { + "label": "Spaces around commas must not break origin matching.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L83", + "community": 17, + "norm_label": "spaces around commas must not break origin matching.", + "id": "tests_test_cors_rationale_83" + }, + { + "label": "A trailing comma must not produce an empty string in the origins list.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L89", + "community": 17, + "norm_label": "a trailing comma must not produce an empty string in the origins list.", + "id": "tests_test_cors_rationale_89" + }, + { + "label": "A leading comma must not produce an empty string in the origins list.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L95", + "community": 17, + "norm_label": "a leading comma must not produce an empty string in the origins list.", + "id": "tests_test_cors_rationale_95" + }, + { + "label": "Entries that are only whitespace after stripping must be dropped.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L101", + "community": 17, + "norm_label": "entries that are only whitespace after stripping must be dropped.", + "id": "tests_test_cors_rationale_101" + }, + { + "label": "A request from an explicitly allowed origin must get CORS response headers.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L113", + "community": 17, + "norm_label": "a request from an explicitly allowed origin must get cors response headers.", + "id": "tests_test_cors_rationale_113" + }, + { + "label": "The echoed origin must match the request, not be a wildcard.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L121", + "community": 17, + "norm_label": "the echoed origin must match the request, not be a wildcard.", + "id": "tests_test_cors_rationale_121" + }, + { + "label": "allow_credentials=True means the vary/credentials header is set.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L127", + "community": 17, + "norm_label": "allow_credentials=true means the vary/credentials header is set.", + "id": "tests_test_cors_rationale_127" + }, + { + "label": "The default value from Settings must allow the dev frontend.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L133", + "community": 17, + "norm_label": "the default value from settings must allow the dev frontend.", + "id": "tests_test_cors_rationale_133" + }, + { + "label": "A request from an origin not in the allow-list must NOT get CORS headers.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L145", + "community": 17, + "norm_label": "a request from an origin not in the allow-list must not get cors headers.", + "id": "tests_test_cors_rationale_145" + }, + { + "label": "Subdomains are not implicitly covered \u2014 must be listed explicitly.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L153", + "community": 17, + "norm_label": "subdomains are not implicitly covered \u2014 must be listed explicitly.", + "id": "tests_test_cors_rationale_153" + }, + { + "label": "HTTP and HTTPS are distinct origins.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L159", + "community": 17, + "norm_label": "http and https are distinct origins.", + "id": "tests_test_cors_rationale_159" + }, + { + "label": "The same host on a different port is a distinct origin.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L165", + "community": 17, + "norm_label": "the same host on a different port is a distinct origin.", + "id": "tests_test_cors_rationale_165" + }, + { + "label": "OPTIONS preflight with an allowed origin must return 200 with CORS headers.", + "file_type": "rationale", + "source_file": "backend/tests/test_cors.py", + "source_location": "L177", + "community": 17, + "norm_label": "options preflight with an allowed origin must return 200 with cors headers.", + "id": "tests_test_cors_rationale_177" + }, + { + "label": "test_discord_sync.py", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L1", + "community": 13, + "norm_label": "test_discord_sync.py", + "id": "backend_tests_test_discord_sync_py" + }, + { + "label": "_make_sync_match()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L21", + "community": 13, + "norm_label": "_make_sync_match()", + "id": "tests_test_discord_sync_make_sync_match" + }, + { + "label": "test_preview_returns_exact_match()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L50", + "community": 13, + "norm_label": "test_preview_returns_exact_match()", + "id": "tests_test_discord_sync_test_preview_returns_exact_match" + }, + { + "label": "test_preview_returns_suggested_match()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L75", + "community": 13, + "norm_label": "test_preview_returns_suggested_match()", + "id": "tests_test_discord_sync_test_preview_returns_suggested_match" + }, + { + "label": "test_preview_returns_ambiguous_match()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L95", + "community": 13, + "norm_label": "test_preview_returns_ambiguous_match()", + "id": "tests_test_discord_sync_test_preview_returns_ambiguous_match" + }, + { + "label": "test_preview_reports_unmatched_clan_members()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L135", + "community": 13, + "norm_label": "test_preview_reports_unmatched_clan_members()", + "id": "tests_test_discord_sync_test_preview_reports_unmatched_clan_members" + }, + { + "label": "test_apply_updates_matched_members()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L160", + "community": 13, + "norm_label": "test_apply_updates_matched_members()", + "id": "tests_test_discord_sync_test_apply_updates_matched_members" + }, + { + "label": "test_apply_with_empty_list_returns_zero()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L181", + "community": 13, + "norm_label": "test_apply_with_empty_list_returns_zero()", + "id": "tests_test_discord_sync_test_apply_with_empty_list_returns_zero" + }, + { + "label": "test_apply_with_unknown_member_id_skips_gracefully()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L196", + "community": 13, + "norm_label": "test_apply_with_unknown_member_id_skips_gracefully()", + "id": "tests_test_discord_sync_test_apply_with_unknown_member_id_skips_gracefully" + }, + { + "label": "test_service_preview_exact_discord_id_match()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L223", + "community": 13, + "norm_label": "test_service_preview_exact_discord_id_match()", + "id": "tests_test_discord_sync_test_service_preview_exact_discord_id_match" + }, + { + "label": "test_service_preview_suggested_name_username_match()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L297", + "community": 13, + "norm_label": "test_service_preview_suggested_name_username_match()", + "id": "tests_test_discord_sync_test_service_preview_suggested_name_username_match" + }, + { + "label": "test_service_preview_ambiguous_multiple_guild_matches()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L368", + "community": 13, + "norm_label": "test_service_preview_ambiguous_multiple_guild_matches()", + "id": "tests_test_discord_sync_test_service_preview_ambiguous_multiple_guild_matches" + }, + { + "label": "test_service_preview_unmatched_guild_and_clan()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L406", + "community": 13, + "norm_label": "test_service_preview_unmatched_guild_and_clan()", + "id": "tests_test_discord_sync_test_service_preview_unmatched_guild_and_clan" + }, + { + "label": "test_service_apply_updates_discord_fields()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L442", + "community": 13, + "norm_label": "test_service_apply_updates_discord_fields()", + "id": "tests_test_discord_sync_test_service_apply_updates_discord_fields" + }, + { + "label": "test_service_apply_unknown_member_id_skipped()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L474", + "community": 13, + "norm_label": "test_service_apply_unknown_member_id_skipped()", + "id": "tests_test_discord_sync_test_service_apply_unknown_member_id_skipped" + }, + { + "label": "test_service_apply_empty_list_returns_zero()", + "file_type": "code", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L498", + "community": 13, + "norm_label": "test_service_apply_empty_list_returns_zero()", + "id": "tests_test_discord_sync_test_service_apply_empty_list_returns_zero" + }, + { + "label": "Endpoint tests for Discord sync \u2014 /api/members/discord-sync/* All tests mock th", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L1", + "community": 13, + "norm_label": "endpoint tests for discord sync \u2014 /api/members/discord-sync/* all tests mock th", + "id": "tests_test_discord_sync_rationale_1" + }, + { + "label": "Exact confidence match (discord_id already set) is returned correctly.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L51", + "community": 13, + "norm_label": "exact confidence match (discord_id already set) is returned correctly.", + "id": "tests_test_discord_sync_rationale_51" + }, + { + "label": "Suggested confidence (name heuristic) is returned correctly.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L76", + "community": 13, + "norm_label": "suggested confidence (name heuristic) is returned correctly.", + "id": "tests_test_discord_sync_rationale_76" + }, + { + "label": "Ambiguous confidence (multiple guild members could match) is returned.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L96", + "community": 13, + "norm_label": "ambiguous confidence (multiple guild members could match) is returned.", + "id": "tests_test_discord_sync_rationale_96" + }, + { + "label": "Guild members with no clan counterpart appear in unmatched_guild_members.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L116", + "community": 13, + "norm_label": "guild members with no clan counterpart appear in unmatched_guild_members.", + "id": "tests_test_discord_sync_rationale_116" + }, + { + "label": "Clan members with no guild counterpart appear in unmatched_clan_members.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L136", + "community": 13, + "norm_label": "clan members with no guild counterpart appear in unmatched_clan_members.", + "id": "tests_test_discord_sync_rationale_136" + }, + { + "label": "Apply returns the count of updated members.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L161", + "community": 13, + "norm_label": "apply returns the count of updated members.", + "id": "tests_test_discord_sync_rationale_161" + }, + { + "label": "Applying an empty list returns updated=0 without crashing.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L182", + "community": 13, + "norm_label": "applying an empty list returns updated=0 without crashing.", + "id": "tests_test_discord_sync_rationale_182" + }, + { + "label": "Unknown member_ids are silently skipped; updated count reflects only real rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L197", + "community": 13, + "norm_label": "unknown member_ids are silently skipped; updated count reflects only real rows.", + "id": "tests_test_discord_sync_rationale_197" + }, + { + "label": "Heuristic 1: discord_id already set on the clan member \u2192 exact confidence.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L224", + "community": 13, + "norm_label": "heuristic 1: discord_id already set on the clan member \u2192 exact confidence.", + "id": "tests_test_discord_sync_rationale_224" + }, + { + "label": "Heuristic 2: discord_username set and matches guild username \u2192 exact confidence.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L263", + "community": 13, + "norm_label": "heuristic 2: discord_username set and matches guild username \u2192 exact confidence.", + "id": "tests_test_discord_sync_rationale_263" + }, + { + "label": "Heuristic 3: clan name matches guild username \u2192 suggested confidence.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L298", + "community": 13, + "norm_label": "heuristic 3: clan name matches guild username \u2192 suggested confidence.", + "id": "tests_test_discord_sync_rationale_298" + }, + { + "label": "Heuristic 4: clan name matches guild display_name \u2192 suggested confidence.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L333", + "community": 13, + "norm_label": "heuristic 4: clan name matches guild display_name \u2192 suggested confidence.", + "id": "tests_test_discord_sync_rationale_333" + }, + { + "label": "Two guild members match the same clan member \u2192 ambiguous.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L369", + "community": 13, + "norm_label": "two guild members match the same clan member \u2192 ambiguous.", + "id": "tests_test_discord_sync_rationale_369" + }, + { + "label": "Members with no counterpart appear in the respective unmatched lists.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L407", + "community": 13, + "norm_label": "members with no counterpart appear in the respective unmatched lists.", + "id": "tests_test_discord_sync_rationale_407" + }, + { + "label": "apply_discord_sync writes discord_username and discord_id to matched members.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L443", + "community": 13, + "norm_label": "apply_discord_sync writes discord_username and discord_id to matched members.", + "id": "tests_test_discord_sync_rationale_443" + }, + { + "label": "apply_discord_sync skips member_ids not found in the DB without crashing.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L475", + "community": 13, + "norm_label": "apply_discord_sync skips member_ids not found in the db without crashing.", + "id": "tests_test_discord_sync_rationale_475" + }, + { + "label": "apply_discord_sync with an empty list returns updated=0 immediately.", + "file_type": "rationale", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L499", + "community": 13, + "norm_label": "apply_discord_sync with an empty list returns updated=0 immediately.", + "id": "tests_test_discord_sync_rationale_499" + }, + { + "label": "test_enums.py", + "file_type": "code", + "source_file": "backend/tests/test_enums.py", + "source_location": "L1", + "community": 63, + "norm_label": "test_enums.py", + "id": "backend_tests_test_enums_py" + }, + { + "label": "test_building_type_labels_covers_all_values()", + "file_type": "code", + "source_file": "backend/tests/test_enums.py", + "source_location": "L6", + "community": 63, + "norm_label": "test_building_type_labels_covers_all_values()", + "id": "tests_test_enums_test_building_type_labels_covers_all_values" + }, + { + "label": "test_building_type_labels_are_friendly_strings()", + "file_type": "code", + "source_file": "backend/tests/test_enums.py", + "source_location": "L16", + "community": 63, + "norm_label": "test_building_type_labels_are_friendly_strings()", + "id": "tests_test_enums_test_building_type_labels_are_friendly_strings" + }, + { + "label": "Tests for enum definitions and associated constants in app.models.enums.", + "file_type": "rationale", + "source_file": "backend/tests/test_enums.py", + "source_location": "L1", + "community": 63, + "norm_label": "tests for enum definitions and associated constants in app.models.enums.", + "id": "tests_test_enums_rationale_1" + }, + { + "label": "Every BuildingType member must have an entry in BUILDING_TYPE_LABELS. This", + "file_type": "rationale", + "source_file": "backend/tests/test_enums.py", + "source_location": "L7", + "community": 63, + "norm_label": "every buildingtype member must have an entry in building_type_labels. this", + "id": "tests_test_enums_rationale_7" + }, + { + "label": "BUILDING_TYPE_LABELS values must be non-empty title-cased display strings.", + "file_type": "rationale", + "source_file": "backend/tests/test_enums.py", + "source_location": "L17", + "community": 63, + "norm_label": "building_type_labels values must be non-empty title-cased display strings.", + "id": "tests_test_enums_rationale_17" + }, + { + "label": "test_health.py", + "file_type": "code", + "source_file": "backend/tests/test_health.py", + "source_location": "L1", + "community": 10, + "norm_label": "test_health.py", + "id": "backend_tests_test_health_py" + }, + { + "label": "mock_db()", + "file_type": "code", + "source_file": "backend/tests/test_health.py", + "source_location": "L11", + "community": 10, + "norm_label": "mock_db()", + "id": "tests_test_health_mock_db" + }, + { + "label": "test_health_returns_healthy()", + "file_type": "code", + "source_file": "backend/tests/test_health.py", + "source_location": "L18", + "community": 10, + "norm_label": "test_health_returns_healthy()", + "id": "tests_test_health_test_health_returns_healthy" + }, + { + "label": "Health endpoint returns 200 and healthy status when DB is reachable.", + "file_type": "rationale", + "source_file": "backend/tests/test_health.py", + "source_location": "L19", + "community": 10, + "norm_label": "health endpoint returns 200 and healthy status when db is reachable.", + "id": "tests_test_health_rationale_19" + }, + { + "label": "test_image_gen.py", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L1", + "community": 2, + "norm_label": "test_image_gen.py", + "id": "backend_tests_test_image_gen_py" + }, + { + "label": "_make_building_dict()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L26", + "community": 2, + "norm_label": "_make_building_dict()", + "id": "tests_test_image_gen_make_building_dict" + }, + { + "label": "_make_group_dict()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L43", + "community": 2, + "norm_label": "_make_group_dict()", + "id": "tests_test_image_gen_make_group_dict" + }, + { + "label": "test_build_assignments_html_contains_title()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L88", + "community": 2, + "norm_label": "test_build_assignments_html_contains_title()", + "id": "tests_test_image_gen_test_build_assignments_html_contains_title" + }, + { + "label": "test_build_assignments_html_contains_building_type()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L95", + "community": 2, + "norm_label": "test_build_assignments_html_contains_building_type()", + "id": "tests_test_image_gen_test_build_assignments_html_contains_building_type" + }, + { + "label": "test_build_assignments_html_reserve_cell()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L105", + "community": 2, + "norm_label": "test_build_assignments_html_reserve_cell()", + "id": "tests_test_image_gen_test_build_assignments_html_reserve_cell" + }, + { + "label": "test_build_assignments_html_disabled_cell()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L114", + "community": 2, + "norm_label": "test_build_assignments_html_disabled_cell()", + "id": "tests_test_image_gen_test_build_assignments_html_disabled_cell" + }, + { + "label": "test_build_assignments_html_empty_board()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L123", + "community": 2, + "norm_label": "test_build_assignments_html_empty_board()", + "id": "tests_test_image_gen_test_build_assignments_html_empty_board" + }, + { + "label": "test_build_assignments_html_all_building_types_colored()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L130", + "community": 2, + "norm_label": "test_build_assignments_html_all_building_types_colored()", + "id": "tests_test_image_gen_test_build_assignments_html_all_building_types_colored" + }, + { + "label": "test_build_reserves_html_contains_title()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L150", + "community": 2, + "norm_label": "test_build_reserves_html_contains_title()", + "id": "tests_test_image_gen_test_build_reserves_html_contains_title" + }, + { + "label": "test_build_reserves_html_contains_member()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L156", + "community": 2, + "norm_label": "test_build_reserves_html_contains_member()", + "id": "tests_test_image_gen_test_build_reserves_html_contains_member" + }, + { + "label": "test_build_reserves_html_day1_color()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L162", + "community": 2, + "norm_label": "test_build_reserves_html_day1_color()", + "id": "tests_test_image_gen_test_build_reserves_html_day1_color" + }, + { + "label": "test_build_reserves_html_no_role_column()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L174", + "community": 2, + "norm_label": "test_build_reserves_html_no_role_column()", + "id": "tests_test_image_gen_test_build_reserves_html_no_role_column" + }, + { + "label": "test_generate_assignments_image_calls_render()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L194", + "community": 2, + "norm_label": "test_generate_assignments_image_calls_render()", + "id": "tests_test_image_gen_test_generate_assignments_image_calls_render" + }, + { + "label": "test_generate_reserves_image_calls_render()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L211", + "community": 2, + "norm_label": "test_generate_reserves_image_calls_render()", + "id": "tests_test_image_gen_test_generate_reserves_image_calls_render" + }, + { + "label": "test_build_assignments_html_group_header_present()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L231", + "community": 2, + "norm_label": "test_build_assignments_html_group_header_present()", + "id": "tests_test_image_gen_test_build_assignments_html_group_header_present" + }, + { + "label": "test_build_assignments_html_group_header_before_members()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L242", + "community": 2, + "norm_label": "test_build_assignments_html_group_header_before_members()", + "id": "tests_test_image_gen_test_build_assignments_html_group_header_before_members" + }, + { + "label": "test_build_assignments_html_single_row_per_group()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L254", + "community": 2, + "norm_label": "test_build_assignments_html_single_row_per_group()", + "id": "tests_test_image_gen_test_build_assignments_html_single_row_per_group" + }, + { + "label": "test_build_assignments_html_buildings_side_by_side()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L281", + "community": 2, + "norm_label": "test_build_assignments_html_buildings_side_by_side()", + "id": "tests_test_image_gen_test_build_assignments_html_buildings_side_by_side" + }, + { + "label": "test_build_assignments_html_heavy_hitter_color()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L315", + "community": 2, + "norm_label": "test_build_assignments_html_heavy_hitter_color()", + "id": "tests_test_image_gen_test_build_assignments_html_heavy_hitter_color" + }, + { + "label": "test_build_assignments_html_no_role_map_fallback()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L328", + "community": 2, + "norm_label": "test_build_assignments_html_no_role_map_fallback()", + "id": "tests_test_image_gen_test_build_assignments_html_no_role_map_fallback" + }, + { + "label": "test_build_assignments_html_role_color_on_span_not_background()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L339", + "community": 2, + "norm_label": "test_build_assignments_html_role_color_on_span_not_background()", + "id": "tests_test_image_gen_test_build_assignments_html_role_color_on_span_not_background" + }, + { + "label": "test_build_reserves_html_novice_color()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L363", + "community": 2, + "norm_label": "test_build_reserves_html_novice_color()", + "id": "tests_test_image_gen_test_build_reserves_html_novice_color" + }, + { + "label": "test_build_reserves_html_fallback_color()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L371", + "community": 2, + "norm_label": "test_build_reserves_html_fallback_color()", + "id": "tests_test_image_gen_test_build_reserves_html_fallback_color" + }, + { + "label": "test_build_assignments_html_role_colors_match_ui()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L405", + "community": 2, + "norm_label": "test_build_assignments_html_role_colors_match_ui()", + "id": "tests_test_image_gen_test_build_assignments_html_role_colors_match_ui" + }, + { + "label": "test_build_reserves_html_role_colors_match_ui()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L430", + "community": 2, + "norm_label": "test_build_reserves_html_role_colors_match_ui()", + "id": "tests_test_image_gen_test_build_reserves_html_role_colors_match_ui" + }, + { + "label": "test_build_assignments_html_no_level_in_header()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L443", + "community": 2, + "norm_label": "test_build_assignments_html_no_level_in_header()", + "id": "tests_test_image_gen_test_build_assignments_html_no_level_in_header" + }, + { + "label": "test_build_assignments_html_broken_building_no_level()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L456", + "community": 2, + "norm_label": "test_build_assignments_html_broken_building_no_level()", + "id": "tests_test_image_gen_test_build_assignments_html_broken_building_no_level" + }, + { + "label": "test_build_assignments_html_building_number_in_thead()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L468", + "community": 2, + "norm_label": "test_build_assignments_html_building_number_in_thead()", + "id": "tests_test_image_gen_test_build_assignments_html_building_number_in_thead" + }, + { + "label": "test_build_assignments_html_post_flat_table()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L482", + "community": 2, + "norm_label": "test_build_assignments_html_post_flat_table()", + "id": "tests_test_image_gen_test_build_assignments_html_post_flat_table" + }, + { + "label": "test_build_assignments_html_post_reserve_and_disabled()", + "file_type": "code", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L516", + "community": 2, + "norm_label": "test_build_assignments_html_post_reserve_and_disabled()", + "id": "tests_test_image_gen_test_build_assignments_html_post_reserve_and_disabled" + }, + { + "label": "Tests for the image generation service.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L1", + "community": 2, + "norm_label": "tests for the image generation service.", + "id": "tests_test_image_gen_rationale_1" + }, + { + "label": "Role column must not appear in the rendered HTML.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L175", + "community": 2, + "norm_label": "role column must not appear in the rendered html.", + "id": "tests_test_image_gen_rationale_175" + }, + { + "label": "Each group must have a 'Group N' label in the HTML.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L232", + "community": 2, + "norm_label": "each group must have a 'group n' label in the html.", + "id": "tests_test_image_gen_rationale_232" + }, + { + "label": "Group 1 header must appear before Group 2 header in document order.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L243", + "community": 2, + "norm_label": "group 1 header must appear before group 2 header in document order.", + "id": "tests_test_image_gen_rationale_243" + }, + { + "label": "Group label and slot cells must appear in the same , not separate rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L255", + "community": 2, + "norm_label": "group label and slot cells must appear in the same , not separate rows.", + "id": "tests_test_image_gen_rationale_255" + }, + { + "label": "Two buildings of the same type must both render and the section must use flex la", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L282", + "community": 2, + "norm_label": "two buildings of the same type must both render and the section must use flex la", + "id": "tests_test_image_gen_rationale_282" + }, + { + "label": "A member mapped to heavy_hitter role gets the red-400 color #f87171 (matches UI", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L316", + "community": 2, + "norm_label": "a member mapped to heavy_hitter role gets the red-400 color #f87171 (matches ui", + "id": "tests_test_image_gen_rationale_316" + }, + { + "label": "When member_id_to_role is empty the fallback white color is used.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L329", + "community": 2, + "norm_label": "when member_id_to_role is empty the fallback white color is used.", + "id": "tests_test_image_gen_rationale_329" + }, + { + "label": "The role color appears on the name , not the cell background.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L340", + "community": 2, + "norm_label": "the role color appears on the name , not the cell background.", + "id": "tests_test_image_gen_rationale_340" + }, + { + "label": "A member with advanced role gets the amber-400 color #fbbf24 (matches UI hue).", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L356", + "community": 2, + "norm_label": "a member with advanced role gets the amber-400 color #fbbf24 (matches ui hue).", + "id": "tests_test_image_gen_rationale_356" + }, + { + "label": "A member with novice role gets the blue-400 color #60a5fa (matches UI hue).", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L364", + "community": 2, + "norm_label": "a member with novice role gets the blue-400 color #60a5fa (matches ui hue).", + "id": "tests_test_image_gen_rationale_364" + }, + { + "label": "A member whose role is not in _MEMBER_ROLE_COLORS falls back to #f9fafb.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L372", + "community": 2, + "norm_label": "a member whose role is not in _member_role_colors falls back to #f9fafb.", + "id": "tests_test_image_gen_rationale_372" + }, + { + "label": "Every role maps to the same hue family used in the UI (BoardPage ROLE_CHIP_COLOR", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L406", + "community": 2, + "norm_label": "every role maps to the same hue family used in the ui (boardpage role_chip_color", + "id": "tests_test_image_gen_rationale_406" + }, + { + "label": "Every role in the reserves image maps to the same hue family used in the UI.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L431", + "community": 2, + "norm_label": "every role in the reserves image maps to the same hue family used in the ui.", + "id": "tests_test_image_gen_rationale_431" + }, + { + "label": "Building header must not contain the level.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L444", + "community": 2, + "norm_label": "building header must not contain the level.", + "id": "tests_test_image_gen_rationale_444" + }, + { + "label": "Broken building header shows [broken] but no level.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L457", + "community": 2, + "norm_label": "broken building header shows [broken] but no level.", + "id": "tests_test_image_gen_rationale_457" + }, + { + "label": "Building number must appear in a spanning row, not a standalone
.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L469", + "community": 2, + "norm_label": "building number must appear in a spanning row, not a standalone
.", + "id": "tests_test_image_gen_rationale_469" + }, + { + "label": "Post buildings render as a single flat table, not per-building group tables.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L483", + "community": 2, + "norm_label": "post buildings render as a single flat table, not per-building group tables.", + "id": "tests_test_image_gen_rationale_483" + }, + { + "label": "Post flat table correctly renders reserve and disabled slots.", + "file_type": "rationale", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L517", + "community": 2, + "norm_label": "post flat table correctly renders reserve and disabled slots.", + "id": "tests_test_image_gen_rationale_517" + }, + { + "label": "test_lifecycle.py", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L1", + "community": 46, + "norm_label": "test_lifecycle.py", + "id": "backend_tests_test_lifecycle_py" + }, + { + "label": "test_activate_planning_siege()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L43", + "community": 46, + "norm_label": "test_activate_planning_siege()", + "id": "tests_test_lifecycle_test_activate_planning_siege" + }, + { + "label": "test_activate_already_active_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L66", + "community": 46, + "norm_label": "test_activate_already_active_returns_400()", + "id": "tests_test_lifecycle_test_activate_already_active_returns_400" + }, + { + "label": "test_complete_active_siege()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L85", + "community": 46, + "norm_label": "test_complete_active_siege()", + "id": "tests_test_lifecycle_test_complete_active_siege" + }, + { + "label": "test_complete_planning_siege_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L108", + "community": 46, + "norm_label": "test_complete_planning_siege_returns_400()", + "id": "tests_test_lifecycle_test_complete_planning_siege_returns_400" + }, + { + "label": "test_clone_siege_returns_201()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L127", + "community": 46, + "norm_label": "test_clone_siege_returns_201()", + "id": "tests_test_lifecycle_test_clone_siege_returns_201" + }, + { + "label": "_make_post_ns()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L154", + "community": 46, + "norm_label": "_make_post_ns()", + "id": "tests_test_lifecycle_make_post_ns" + }, + { + "label": "_make_src_position_ns()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L166", + "community": 46, + "norm_label": "_make_src_position_ns()", + "id": "tests_test_lifecycle_make_src_position_ns" + }, + { + "label": "_make_src_group_ns()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L176", + "community": 46, + "norm_label": "_make_src_group_ns()", + "id": "tests_test_lifecycle_make_src_group_ns" + }, + { + "label": "_make_src_building_ns()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L184", + "community": 46, + "norm_label": "_make_src_building_ns()", + "id": "tests_test_lifecycle_make_src_building_ns" + }, + { + "label": "test_clone_uses_post_priority_config_not_source_priority()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L196", + "community": 46, + "norm_label": "test_clone_uses_post_priority_config_not_source_priority()", + "id": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority" + }, + { + "label": "Endpoint tests for siege lifecycle transitions: activate, complete, clone.", + "file_type": "rationale", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L1", + "community": 46, + "norm_label": "endpoint tests for siege lifecycle transitions: activate, complete, clone.", + "id": "tests_test_lifecycle_rationale_1" + }, + { + "label": "Cloning a siege with stale priority=0 posts must use PostPriorityConfig.priority", + "file_type": "rationale", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L197", + "community": 46, + "norm_label": "cloning a siege with stale priority=0 posts must use postpriorityconfig.priority", + "id": "tests_test_lifecycle_rationale_197" + }, + { + "label": "test_lifecycle_integration.py", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L1", + "community": 54, + "norm_label": "test_lifecycle_integration.py", + "id": "backend_tests_test_lifecycle_integration_py" + }, + { + "label": "_build_valid_siege_graph()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L112", + "community": 54, + "norm_label": "_build_valid_siege_graph()", + "id": "tests_test_lifecycle_integration_build_valid_siege_graph" + }, + { + "label": "test_full_siege_lifecycle()", + "file_type": "code", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L215", + "community": 54, + "norm_label": "test_full_siege_lifecycle()", + "id": "tests_test_lifecycle_integration_test_full_siege_lifecycle" + }, + { + "label": "Integration test: full siege lifecycle \u2014 create \u2192 validate \u2192 assign \u2192 activate \u2192", + "file_type": "rationale", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L1", + "community": 54, + "norm_label": "integration test: full siege lifecycle \u2014 create \u2192 validate \u2192 assign \u2192 activate \u2192", + "id": "tests_test_lifecycle_integration_rationale_1" + }, + { + "label": "Build a siege with exactly the right building counts and assigned active members", + "file_type": "rationale", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L113", + "community": 54, + "norm_label": "build a siege with exactly the right building counts and assigned active members", + "id": "tests_test_lifecycle_integration_rationale_113" + }, + { + "label": "Return a mock async session that serves the siege + configs across multiple exec", + "file_type": "rationale", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L183", + "community": 54, + "norm_label": "return a mock async session that serves the siege + configs across multiple exec", + "id": "tests_test_lifecycle_integration_rationale_183" + }, + { + "label": "Happy-path: validate (errors) \u2192 assign \u2192 validate (0 errors) \u2192 activate \u2192 comple", + "file_type": "rationale", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L216", + "community": 54, + "norm_label": "happy-path: validate (errors) \u2192 assign \u2192 validate (0 errors) \u2192 activate \u2192 comple", + "id": "tests_test_lifecycle_integration_rationale_216" + }, + { + "label": "test_members.py", + "file_type": "code", + "source_file": "backend/tests/test_members.py", + "source_location": "L1", + "community": 60, + "norm_label": "test_members.py", + "id": "backend_tests_test_members_py" + }, + { + "label": "test_list_members_returns_empty_list()", + "file_type": "code", + "source_file": "backend/tests/test_members.py", + "source_location": "L43", + "community": 60, + "norm_label": "test_list_members_returns_empty_list()", + "id": "tests_test_members_test_list_members_returns_empty_list" + }, + { + "label": "test_create_member_returns_201()", + "file_type": "code", + "source_file": "backend/tests/test_members.py", + "source_location": "L59", + "community": 60, + "norm_label": "test_create_member_returns_201()", + "id": "tests_test_members_test_create_member_returns_201" + }, + { + "label": "test_create_member_duplicate_name_returns_409()", + "file_type": "code", + "source_file": "backend/tests/test_members.py", + "source_location": "L83", + "community": 60, + "norm_label": "test_create_member_duplicate_name_returns_409()", + "id": "tests_test_members_test_create_member_duplicate_name_returns_409" + }, + { + "label": "test_get_member_not_found_returns_404()", + "file_type": "code", + "source_file": "backend/tests/test_members.py", + "source_location": "L106", + "community": 60, + "norm_label": "test_get_member_not_found_returns_404()", + "id": "tests_test_members_test_get_member_not_found_returns_404" + }, + { + "label": "test_delete_member_returns_204()", + "file_type": "code", + "source_file": "backend/tests/test_members.py", + "source_location": "L124", + "community": 60, + "norm_label": "test_delete_member_returns_204()", + "id": "tests_test_members_test_delete_member_returns_204" + }, + { + "label": "test_member_changelog_column.py", + "file_type": "code", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L1", + "community": 44, + "norm_label": "test_member_changelog_column.py", + "id": "backend_tests_test_member_changelog_column_py" + }, + { + "label": "test_last_seen_changelog_at_column_exists()", + "file_type": "code", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L20", + "community": 44, + "norm_label": "test_last_seen_changelog_at_column_exists()", + "id": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_exists" + }, + { + "label": "test_last_seen_changelog_at_column_is_nullable()", + "file_type": "code", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L32", + "community": 44, + "norm_label": "test_last_seen_changelog_at_column_is_nullable()", + "id": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_is_nullable" + }, + { + "label": "test_last_seen_changelog_at_has_no_server_default()", + "file_type": "code", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L50", + "community": 44, + "norm_label": "test_last_seen_changelog_at_has_no_server_default()", + "id": "tests_test_member_changelog_column_test_last_seen_changelog_at_has_no_server_default" + }, + { + "label": "test_last_seen_changelog_at_column_type_is_datetime()", + "file_type": "code", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L68", + "community": 44, + "norm_label": "test_last_seen_changelog_at_column_type_is_datetime()", + "id": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_type_is_datetime" + }, + { + "label": "test_last_seen_changelog_at_accepts_none_at_python_level()", + "file_type": "code", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L89", + "community": 44, + "norm_label": "test_last_seen_changelog_at_accepts_none_at_python_level()", + "id": "tests_test_member_changelog_column_test_last_seen_changelog_at_accepts_none_at_python_level" + }, + { + "label": "test_last_seen_changelog_at_accepts_datetime_at_python_level()", + "file_type": "code", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L103", + "community": 44, + "norm_label": "test_last_seen_changelog_at_accepts_datetime_at_python_level()", + "id": "tests_test_member_changelog_column_test_last_seen_changelog_at_accepts_datetime_at_python_level" + }, + { + "label": "Schema-aware tests for Member.last_seen_changelog_at (issue #295, AC 1). These", + "file_type": "rationale", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L1", + "community": 44, + "norm_label": "schema-aware tests for member.last_seen_changelog_at (issue #295, ac 1). these", + "id": "tests_test_member_changelog_column_rationale_1" + }, + { + "label": "Member mapper exposes last_seen_changelog_at as a mapped attribute.", + "file_type": "rationale", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L21", + "community": 44, + "norm_label": "member mapper exposes last_seen_changelog_at as a mapped attribute.", + "id": "tests_test_member_changelog_column_rationale_21" + }, + { + "label": "last_seen_changelog_at column is defined nullable=True. Null is the sentine", + "file_type": "rationale", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L33", + "community": 44, + "norm_label": "last_seen_changelog_at column is defined nullable=true. null is the sentine", + "id": "tests_test_member_changelog_column_rationale_33" + }, + { + "label": "last_seen_changelog_at has no server-side default. Null is the intentional", + "file_type": "rationale", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L51", + "community": 44, + "norm_label": "last_seen_changelog_at has no server-side default. null is the intentional", + "id": "tests_test_member_changelog_column_rationale_51" + }, + { + "label": "last_seen_changelog_at uses SQLAlchemy DateTime (no timezone). Matches the", + "file_type": "rationale", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L69", + "community": 44, + "norm_label": "last_seen_changelog_at uses sqlalchemy datetime (no timezone). matches the", + "id": "tests_test_member_changelog_column_rationale_69" + }, + { + "label": "Mapped type annotation allows None (datetime | None). Constructing a Member", + "file_type": "rationale", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L90", + "community": 44, + "norm_label": "mapped type annotation allows none (datetime | none). constructing a member", + "id": "tests_test_member_changelog_column_rationale_90" + }, + { + "label": "Mapped type annotation allows a datetime value. Assigning a real datetime m", + "file_type": "rationale", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L104", + "community": 44, + "norm_label": "mapped type annotation allows a datetime value. assigning a real datetime m", + "id": "tests_test_member_changelog_column_rationale_104" + }, + { + "label": "test_notifications.py", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1", + "community": 12, + "norm_label": "test_notifications.py", + "id": "backend_tests_test_notifications_py" + }, + { + "label": "_make_batch()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L69", + "community": 12, + "norm_label": "_make_batch()", + "id": "tests_test_notifications_make_batch" + }, + { + "label": "_make_batch_result()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L82", + "community": 12, + "norm_label": "_make_batch_result()", + "id": "tests_test_notifications_make_batch_result" + }, + { + "label": "_make_db_session()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L112", + "community": 12, + "norm_label": "_make_db_session()", + "id": "tests_test_notifications_make_db_session" + }, + { + "label": "test_notify_returns_batch_id()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L151", + "community": 12, + "norm_label": "test_notify_returns_batch_id()", + "id": "tests_test_notifications_test_notify_returns_batch_id" + }, + { + "label": "test_notify_siege_not_found()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L221", + "community": 12, + "norm_label": "test_notify_siege_not_found()", + "id": "tests_test_notifications_test_notify_siege_not_found" + }, + { + "label": "test_notify_siege_complete_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L247", + "community": 12, + "norm_label": "test_notify_siege_complete_returns_400()", + "id": "tests_test_notifications_test_notify_siege_complete_returns_400" + }, + { + "label": "test_get_notification_batch_returns_results()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L272", + "community": 12, + "norm_label": "test_get_notification_batch_returns_results()", + "id": "tests_test_notifications_test_get_notification_batch_returns_results" + }, + { + "label": "test_get_notification_batch_not_found()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L324", + "community": 12, + "norm_label": "test_get_notification_batch_not_found()", + "id": "tests_test_notifications_test_get_notification_batch_not_found" + }, + { + "label": "test_post_to_channel_success()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L354", + "community": 12, + "norm_label": "test_post_to_channel_success()", + "id": "tests_test_notifications_test_post_to_channel_success" + }, + { + "label": "test_post_to_channel_posts_images_to_images_channel_and_summary_to_text_channel()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L415", + "community": 12, + "norm_label": "test_post_to_channel_posts_images_to_images_channel_and_summary_to_text_channel()", + "id": "tests_test_notifications_test_post_to_channel_posts_images_to_images_channel_and_summary_to_text_channel" + }, + { + "label": "test_post_to_channel_image_failure_returns_failed()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L497", + "community": 12, + "norm_label": "test_post_to_channel_image_failure_returns_failed()", + "id": "tests_test_notifications_test_post_to_channel_image_failure_returns_failed" + }, + { + "label": "test_notify_skips_member_with_no_discord_username()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L556", + "community": 12, + "norm_label": "test_notify_skips_member_with_no_discord_username()", + "id": "tests_test_notifications_test_notify_skips_member_with_no_discord_username" + }, + { + "label": "test_notify_skips_member_not_in_guild()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L620", + "community": 12, + "norm_label": "test_notify_skips_member_not_in_guild()", + "id": "tests_test_notifications_test_notify_skips_member_not_in_guild" + }, + { + "label": "test_notify_eligible_member_gets_result_row_and_dm()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L679", + "community": 12, + "norm_label": "test_notify_eligible_member_gets_result_row_and_dm()", + "id": "tests_test_notifications_test_notify_eligible_member_gets_result_row_and_dm" + }, + { + "label": "test_notify_skipped_count_reflects_all_skipped_members()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L745", + "community": 12, + "norm_label": "test_notify_skipped_count_reflects_all_skipped_members()", + "id": "tests_test_notifications_test_notify_skipped_count_reflects_all_skipped_members" + }, + { + "label": "test_notify_blocked_when_siege_has_validation_errors()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L809", + "community": 12, + "norm_label": "test_notify_blocked_when_siege_has_validation_errors()", + "id": "tests_test_notifications_test_notify_blocked_when_siege_has_validation_errors" + }, + { + "label": "test_notify_passes_validation_guard_when_no_errors()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L855", + "community": 12, + "norm_label": "test_notify_passes_validation_guard_when_no_errors()", + "id": "tests_test_notifications_test_notify_passes_validation_guard_when_no_errors" + }, + { + "label": "test_notify_bot_unreachable_falls_back_to_username_filter()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L912", + "community": 12, + "norm_label": "test_notify_bot_unreachable_falls_back_to_username_filter()", + "id": "tests_test_notifications_test_notify_bot_unreachable_falls_back_to_username_filter" + }, + { + "label": "test_send_dms_sets_completed_status_even_when_bot_raises()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L979", + "community": 12, + "norm_label": "test_send_dms_sets_completed_status_even_when_bot_raises()", + "id": "tests_test_notifications_test_send_dms_sets_completed_status_even_when_bot_raises" + }, + { + "label": "test_notify_no_date_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1041", + "community": 12, + "norm_label": "test_notify_no_date_returns_400()", + "id": "tests_test_notifications_test_notify_no_date_returns_400" + }, + { + "label": "test_post_to_channel_no_date_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1068", + "community": 12, + "norm_label": "test_post_to_channel_no_date_returns_400()", + "id": "tests_test_notifications_test_post_to_channel_no_date_returns_400" + }, + { + "label": "Endpoint tests for notification and post-to-channel routes.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1", + "community": 12, + "norm_label": "endpoint tests for notification and post-to-channel routes.", + "id": "tests_test_notifications_rationale_1" + }, + { + "label": "Build a mock DB session that returns the given objects.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L113", + "community": 12, + "norm_label": "build a mock db session that returns the given objects.", + "id": "tests_test_notifications_rationale_113" + }, + { + "label": "Images post to discord_siege_images_channel. Summary with CDN links posts t", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L416", + "community": 12, + "norm_label": "images post to discord_siege_images_channel. summary with cdn links posts t", + "id": "tests_test_notifications_rationale_416" + }, + { + "label": "When post_image returns None (failure), the endpoint returns status='failed'.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L498", + "community": 12, + "norm_label": "when post_image returns none (failure), the endpoint returns status='failed'.", + "id": "tests_test_notifications_rationale_498" + }, + { + "label": "Members without a discord_username must not get a batch result row.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L557", + "community": 12, + "norm_label": "members without a discord_username must not get a batch result row.", + "id": "tests_test_notifications_rationale_557" + }, + { + "label": "Members whose discord_username is absent from the guild list must be skipped.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L621", + "community": 12, + "norm_label": "members whose discord_username is absent from the guild list must be skipped.", + "id": "tests_test_notifications_rationale_621" + }, + { + "label": "A member who has a discord_username AND is in the guild must get a result row.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L680", + "community": 12, + "norm_label": "a member who has a discord_username and is in the guild must get a result row.", + "id": "tests_test_notifications_rationale_680" + }, + { + "label": "skipped_count must equal the number of members excluded for any reason.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L746", + "community": 12, + "norm_label": "skipped_count must equal the number of members excluded for any reason.", + "id": "tests_test_notifications_rationale_746" + }, + { + "label": "POST /notify must return 400 when validate_siege returns errors.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L810", + "community": 12, + "norm_label": "post /notify must return 400 when validate_siege returns errors.", + "id": "tests_test_notifications_rationale_810" + }, + { + "label": "POST /notify must not be blocked when validate_siege returns no errors.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L856", + "community": 12, + "norm_label": "post /notify must not be blocked when validate_siege returns no errors.", + "id": "tests_test_notifications_rationale_856" + }, + { + "label": "When get_members() returns [] the endpoint must not block all DMs. Members", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L913", + "community": 12, + "norm_label": "when get_members() returns [] the endpoint must not block all dms. members", + "id": "tests_test_notifications_rationale_913" + }, + { + "label": "_send_dms must guarantee batch.status = completed in its finally block. Sce", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L980", + "community": 12, + "norm_label": "_send_dms must guarantee batch.status = completed in its finally block. sce", + "id": "tests_test_notifications_rationale_980" + }, + { + "label": "POST /notify must return 400 with a clear message when siege.date is None.", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1042", + "community": 12, + "norm_label": "post /notify must return 400 with a clear message when siege.date is none.", + "id": "tests_test_notifications_rationale_1042" + }, + { + "label": "POST /post-to-channel must return 400 with a clear message when siege.date is No", + "file_type": "rationale", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1069", + "community": 12, + "norm_label": "post /post-to-channel must return 400 with a clear message when siege.date is no", + "id": "tests_test_notifications_rationale_1069" + }, + { + "label": "test_notification_message.py", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L1", + "community": 4, + "norm_label": "test_notification_message.py", + "id": "backend_tests_test_notification_message_py" + }, + { + "label": "_stronghold_pos()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L31", + "community": 4, + "norm_label": "_stronghold_pos()", + "id": "tests_test_notification_message_stronghold_pos" + }, + { + "label": "_defense_tower_pos()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L40", + "community": 4, + "norm_label": "_defense_tower_pos()", + "id": "tests_test_notification_message_defense_tower_pos" + }, + { + "label": "_post_pos()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L49", + "community": 4, + "norm_label": "_post_pos()", + "id": "tests_test_notification_message_post_pos" + }, + { + "label": "test_no_previous_siege_all_current_in_set_at()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L63", + "community": 4, + "norm_label": "test_no_previous_siege_all_current_in_set_at()", + "id": "tests_test_notification_message_test_no_previous_siege_all_current_in_set_at" + }, + { + "label": "test_empty_sections_omitted_all_no_change()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L84", + "community": 4, + "norm_label": "test_empty_sections_omitted_all_no_change()", + "id": "tests_test_notification_message_test_empty_sections_omitted_all_no_change" + }, + { + "label": "test_full_diff_three_sections()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L105", + "community": 4, + "norm_label": "test_full_diff_three_sections()", + "id": "tests_test_notification_message_test_full_diff_three_sections" + }, + { + "label": "test_header_contains_siege_date_and_member_settings()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L149", + "community": 4, + "norm_label": "test_header_contains_siege_date_and_member_settings()", + "id": "tests_test_notification_message_test_header_contains_siege_date_and_member_settings" + }, + { + "label": "test_none_fields_display_as_unknown()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L169", + "community": 4, + "norm_label": "test_none_fields_display_as_unknown()", + "id": "tests_test_notification_message_test_none_fields_display_as_unknown" + }, + { + "label": "test_false_reserve_set_displays_no()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L183", + "community": 4, + "norm_label": "test_false_reserve_set_displays_no()", + "id": "tests_test_notification_message_test_false_reserve_set_displays_no" + }, + { + "label": "test_single_building_type_omits_building_number()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L201", + "community": 4, + "norm_label": "test_single_building_type_omits_building_number()", + "id": "tests_test_notification_message_test_single_building_type_omits_building_number" + }, + { + "label": "test_multiple_building_type_includes_building_number()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L222", + "community": 4, + "norm_label": "test_multiple_building_type_includes_building_number()", + "id": "tests_test_notification_message_test_multiple_building_type_includes_building_number" + }, + { + "label": "test_post_always_uses_short_format()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L241", + "community": 4, + "norm_label": "test_post_always_uses_short_format()", + "id": "tests_test_notification_message_test_post_always_uses_short_format" + }, + { + "label": "test_post_with_single_count_still_uses_short_format()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L257", + "community": 4, + "norm_label": "test_post_with_single_count_still_uses_short_format()", + "id": "tests_test_notification_message_test_post_with_single_count_still_uses_short_format" + }, + { + "label": "test_section_order_no_change_then_remove_then_set_at()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L276", + "community": 4, + "norm_label": "test_section_order_no_change_then_remove_then_set_at()", + "id": "tests_test_notification_message_test_section_order_no_change_then_remove_then_set_at" + }, + { + "label": "test_positions_sorted_within_section()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L303", + "community": 4, + "norm_label": "test_positions_sorted_within_section()", + "id": "tests_test_notification_message_test_positions_sorted_within_section" + }, + { + "label": "test_no_change_section_has_header_and_plain_position_lines()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L336", + "community": 4, + "norm_label": "test_no_change_section_has_header_and_plain_position_lines()", + "id": "tests_test_notification_message_test_no_change_section_has_header_and_plain_position_lines" + }, + { + "label": "test_remove_from_section_has_header_and_plain_position_lines()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L361", + "community": 4, + "norm_label": "test_remove_from_section_has_header_and_plain_position_lines()", + "id": "tests_test_notification_message_test_remove_from_section_has_header_and_plain_position_lines" + }, + { + "label": "test_set_at_section_has_header_and_plain_position_lines()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L385", + "community": 4, + "norm_label": "test_set_at_section_has_header_and_plain_position_lines()", + "id": "tests_test_notification_message_test_set_at_section_has_header_and_plain_position_lines" + }, + { + "label": "test_blank_line_between_no_change_and_remove_from()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L414", + "community": 4, + "norm_label": "test_blank_line_between_no_change_and_remove_from()", + "id": "tests_test_notification_message_test_blank_line_between_no_change_and_remove_from" + }, + { + "label": "test_blank_line_between_remove_from_and_set_at()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L431", + "community": 4, + "norm_label": "test_blank_line_between_remove_from_and_set_at()", + "id": "tests_test_notification_message_test_blank_line_between_remove_from_and_set_at" + }, + { + "label": "test_no_blank_line_when_only_one_section()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L447", + "community": 4, + "norm_label": "test_no_blank_line_when_only_one_section()", + "id": "tests_test_notification_message_test_no_blank_line_when_only_one_section" + }, + { + "label": "test_blank_line_count_with_all_three_sections()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L464", + "community": 4, + "norm_label": "test_blank_line_count_with_all_three_sections()", + "id": "tests_test_notification_message_test_blank_line_count_with_all_three_sections" + }, + { + "label": "test_all_three_section_headers_exact_format()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L488", + "community": 4, + "norm_label": "test_all_three_section_headers_exact_format()", + "id": "tests_test_notification_message_test_all_three_section_headers_exact_format" + }, + { + "label": "test_header_line_not_a_position_line()", + "file_type": "code", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L508", + "community": 4, + "norm_label": "test_header_line_not_a_position_line()", + "id": "tests_test_notification_message_test_header_line_not_a_position_line" + }, + { + "label": "Unit tests for build_member_notification_message in notification_message.py.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L1", + "community": 4, + "norm_label": "unit tests for build_member_notification_message in notification_message.py.", + "id": "tests_test_notification_message_rationale_1" + }, + { + "label": "When previous_positions is empty every current position gets the \u2694\ufe0f icon.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L64", + "community": 4, + "norm_label": "when previous_positions is empty every current position gets the \u2694\ufe0f icon.", + "id": "tests_test_notification_message_rationale_64" + }, + { + "label": "When current and previous are identical only the \ud83d\udee1\ufe0f icon appears.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L85", + "community": 4, + "norm_label": "when current and previous are identical only the \ud83d\udee1\ufe0f icon appears.", + "id": "tests_test_notification_message_rationale_85" + }, + { + "label": "Positions only in current \u2192 \u2694\ufe0f, only in previous \u2192 \u274c, both \u2192 \ud83d\udee1\ufe0f.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L106", + "community": 4, + "norm_label": "positions only in current \u2192 \u2694\ufe0f, only in previous \u2192 \u274c, both \u2192 \ud83d\udee1\ufe0f.", + "id": "tests_test_notification_message_rationale_106" + }, + { + "label": "The message header must include the date, reserve status and attack day.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L150", + "community": 4, + "norm_label": "the message header must include the date, reserve status and attack day.", + "id": "tests_test_notification_message_rationale_150" + }, + { + "label": "None for has_reserve_set or attack_day should render as 'Unknown'.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L170", + "community": 4, + "norm_label": "none for has_reserve_set or attack_day should render as 'unknown'.", + "id": "tests_test_notification_message_rationale_170" + }, + { + "label": "has_reserve_set=False should render as 'No', not 'Unknown'.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L184", + "community": 4, + "norm_label": "has_reserve_set=false should render as 'no', not 'unknown'.", + "id": "tests_test_notification_message_rationale_184" + }, + { + "label": "When count == 1 the building number is omitted from the label.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L202", + "community": 4, + "norm_label": "when count == 1 the building number is omitted from the label.", + "id": "tests_test_notification_message_rationale_202" + }, + { + "label": "Posts always render as ':white_circle: Post {N}' regardless of count.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L242", + "community": 4, + "norm_label": "posts always render as ':white_circle: post {n}' regardless of count.", + "id": "tests_test_notification_message_rationale_242" + }, + { + "label": "Posts with count == 1 still use short format (not the number-omitting path).", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L258", + "community": 4, + "norm_label": "posts with count == 1 still use short format (not the number-omitting path).", + "id": "tests_test_notification_message_rationale_258" + }, + { + "label": "Icons must appear in the order: \ud83d\udee1\ufe0f (No Change), \u274c (Remove From), \u2694\ufe0f (Set At).", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L277", + "community": 4, + "norm_label": "icons must appear in the order: \ud83d\udee1\ufe0f (no change), \u274c (remove from), \u2694\ufe0f (set at).", + "id": "tests_test_notification_message_rationale_277" + }, + { + "label": "Within Set At, positions should be sorted by type order then building/group/pos.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L304", + "community": 4, + "norm_label": "within set at, positions should be sorted by type order then building/group/pos.", + "id": "tests_test_notification_message_rationale_304" + }, + { + "label": "No Change section must have a ':shield: No Change :shield:' header. Posit", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L337", + "community": 4, + "norm_label": "no change section must have a ':shield: no change :shield:' header. posit", + "id": "tests_test_notification_message_rationale_337" + }, + { + "label": "Remove From section must have a ':x: Remove From :x:' header. Position li", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L362", + "community": 4, + "norm_label": "remove from section must have a ':x: remove from :x:' header. position li", + "id": "tests_test_notification_message_rationale_362" + }, + { + "label": "Set At section must have a ':crossed_swords: Set At :crossed_swords:' header.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L386", + "community": 4, + "norm_label": "set at section must have a ':crossed_swords: set at :crossed_swords:' header.", + "id": "tests_test_notification_message_rationale_386" + }, + { + "label": "A blank line must appear between the No Change and Remove From sections.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L415", + "community": 4, + "norm_label": "a blank line must appear between the no change and remove from sections.", + "id": "tests_test_notification_message_rationale_415" + }, + { + "label": "A blank line must appear between the Remove From and Set At sections.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L432", + "community": 4, + "norm_label": "a blank line must appear between the remove from and set at sections.", + "id": "tests_test_notification_message_rationale_432" + }, + { + "label": "When only one section is present there should be no blank line within that secti", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L448", + "community": 4, + "norm_label": "when only one section is present there should be no blank line within that secti", + "id": "tests_test_notification_message_rationale_448" + }, + { + "label": "With all three sections there should be exactly two blank lines between them", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L465", + "community": 4, + "norm_label": "with all three sections there should be exactly two blank lines between them", + "id": "tests_test_notification_message_rationale_465" + }, + { + "label": "All three section headers must appear as exact lines in the message.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L489", + "community": 4, + "norm_label": "all three section headers must appear as exact lines in the message.", + "id": "tests_test_notification_message_rationale_489" + }, + { + "label": "The section header line itself must not contain a building-type circle emoji.", + "file_type": "rationale", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L509", + "community": 4, + "norm_label": "the section header line itself must not contain a building-type circle emoji.", + "id": "tests_test_notification_message_rationale_509" + }, + { + "label": "test_posts.py", + "file_type": "code", + "source_file": "backend/tests/test_posts.py", + "source_location": "L1", + "community": 6, + "norm_label": "test_posts.py", + "id": "backend_tests_test_posts_py" + }, + { + "label": "_make_building()", + "file_type": "code", + "source_file": "backend/tests/test_posts.py", + "source_location": "L14", + "community": 0, + "norm_label": "_make_building()", + "id": "tests_test_posts_make_building" + }, + { + "label": "_make_post()", + "file_type": "code", + "source_file": "backend/tests/test_posts.py", + "source_location": "L25", + "community": 6, + "norm_label": "_make_post()", + "id": "tests_test_posts_make_post" + }, + { + "label": "test_list_posts_returns_list()", + "file_type": "code", + "source_file": "backend/tests/test_posts.py", + "source_location": "L55", + "community": 6, + "norm_label": "test_list_posts_returns_list()", + "id": "tests_test_posts_test_list_posts_returns_list" + }, + { + "label": "test_update_post_priority()", + "file_type": "code", + "source_file": "backend/tests/test_posts.py", + "source_location": "L76", + "community": 6, + "norm_label": "test_update_post_priority()", + "id": "tests_test_posts_test_update_post_priority" + }, + { + "label": "test_set_post_conditions_too_many_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_posts.py", + "source_location": "L93", + "community": 6, + "norm_label": "test_set_post_conditions_too_many_returns_400()", + "id": "tests_test_posts_test_set_post_conditions_too_many_returns_400" + }, + { + "label": "test_list_posts_sorted_by_building_number()", + "file_type": "code", + "source_file": "backend/tests/test_posts.py", + "source_location": "L114", + "community": 6, + "norm_label": "test_list_posts_sorted_by_building_number()", + "id": "tests_test_posts_test_list_posts_sorted_by_building_number" + }, + { + "label": "Endpoint tests for post management routes.", + "file_type": "rationale", + "source_file": "backend/tests/test_posts.py", + "source_location": "L1", + "community": 6, + "norm_label": "endpoint tests for post management routes.", + "id": "tests_test_posts_rationale_1" + }, + { + "label": "Posts endpoint returns rows sorted by Post # (building_number) ascending. T", + "file_type": "rationale", + "source_file": "backend/tests/test_posts.py", + "source_location": "L115", + "community": 6, + "norm_label": "posts endpoint returns rows sorted by post # (building_number) ascending. t", + "id": "tests_test_posts_rationale_115" + }, + { + "label": "test_post_suggestions.py", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1", + "community": 20, + "norm_label": "test_post_suggestions.py", + "id": "backend_tests_test_post_suggestions_py" + }, + { + "label": "_make_session()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L140", + "community": 54, + "norm_label": "_make_session()", + "id": "tests_test_post_suggestions_make_session" + }, + { + "label": "_preview()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L155", + "community": 6, + "norm_label": "_preview()", + "id": "tests_test_post_suggestions_preview" + }, + { + "label": "test_preview_raises_400_on_completed_siege()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L195", + "community": 20, + "norm_label": "test_preview_raises_400_on_completed_siege()", + "id": "tests_test_post_suggestions_test_preview_raises_400_on_completed_siege" + }, + { + "label": "test_preview_single_post_single_member_match()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L209", + "community": 6, + "norm_label": "test_preview_single_post_single_member_match()", + "id": "tests_test_post_suggestions_test_preview_single_post_single_member_match" + }, + { + "label": "test_preview_no_match_produces_skip_reason_no_match()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L237", + "community": 6, + "norm_label": "test_preview_no_match_produces_skip_reason_no_match()", + "id": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match" + }, + { + "label": "test_preview_reserve_position_produces_skip_reason_reserve()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L263", + "community": 6, + "norm_label": "test_preview_reserve_position_produces_skip_reason_reserve()", + "id": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve" + }, + { + "label": "test_preview_disabled_position_produces_skip_reason_disabled()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L282", + "community": 6, + "norm_label": "test_preview_disabled_position_produces_skip_reason_disabled()", + "id": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled" + }, + { + "label": "test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L306", + "community": 6, + "norm_label": "test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions()", + "id": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions" + }, + { + "label": "test_preview_post_with_conditions_but_no_matching_member_still_no_match()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L332", + "community": 6, + "norm_label": "test_preview_post_with_conditions_but_no_matching_member_still_no_match()", + "id": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match" + }, + { + "label": "test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L356", + "community": 6, + "norm_label": "test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview()", + "id": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview" + }, + { + "label": "test_preview_higher_priority_post_gets_member_first()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L400", + "community": 6, + "norm_label": "test_preview_higher_priority_post_gets_member_first()", + "id": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first" + }, + { + "label": "test_preview_second_post_prefers_different_condition()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L444", + "community": 6, + "norm_label": "test_preview_second_post_prefers_different_condition()", + "id": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition" + }, + { + "label": "test_preview_prefers_less_loaded_member()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L478", + "community": 6, + "norm_label": "test_preview_prefers_less_loaded_member()", + "id": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member" + }, + { + "label": "test_preview_name_tiebreak_picks_alphabetically_lower()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L506", + "community": 6, + "norm_label": "test_preview_name_tiebreak_picks_alphabetically_lower()", + "id": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower" + }, + { + "label": "test_preview_duplicate_penalty_beats_assignment_count()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L527", + "community": 6, + "norm_label": "test_preview_duplicate_penalty_beats_assignment_count()", + "id": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count" + }, + { + "label": "test_preview_determinism_same_output_on_repeat()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L564", + "community": 6, + "norm_label": "test_preview_determinism_same_output_on_repeat()", + "id": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat" + }, + { + "label": "test_preview_current_member_preferred_when_equally_qualified()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L591", + "community": 6, + "norm_label": "test_preview_current_member_preferred_when_equally_qualified()", + "id": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified" + }, + { + "label": "test_preview_lowest_condition_id_picked_as_tiebreak()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L660", + "community": 6, + "norm_label": "test_preview_lowest_condition_id_picked_as_tiebreak()", + "id": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak" + }, + { + "label": "test_preview_suboptimality_invariants_hold()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L685", + "community": 6, + "norm_label": "test_preview_suboptimality_invariants_hold()", + "id": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold" + }, + { + "label": "test_preview_matches_current_true_when_same_assignment()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L763", + "community": 6, + "norm_label": "test_preview_matches_current_true_when_same_assignment()", + "id": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment" + }, + { + "label": "test_preview_matches_current_false_for_null_suggestion()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L783", + "community": 6, + "norm_label": "test_preview_matches_current_false_for_null_suggestion()", + "id": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion" + }, + { + "label": "test_preview_empty_siege_returns_empty_assignments()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L808", + "community": 20, + "norm_label": "test_preview_empty_siege_returns_empty_assignments()", + "id": "tests_test_post_suggestions_test_preview_empty_siege_returns_empty_assignments" + }, + { + "label": "test_preview_no_members_all_skip_no_match()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L816", + "community": 6, + "norm_label": "test_preview_no_members_all_skip_no_match()", + "id": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match" + }, + { + "label": "_apply()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L883", + "community": 20, + "norm_label": "_apply()", + "id": "tests_test_post_suggestions_apply" + }, + { + "label": "_preview_data()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L926", + "community": 20, + "norm_label": "_preview_data()", + "id": "tests_test_post_suggestions_preview_data" + }, + { + "label": "_entry_dict()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L931", + "community": 20, + "norm_label": "_entry_dict()", + "id": "tests_test_post_suggestions_entry_dict" + }, + { + "label": "test_apply_expired_preview_raises_409()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L955", + "community": 20, + "norm_label": "test_apply_expired_preview_raises_409()", + "id": "tests_test_post_suggestions_test_apply_expired_preview_raises_409" + }, + { + "label": "test_apply_missing_preview_raises_409()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L969", + "community": 20, + "norm_label": "test_apply_missing_preview_raises_409()", + "id": "tests_test_post_suggestions_test_apply_missing_preview_raises_409" + }, + { + "label": "test_apply_empty_position_ids_is_noop()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L978", + "community": 20, + "norm_label": "test_apply_empty_position_ids_is_noop()", + "id": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop" + }, + { + "label": "test_apply_unknown_position_ids_silently_ignored()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L994", + "community": 20, + "norm_label": "test_apply_unknown_position_ids_silently_ignored()", + "id": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored" + }, + { + "label": "test_apply_null_member_entries_are_skipped()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1011", + "community": 20, + "norm_label": "test_apply_null_member_entries_are_skipped()", + "id": "tests_test_post_suggestions_test_apply_null_member_entries_are_skipped" + }, + { + "label": "test_apply_subset_only_writes_checked_positions()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1025", + "community": 20, + "norm_label": "test_apply_subset_only_writes_checked_positions()", + "id": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions" + }, + { + "label": "test_apply_stale_position_disabled_returns_409()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1054", + "community": 20, + "norm_label": "test_apply_stale_position_disabled_returns_409()", + "id": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409" + }, + { + "label": "test_apply_stale_position_reserve_returns_409()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1072", + "community": 20, + "norm_label": "test_apply_stale_position_reserve_returns_409()", + "id": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409" + }, + { + "label": "test_apply_stale_member_inactive_returns_409()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1090", + "community": 20, + "norm_label": "test_apply_stale_member_inactive_returns_409()", + "id": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409" + }, + { + "label": "test_apply_member_changed_returns_409()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1108", + "community": 20, + "norm_label": "test_apply_member_changed_returns_409()", + "id": "tests_test_post_suggestions_test_apply_member_changed_returns_409" + }, + { + "label": "test_apply_multiple_stale_all_surfaced_in_single_409()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1127", + "community": 20, + "norm_label": "test_apply_multiple_stale_all_surfaced_in_single_409()", + "id": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409" + }, + { + "label": "test_apply_completed_siege_raises_400()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1157", + "community": 20, + "norm_label": "test_apply_completed_siege_raises_400()", + "id": "tests_test_post_suggestions_test_apply_completed_siege_raises_400" + }, + { + "label": "test_preview_skips_post_when_only_candidate_has_used_condition()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1182", + "community": 6, + "norm_label": "test_preview_skips_post_when_only_candidate_has_used_condition()", + "id": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition" + }, + { + "label": "Unit tests for the Suggest Post Assignments service. All tests use SimpleNamesp", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1", + "community": 20, + "norm_label": "unit tests for the suggest post assignments service. all tests use simplenamesp", + "id": "tests_test_post_suggestions_rationale_1" + }, + { + "label": "Return a minimal AsyncSession mock that scalar_one_or_none returns siege.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L141", + "community": 54, + "norm_label": "return a minimal asyncsession mock that scalar_one_or_none returns siege.", + "id": "tests_test_post_suggestions_rationale_141" + }, + { + "label": "Invoke preview_post_suggestions with a mocked session.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L156", + "community": 6, + "norm_label": "invoke preview_post_suggestions with a mocked session.", + "id": "tests_test_post_suggestions_rationale_156" + }, + { + "label": "A completed siege raises 400 so planners cannot preview.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L196", + "community": 20, + "norm_label": "a completed siege raises 400 so planners cannot preview.", + "id": "tests_test_post_suggestions_rationale_196" + }, + { + "label": "AC: single post with one matching member \u2192 suggestion targets that member.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L210", + "community": 6, + "norm_label": "ac: single post with one matching member \u2192 suggestion targets that member.", + "id": "tests_test_post_suggestions_rationale_210" + }, + { + "label": "AC #6: post with no matching member \u2192 skip_reason='no_match'.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L238", + "community": 6, + "norm_label": "ac #6: post with no matching member \u2192 skip_reason='no_match'.", + "id": "tests_test_post_suggestions_rationale_238" + }, + { + "label": "Charge #1: is_reserve=True on the position \u2192 skip_reason='reserve'.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L264", + "community": 6, + "norm_label": "charge #1: is_reserve=true on the position \u2192 skip_reason='reserve'.", + "id": "tests_test_post_suggestions_rationale_264" + }, + { + "label": "Charge #1: is_disabled=True on the position \u2192 skip_reason='disabled'.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L283", + "community": 6, + "norm_label": "charge #1: is_disabled=true on the position \u2192 skip_reason='disabled'.", + "id": "tests_test_post_suggestions_rationale_283" + }, + { + "label": "Issue #366: post with empty active_conditions \u2192 skip_reason='no_conditions'.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L307", + "community": 6, + "norm_label": "issue #366: post with empty active_conditions \u2192 skip_reason='no_conditions'.", + "id": "tests_test_post_suggestions_rationale_307" + }, + { + "label": "Issue #366: no_match is unchanged when conditions exist but no member qualifies.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L333", + "community": 6, + "norm_label": "issue #366: no_match is unchanged when conditions exist but no member qualifies.", + "id": "tests_test_post_suggestions_rationale_333" + }, + { + "label": "Issue #366: all three outcomes coexist without conflation. One post has no", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L357", + "community": 6, + "norm_label": "issue #366: all three outcomes coexist without conflation. one post has no", + "id": "tests_test_post_suggestions_rationale_357" + }, + { + "label": "AC #3: two posts compete for the same member. The higher-priority post is p", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L401", + "community": 6, + "norm_label": "ac #3: two posts compete for the same member. the higher-priority post is p", + "id": "tests_test_post_suggestions_rationale_401" + }, + { + "label": "AC #4: member can be assigned to two posts; second prefers fresh cond.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L445", + "community": 6, + "norm_label": "ac #4: member can be assigned to two posts; second prefers fresh cond.", + "id": "tests_test_post_suggestions_rationale_445" + }, + { + "label": "AC #5: member with fewer assignments wins over heavily loaded member.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L479", + "community": 6, + "norm_label": "ac #5: member with fewer assignments wins over heavily loaded member.", + "id": "tests_test_post_suggestions_rationale_479" + }, + { + "label": "Charge #8: on equal penalty + count, member with lower name wins.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L507", + "community": 6, + "norm_label": "charge #8: on equal penalty + count, member with lower name wins.", + "id": "tests_test_post_suggestions_rationale_507" + }, + { + "label": "Charge #8: member with duplicate-condition penalty loses to member with 3 ex", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L528", + "community": 6, + "norm_label": "charge #8: member with duplicate-condition penalty loses to member with 3 ex", + "id": "tests_test_post_suggestions_rationale_528" + }, + { + "label": "Charge #2: two runs with identical input produce byte-identical output.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L565", + "community": 6, + "norm_label": "charge #2: two runs with identical input produce byte-identical output.", + "id": "tests_test_post_suggestions_rationale_565" + }, + { + "label": "Regression test for #360: bistable flip-flop. Setup: - 1 post, conditio", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L592", + "community": 6, + "norm_label": "regression test for #360: bistable flip-flop. setup: - 1 post, conditio", + "id": "tests_test_post_suggestions_rationale_592" + }, + { + "label": "Two matching conditions, neither used \u2192 lowest id is picked.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L661", + "community": 6, + "norm_label": "two matching conditions, neither used \u2192 lowest id is picked.", + "id": "tests_test_post_suggestions_rationale_661" + }, + { + "label": "Charge #14: greedy invariants hold even when a condition is shared across posts.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L686", + "community": 6, + "norm_label": "charge #14: greedy invariants hold even when a condition is shared across posts.", + "id": "tests_test_post_suggestions_rationale_686" + }, + { + "label": "matches_current=True when the suggestion equals the existing assignment.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L764", + "community": 6, + "norm_label": "matches_current=true when the suggestion equals the existing assignment.", + "id": "tests_test_post_suggestions_rationale_764" + }, + { + "label": "matches_current is always False when suggested_member_id is None.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L784", + "community": 6, + "norm_label": "matches_current is always false when suggested_member_id is none.", + "id": "tests_test_post_suggestions_rationale_784" + }, + { + "label": "Charge #9: siege with no posts \u2192 preview returns empty assignments list.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L809", + "community": 20, + "norm_label": "charge #9: siege with no posts \u2192 preview returns empty assignments list.", + "id": "tests_test_post_suggestions_rationale_809" + }, + { + "label": "Charge #9: posts exist but no siege members \u2192 all skip with no_match.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L817", + "community": 6, + "norm_label": "charge #9: posts exist but no siege members \u2192 all skip with no_match.", + "id": "tests_test_post_suggestions_rationale_817" + }, + { + "label": "HTTP test client bound to the FastAPI app.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L839", + "community": 11, + "norm_label": "http test client bound to the fastapi app.", + "id": "tests_test_post_suggestions_rationale_839" + }, + { + "label": "POST /api/sieges/1/post-suggestions returns 200 with preview payload.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L845", + "community": 11, + "norm_label": "post /api/sieges/1/post-suggestions returns 200 with preview payload.", + "id": "tests_test_post_suggestions_rationale_845" + }, + { + "label": "POST /api/sieges/1/post-suggestions/apply returns 200 with applied_count.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L861", + "community": 11, + "norm_label": "post /api/sieges/1/post-suggestions/apply returns 200 with applied_count.", + "id": "tests_test_post_suggestions_rationale_861" + }, + { + "label": "Invoke apply_post_suggestions with a fully mocked session.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L889", + "community": 20, + "norm_label": "invoke apply_post_suggestions with a fully mocked session.", + "id": "tests_test_post_suggestions_rationale_889" + }, + { + "label": "Build the preview dict stored in siege.post_suggest_preview.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L927", + "community": 20, + "norm_label": "build the preview dict stored in siege.post_suggest_preview.", + "id": "tests_test_post_suggestions_rationale_927" + }, + { + "label": "Apply with expired TTL raises 409 with the standard message.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L956", + "community": 20, + "norm_label": "apply with expired ttl raises 409 with the standard message.", + "id": "tests_test_post_suggestions_rationale_956" + }, + { + "label": "Apply with no preview at all raises 409.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L970", + "community": 20, + "norm_label": "apply with no preview at all raises 409.", + "id": "tests_test_post_suggestions_rationale_970" + }, + { + "label": "Charge #9: apply_position_ids=[] \u2192 0 writes, success.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L979", + "community": 20, + "norm_label": "charge #9: apply_position_ids=[] \u2192 0 writes, success.", + "id": "tests_test_post_suggestions_rationale_979" + }, + { + "label": "Charge #9: position_ids not in the preview are silently ignored.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L995", + "community": 20, + "norm_label": "charge #9: position_ids not in the preview are silently ignored.", + "id": "tests_test_post_suggestions_rationale_995" + }, + { + "label": "Null suggested_member_id entries are skipped; no error raised.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1012", + "community": 20, + "norm_label": "null suggested_member_id entries are skipped; no error raised.", + "id": "tests_test_post_suggestions_rationale_1012" + }, + { + "label": "Apply with a subset of position_ids \u2192 only those positions written.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1026", + "community": 32, + "norm_label": "apply with a subset of position_ids \u2192 only those positions written.", + "id": "tests_test_post_suggestions_rationale_1026" + }, + { + "label": "Position disabled since preview \u2192 409 with reason position_disabled.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1055", + "community": 20, + "norm_label": "position disabled since preview \u2192 409 with reason position_disabled.", + "id": "tests_test_post_suggestions_rationale_1055" + }, + { + "label": "Position set to reserve since preview \u2192 409 with reason position_reserve.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1073", + "community": 20, + "norm_label": "position set to reserve since preview \u2192 409 with reason position_reserve.", + "id": "tests_test_post_suggestions_rationale_1073" + }, + { + "label": "Member became inactive since preview \u2192 409 with reason member_inactive.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1091", + "community": 20, + "norm_label": "member became inactive since preview \u2192 409 with reason member_inactive.", + "id": "tests_test_post_suggestions_rationale_1091" + }, + { + "label": "Charge #15: another planner assigned a different member \u2192 reason member_changed.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1109", + "community": 20, + "norm_label": "charge #15: another planner assigned a different member \u2192 reason member_changed.", + "id": "tests_test_post_suggestions_rationale_1109" + }, + { + "label": "Multiple stale entries \u2192 all returned in a single 409 (one round-trip).", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1128", + "community": 20, + "norm_label": "multiple stale entries \u2192 all returned in a single 409 (one round-trip).", + "id": "tests_test_post_suggestions_rationale_1128" + }, + { + "label": "Apply on a completed siege raises 400 before checking preview.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1158", + "community": 20, + "norm_label": "apply on a completed siege raises 400 before checking preview.", + "id": "tests_test_post_suggestions_rationale_1158" + }, + { + "label": "Regression for #381. Setup: one member matches a condition that is active o", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1183", + "community": 6, + "norm_label": "regression for #381. setup: one member matches a condition that is active o", + "id": "tests_test_post_suggestions_rationale_1183" + }, + { + "label": "test_post_suggestions_integration.py", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L1", + "community": 32, + "norm_label": "test_post_suggestions_integration.py", + "id": "backend_tests_test_post_suggestions_integration_py" + }, + { + "label": "engine()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L60", + "community": 32, + "norm_label": "engine()", + "id": "tests_test_post_suggestions_integration_engine" + }, + { + "label": "session_factory()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L79", + "community": 32, + "norm_label": "session_factory()", + "id": "tests_test_post_suggestions_integration_session_factory" + }, + { + "label": "test_preview_loads_m2m_relations_without_greenlet_error()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L190", + "community": 32, + "norm_label": "test_preview_loads_m2m_relations_without_greenlet_error()", + "id": "tests_test_post_suggestions_integration_test_preview_loads_m2m_relations_without_greenlet_error" + }, + { + "label": "test_preview_overwrite_stores_second_preview_in_db()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L215", + "community": 32, + "norm_label": "test_preview_overwrite_stores_second_preview_in_db()", + "id": "tests_test_post_suggestions_integration_test_preview_overwrite_stores_second_preview_in_db" + }, + { + "label": "test_apply_persists_matched_condition_id_to_db()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L254", + "community": 32, + "norm_label": "test_apply_persists_matched_condition_id_to_db()", + "id": "tests_test_post_suggestions_integration_test_apply_persists_matched_condition_id_to_db" + }, + { + "label": "test_apply_subset_leaves_unselected_positions_unchanged()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L283", + "community": 32, + "norm_label": "test_apply_subset_leaves_unselected_positions_unchanged()", + "id": "tests_test_post_suggestions_integration_test_apply_subset_leaves_unselected_positions_unchanged" + }, + { + "label": "test_member_changed_stale_reason_on_concurrent_apply()", + "file_type": "code", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L313", + "community": 32, + "norm_label": "test_member_changed_stale_reason_on_concurrent_apply()", + "id": "tests_test_post_suggestions_integration_test_member_changed_stale_reason_on_concurrent_apply" + }, + { + "label": "Integration tests for the Suggest Post Assignments feature. These tests use a r", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L1", + "community": 32, + "norm_label": "integration tests for the suggest post assignments feature. these tests use a r", + "id": "tests_test_post_suggestions_integration_rationale_1" + }, + { + "label": "Enable SQLite foreign key enforcement (no-op on PostgreSQL).", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L53", + "community": 30, + "norm_label": "enable sqlite foreign key enforcement (no-op on postgresql).", + "id": "tests_test_post_suggestions_integration_rationale_53" + }, + { + "label": "Create an async engine against an in-memory SQLite DB.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L61", + "community": 32, + "norm_label": "create an async engine against an in-memory sqlite db.", + "id": "tests_test_post_suggestions_integration_rationale_61" + }, + { + "label": "Yield a single AsyncSession per test.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L72", + "community": 5, + "norm_label": "yield a single asyncsession per test.", + "id": "tests_test_post_suggestions_integration_rationale_72" + }, + { + "label": "Yield a session factory for tests that need multiple sessions.", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L80", + "community": 32, + "norm_label": "yield a session factory for tests that need multiple sessions.", + "id": "tests_test_post_suggestions_integration_rationale_80" + }, + { + "label": "Seed a siege with 2 posts, 3 members, M2M preferences and conditions. Retur", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L90", + "community": 32, + "norm_label": "seed a siege with 2 posts, 3 members, m2m preferences and conditions. retur", + "id": "tests_test_post_suggestions_integration_rationale_90" + }, + { + "label": "Charge #12: selectinload chain works against real DB. Verifies that no Miss", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L191", + "community": 32, + "norm_label": "charge #12: selectinload chain works against real db. verifies that no miss", + "id": "tests_test_post_suggestions_integration_rationale_191" + }, + { + "label": "Second preview within TTL overwrites first in the DB JSON column. Asserts b", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L216", + "community": 32, + "norm_label": "second preview within ttl overwrites first in the db json column. asserts b", + "id": "tests_test_post_suggestions_integration_rationale_216" + }, + { + "label": "Charge #17: apply \u2192 re-read position from DB \u2192 matched_condition_id set. Wi", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L255", + "community": 32, + "norm_label": "charge #17: apply \u2192 re-read position from db \u2192 matched_condition_id set. wi", + "id": "tests_test_post_suggestions_integration_rationale_255" + }, + { + "label": "Charge #22: member_changed reason fires when position written between preview an", + "file_type": "rationale", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L314", + "community": 32, + "norm_label": "charge #22: member_changed reason fires when position written between preview an", + "id": "tests_test_post_suggestions_integration_rationale_314" + }, + { + "label": "test_reference.py", + "file_type": "code", + "source_file": "backend/tests/test_reference.py", + "source_location": "L1", + "community": 65, + "norm_label": "test_reference.py", + "id": "backend_tests_test_reference_py" + }, + { + "label": "_make_post_condition()", + "file_type": "code", + "source_file": "backend/tests/test_reference.py", + "source_location": "L13", + "community": 65, + "norm_label": "_make_post_condition()", + "id": "tests_test_reference_make_post_condition" + }, + { + "label": "test_get_post_conditions_returns_list()", + "file_type": "code", + "source_file": "backend/tests/test_reference.py", + "source_location": "L28", + "community": 65, + "norm_label": "test_get_post_conditions_returns_list()", + "id": "tests_test_reference_test_get_post_conditions_returns_list" + }, + { + "label": "test_get_building_types_returns_list()", + "file_type": "code", + "source_file": "backend/tests/test_reference.py", + "source_location": "L54", + "community": 65, + "norm_label": "test_get_building_types_returns_list()", + "id": "tests_test_reference_test_get_building_types_returns_list" + }, + { + "label": "test_get_member_roles_returns_four_roles()", + "file_type": "code", + "source_file": "backend/tests/test_reference.py", + "source_location": "L90", + "community": 65, + "norm_label": "test_get_member_roles_returns_four_roles()", + "id": "tests_test_reference_test_get_member_roles_returns_four_roles" + }, + { + "label": "Endpoint tests for /api reference data endpoints.", + "file_type": "rationale", + "source_file": "backend/tests/test_reference.py", + "source_location": "L1", + "community": 65, + "norm_label": "endpoint tests for /api reference data endpoints.", + "id": "tests_test_reference_rationale_1" + }, + { + "label": "test_schema.py", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L1", + "community": 43, + "norm_label": "test_schema.py", + "id": "backend_tests_test_schema_py" + }, + { + "label": "_enable_sqlite_fk()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L21", + "community": 30, + "norm_label": "_enable_sqlite_fk()", + "id": "tests_test_schema_enable_sqlite_fk" + }, + { + "label": "db_session()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L29", + "community": 43, + "norm_label": "db_session()", + "id": "tests_test_schema_db_session" + }, + { + "label": "test_member_name_unique()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L50", + "community": 43, + "norm_label": "test_member_name_unique()", + "id": "tests_test_schema_test_member_name_unique" + }, + { + "label": "test_position_reserve_and_member_constraint_defined()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L65", + "community": 43, + "norm_label": "test_position_reserve_and_member_constraint_defined()", + "id": "tests_test_schema_test_position_reserve_and_member_constraint_defined" + }, + { + "label": "test_building_group_slot_count_bounds()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L78", + "community": 43, + "norm_label": "test_building_group_slot_count_bounds()", + "id": "tests_test_schema_test_building_group_slot_count_bounds" + }, + { + "label": "test_post_condition_count()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L89", + "community": 43, + "norm_label": "test_post_condition_count()", + "id": "tests_test_schema_test_post_condition_count" + }, + { + "label": "test_building_type_config_count()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L104", + "community": 43, + "norm_label": "test_building_type_config_count()", + "id": "tests_test_schema_test_building_type_config_count" + }, + { + "label": "test_siege_member_pk()", + "file_type": "code", + "source_file": "backend/tests/test_schema.py", + "source_location": "L119", + "community": 43, + "norm_label": "test_siege_member_pk()", + "id": "tests_test_schema_test_siege_member_pk" + }, + { + "label": "Schema constraint and seed data tests using in-memory SQLite.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L1", + "community": 43, + "norm_label": "schema constraint and seed data tests using in-memory sqlite.", + "id": "tests_test_schema_rationale_1" + }, + { + "label": "Enable SQLite foreign key enforcement.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L22", + "community": 30, + "norm_label": "enable sqlite foreign key enforcement.", + "id": "tests_test_schema_rationale_22" + }, + { + "label": "Inserting two members with the same name must raise IntegrityError.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L51", + "community": 43, + "norm_label": "inserting two members with the same name must raise integrityerror.", + "id": "tests_test_schema_rationale_51" + }, + { + "label": "The check constraint preventing is_reserve=True with a member_id is defined.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L66", + "community": 43, + "norm_label": "the check constraint preventing is_reserve=true with a member_id is defined.", + "id": "tests_test_schema_rationale_66" + }, + { + "label": "slot_count check constraints (1\u20133) are declared on the table.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L79", + "community": 43, + "norm_label": "slot_count check constraints (1\u20133) are declared on the table.", + "id": "tests_test_schema_rationale_79" + }, + { + "label": "seed_post_conditions populates exactly 36 rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L90", + "community": 43, + "norm_label": "seed_post_conditions populates exactly 36 rows.", + "id": "tests_test_schema_rationale_90" + }, + { + "label": "seed_building_type_config populates exactly 5 rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L105", + "community": 43, + "norm_label": "seed_building_type_config populates exactly 5 rows.", + "id": "tests_test_schema_rationale_105" + }, + { + "label": "Inserting a duplicate (siege_id, member_id) pair raises IntegrityError.", + "file_type": "rationale", + "source_file": "backend/tests/test_schema.py", + "source_location": "L120", + "community": 43, + "norm_label": "inserting a duplicate (siege_id, member_id) pair raises integrityerror.", + "id": "tests_test_schema_rationale_120" + }, + { + "label": "test_seed_canonical.py", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L1", + "community": 5, + "norm_label": "test_seed_canonical.py", + "id": "backend_tests_test_seed_canonical_py" + }, + { + "label": "_run_canonical_seed()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L57", + "community": 5, + "norm_label": "_run_canonical_seed()", + "id": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "label": "TestCanonicalSeedPostConditions", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L71", + "community": 16, + "norm_label": "testcanonicalseedpostconditions", + "id": "tests_test_seed_canonical_testcanonicalseedpostconditions" + }, + { + "label": "test_seeds_36_post_conditions()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L75", + "community": 5, + "norm_label": "test_seeds_36_post_conditions()", + "id": "tests_test_seed_canonical_test_seeds_36_post_conditions" + }, + { + "label": "test_idempotent_post_conditions()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L84", + "community": 5, + "norm_label": "test_idempotent_post_conditions()", + "id": "tests_test_seed_canonical_test_idempotent_post_conditions" + }, + { + "label": "TestCanonicalSeedBuildingTypeConfig", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L94", + "community": 16, + "norm_label": "testcanonicalseedbuildingtypeconfig", + "id": "tests_test_seed_canonical_testcanonicalseedbuildingtypeconfig" + }, + { + "label": "test_seeds_building_type_configs()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L98", + "community": 5, + "norm_label": "test_seeds_building_type_configs()", + "id": "tests_test_seed_canonical_test_seeds_building_type_configs" + }, + { + "label": "test_idempotent_building_type_config()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L107", + "community": 5, + "norm_label": "test_idempotent_building_type_config()", + "id": "tests_test_seed_canonical_test_idempotent_building_type_config" + }, + { + "label": "TestCanonicalSeedPostPriorityConfig", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L120", + "community": 16, + "norm_label": "testcanonicalseedpostpriorityconfig", + "id": "tests_test_seed_canonical_testcanonicalseedpostpriorityconfig" + }, + { + "label": "test_seeds_18_post_priority_configs()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L128", + "community": 5, + "norm_label": "test_seeds_18_post_priority_configs()", + "id": "tests_test_seed_canonical_test_seeds_18_post_priority_configs" + }, + { + "label": "test_priority_configs_cover_posts_1_through_18()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L137", + "community": 5, + "norm_label": "test_priority_configs_cover_posts_1_through_18()", + "id": "tests_test_seed_canonical_test_priority_configs_cover_posts_1_through_18" + }, + { + "label": "test_priority_configs_default_priority_is_2()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L145", + "community": 5, + "norm_label": "test_priority_configs_default_priority_is_2()", + "id": "tests_test_seed_canonical_test_priority_configs_default_priority_is_2" + }, + { + "label": "test_idempotent_post_priority_config()", + "file_type": "code", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L153", + "community": 5, + "norm_label": "test_idempotent_post_priority_config()", + "id": "tests_test_seed_canonical_test_idempotent_post_priority_config" + }, + { + "label": "Regression tests for scripts/seed.py (the canonical seed entry point). These te", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L1", + "community": 5, + "norm_label": "regression tests for scripts/seed.py (the canonical seed entry point). these te", + "id": "tests_test_seed_canonical_rationale_1" + }, + { + "label": "Run the three seed functions called by scripts/seed.py.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L58", + "community": 5, + "norm_label": "run the three seed functions called by scripts/seed.py.", + "id": "tests_test_seed_canonical_rationale_58" + }, + { + "label": "PostCondition seeding via the canonical script.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L72", + "community": 16, + "norm_label": "postcondition seeding via the canonical script.", + "id": "tests_test_seed_canonical_rationale_72" + }, + { + "label": "Canonical seed must insert all 36 PostCondition rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L76", + "community": 113, + "norm_label": "canonical seed must insert all 36 postcondition rows.", + "id": "tests_test_seed_canonical_rationale_76" + }, + { + "label": "Running twice must not create duplicate PostCondition rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L85", + "community": 114, + "norm_label": "running twice must not create duplicate postcondition rows.", + "id": "tests_test_seed_canonical_rationale_85" + }, + { + "label": "BuildingTypeConfig seeding via the canonical script.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L95", + "community": 16, + "norm_label": "buildingtypeconfig seeding via the canonical script.", + "id": "tests_test_seed_canonical_rationale_95" + }, + { + "label": "Canonical seed must insert BuildingTypeConfig rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L99", + "community": 115, + "norm_label": "canonical seed must insert buildingtypeconfig rows.", + "id": "tests_test_seed_canonical_rationale_99" + }, + { + "label": "Running twice must not create duplicate BuildingTypeConfig rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L108", + "community": 116, + "norm_label": "running twice must not create duplicate buildingtypeconfig rows.", + "id": "tests_test_seed_canonical_rationale_108" + }, + { + "label": "PostPriorityConfig seeding via the canonical script. This is the seed that", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L121", + "community": 16, + "norm_label": "postpriorityconfig seeding via the canonical script. this is the seed that", + "id": "tests_test_seed_canonical_rationale_121" + }, + { + "label": "Canonical seed must insert all 18 PostPriorityConfig rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L129", + "community": 117, + "norm_label": "canonical seed must insert all 18 postpriorityconfig rows.", + "id": "tests_test_seed_canonical_rationale_129" + }, + { + "label": "PostPriorityConfig rows must cover post numbers 1 through 18.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L138", + "community": 118, + "norm_label": "postpriorityconfig rows must cover post numbers 1 through 18.", + "id": "tests_test_seed_canonical_rationale_138" + }, + { + "label": "All PostPriorityConfig rows must have default priority of 2.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L146", + "community": 119, + "norm_label": "all postpriorityconfig rows must have default priority of 2.", + "id": "tests_test_seed_canonical_rationale_146" + }, + { + "label": "Running twice must not create duplicate PostPriorityConfig rows.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L154", + "community": 120, + "norm_label": "running twice must not create duplicate postpriorityconfig rows.", + "id": "tests_test_seed_canonical_rationale_154" + }, + { + "label": "test_seed_demo.py", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L1", + "community": 5, + "norm_label": "test_seed_demo.py", + "id": "backend_tests_test_seed_demo_py" + }, + { + "label": "session()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L41", + "community": 5, + "norm_label": "session()", + "id": "tests_test_seed_demo_session" + }, + { + "label": "_run_seed()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L59", + "community": 5, + "norm_label": "_run_seed()", + "id": "tests_test_seed_demo_run_seed" + }, + { + "label": "TestSeedDemoMembers", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L91", + "community": 16, + "norm_label": "testseeddemomembers", + "id": "tests_test_seed_demo_testseeddemomembers" + }, + { + "label": "test_creates_25_members()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L95", + "community": 5, + "norm_label": "test_creates_25_members()", + "id": "tests_test_seed_demo_test_creates_25_members" + }, + { + "label": "test_members_have_demo_names()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L101", + "community": 5, + "norm_label": "test_members_have_demo_names()", + "id": "tests_test_seed_demo_test_members_have_demo_names" + }, + { + "label": "test_idempotent_member_creation()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L109", + "community": 5, + "norm_label": "test_idempotent_member_creation()", + "id": "tests_test_seed_demo_test_idempotent_member_creation" + }, + { + "label": "TestSeedDemoSiege", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L117", + "community": 16, + "norm_label": "testseeddemosiege", + "id": "tests_test_seed_demo_testseeddemosiege" + }, + { + "label": "test_creates_one_siege()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L121", + "community": 5, + "norm_label": "test_creates_one_siege()", + "id": "tests_test_seed_demo_test_creates_one_siege" + }, + { + "label": "test_siege_has_active_status()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L127", + "community": 5, + "norm_label": "test_siege_has_active_status()", + "id": "tests_test_seed_demo_test_siege_has_active_status" + }, + { + "label": "test_idempotent_siege_creation()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L133", + "community": 5, + "norm_label": "test_idempotent_siege_creation()", + "id": "tests_test_seed_demo_test_idempotent_siege_creation" + }, + { + "label": "TestSeedDemoBuildingsAndPositions", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L141", + "community": 16, + "norm_label": "testseeddemobuildingsandpositions", + "id": "tests_test_seed_demo_testseeddemobuildingsandpositions" + }, + { + "label": "test_creates_buildings()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L145", + "community": 5, + "norm_label": "test_creates_buildings()", + "id": "tests_test_seed_demo_test_creates_buildings" + }, + { + "label": "test_creates_positions()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L151", + "community": 5, + "norm_label": "test_creates_positions()", + "id": "tests_test_seed_demo_test_creates_positions" + }, + { + "label": "test_some_positions_have_members()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L157", + "community": 5, + "norm_label": "test_some_positions_have_members()", + "id": "tests_test_seed_demo_test_some_positions_have_members" + }, + { + "label": "test_idempotent_position_creation()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L168", + "community": 5, + "norm_label": "test_idempotent_position_creation()", + "id": "tests_test_seed_demo_test_idempotent_position_creation" + }, + { + "label": "TestSeedDemosiegeMembers", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L181", + "community": 16, + "norm_label": "testseeddemosiegemembers", + "id": "tests_test_seed_demo_testseeddemosiegemembers" + }, + { + "label": "test_enrolls_all_members()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L185", + "community": 5, + "norm_label": "test_enrolls_all_members()", + "id": "tests_test_seed_demo_test_enrolls_all_members" + }, + { + "label": "test_members_have_attack_days()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L191", + "community": 5, + "norm_label": "test_members_have_attack_days()", + "id": "tests_test_seed_demo_test_members_have_attack_days" + }, + { + "label": "test_idempotent_siege_member_enrollment()", + "file_type": "code", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L199", + "community": 5, + "norm_label": "test_idempotent_siege_member_enrollment()", + "id": "tests_test_seed_demo_test_idempotent_siege_member_enrollment" + }, + { + "label": "Smoke tests for scripts/seed_demo.py. These tests run against an in-memory SQLi", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L1", + "community": 5, + "norm_label": "smoke tests for scripts/seed_demo.py. these tests run against an in-memory sqli", + "id": "tests_test_seed_demo_rationale_1" + }, + { + "label": "Provide a fresh in-memory SQLite session for each test.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L42", + "community": 5, + "norm_label": "provide a fresh in-memory sqlite session for each test.", + "id": "tests_test_seed_demo_rationale_42" + }, + { + "label": "Run the demo seed functions against the provided session.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L60", + "community": 5, + "norm_label": "run the demo seed functions against the provided session.", + "id": "tests_test_seed_demo_rationale_60" + }, + { + "label": "Demo member creation.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L92", + "community": 16, + "norm_label": "demo member creation.", + "id": "tests_test_seed_demo_rationale_92" + }, + { + "label": "Running twice must not create duplicate members.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L110", + "community": 121, + "norm_label": "running twice must not create duplicate members.", + "id": "tests_test_seed_demo_rationale_110" + }, + { + "label": "Running twice must not create a second siege.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L134", + "community": 122, + "norm_label": "running twice must not create a second siege.", + "id": "tests_test_seed_demo_rationale_134" + }, + { + "label": "Buildings and positions.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L142", + "community": 16, + "norm_label": "buildings and positions.", + "id": "tests_test_seed_demo_rationale_142" + }, + { + "label": "Most positions should be filled with demo members.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L158", + "community": 123, + "norm_label": "most positions should be filled with demo members.", + "id": "tests_test_seed_demo_rationale_158" + }, + { + "label": "Running twice must not double the building/position count.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L169", + "community": 124, + "norm_label": "running twice must not double the building/position count.", + "id": "tests_test_seed_demo_rationale_169" + }, + { + "label": "Siege member enrollments.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L182", + "community": 16, + "norm_label": "siege member enrollments.", + "id": "tests_test_seed_demo_rationale_182" + }, + { + "label": "Running twice must not double the siege_member count.", + "file_type": "rationale", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L200", + "community": 125, + "norm_label": "running twice must not double the siege_member count.", + "id": "tests_test_seed_demo_rationale_200" + }, + { + "label": "test_sieges.py", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L1", + "community": 30, + "norm_label": "test_sieges.py", + "id": "backend_tests_test_sieges_py" + }, + { + "label": "_make_siege()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L22", + "community": 12, + "norm_label": "_make_siege()", + "id": "tests_test_sieges_make_siege" + }, + { + "label": "test_list_sieges_returns_empty_list()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L48", + "community": 30, + "norm_label": "test_list_sieges_returns_empty_list()", + "id": "tests_test_sieges_test_list_sieges_returns_empty_list" + }, + { + "label": "test_create_siege_returns_201()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L64", + "community": 30, + "norm_label": "test_create_siege_returns_201()", + "id": "tests_test_sieges_test_create_siege_returns_201" + }, + { + "label": "test_get_siege_not_found_returns_404()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L94", + "community": 30, + "norm_label": "test_get_siege_not_found_returns_404()", + "id": "tests_test_sieges_test_get_siege_not_found_returns_404" + }, + { + "label": "test_delete_planning_siege_returns_204()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L110", + "community": 30, + "norm_label": "test_delete_planning_siege_returns_204()", + "id": "tests_test_sieges_test_delete_planning_siege_returns_204" + }, + { + "label": "test_delete_active_siege_returns_400()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L125", + "community": 30, + "norm_label": "test_delete_active_siege_returns_400()", + "id": "tests_test_sieges_test_delete_active_siege_returns_400" + }, + { + "label": "_seed_siege()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L168", + "community": 32, + "norm_label": "_seed_siege()", + "id": "tests_test_sieges_seed_siege" + }, + { + "label": "test_compute_scroll_count_sums_theoretical_capacity()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L205", + "community": 30, + "norm_label": "test_compute_scroll_count_sums_theoretical_capacity()", + "id": "tests_test_sieges_test_compute_scroll_count_sums_theoretical_capacity" + }, + { + "label": "test_compute_scroll_count_broken_building_unchanged()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L229", + "community": 30, + "norm_label": "test_compute_scroll_count_broken_building_unchanged()", + "id": "tests_test_sieges_test_compute_scroll_count_broken_building_unchanged" + }, + { + "label": "test_compute_scroll_count_level_change_updates_count()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L262", + "community": 30, + "norm_label": "test_compute_scroll_count_level_change_updates_count()", + "id": "tests_test_sieges_test_compute_scroll_count_level_change_updates_count" + }, + { + "label": "test_compute_scroll_count_post_buildings_contribute_one()", + "file_type": "code", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L292", + "community": 30, + "norm_label": "test_compute_scroll_count_post_buildings_contribute_one()", + "id": "tests_test_sieges_test_compute_scroll_count_post_buildings_contribute_one" + }, + { + "label": "Endpoint tests for /api/sieges \u2014 mocks the service layer directly.", + "file_type": "rationale", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L1", + "community": 60, + "norm_label": "endpoint tests for /api/sieges \u2014 mocks the service layer directly.", + "id": "tests_test_sieges_rationale_1" + }, + { + "label": "Insert a siege with the given buildings and return the siege id. Each dict", + "file_type": "rationale", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L169", + "community": 32, + "norm_label": "insert a siege with the given buildings and return the siege id. each dict", + "id": "tests_test_sieges_rationale_169" + }, + { + "label": "compute_scroll_count returns the sum of _LEVEL_TEAMS capacities for all building", + "file_type": "rationale", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L206", + "community": 30, + "norm_label": "compute_scroll_count returns the sum of _level_teams capacities for all building", + "id": "tests_test_sieges_rationale_206" + }, + { + "label": "Breaking a building must NOT change the scroll count (regression guard for issue", + "file_type": "rationale", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L230", + "community": 30, + "norm_label": "breaking a building must not change the scroll count (regression guard for issue", + "id": "tests_test_sieges_rationale_230" + }, + { + "label": "A level change must update the scroll count. One defense_tower at level 1 (", + "file_type": "rationale", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L263", + "community": 30, + "norm_label": "a level change must update the scroll count. one defense_tower at level 1 (", + "id": "tests_test_sieges_rationale_263" + }, + { + "label": "Post buildings (not in _LEVEL_TEAMS) must contribute 1 position each. One s", + "file_type": "rationale", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L293", + "community": 30, + "norm_label": "post buildings (not in _level_teams) must contribute 1 position each. one s", + "id": "tests_test_sieges_rationale_293" + }, + { + "label": "TestConfigureTelemetryNoop", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L17", + "community": 18, + "norm_label": "testconfiguretelemetrynoop", + "id": "tests_test_telemetry_testconfiguretelemetrynoop" + }, + { + "label": ".test_noop_when_env_var_missing()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L20", + "community": 18, + "norm_label": ".test_noop_when_env_var_missing()", + "id": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_missing" + }, + { + "label": ".test_noop_when_env_var_empty_string()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L42", + "community": 18, + "norm_label": ".test_noop_when_env_var_empty_string()", + "id": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_empty_string" + }, + { + "label": ".test_noop_when_env_var_whitespace_only()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L61", + "community": 18, + "norm_label": ".test_noop_when_env_var_whitespace_only()", + "id": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_whitespace_only" + }, + { + "label": ".test_calls_configure_azure_monitor_when_env_var_set()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L92", + "community": 18, + "norm_label": ".test_calls_configure_azure_monitor_when_env_var_set()", + "id": "tests_test_telemetry_testconfiguretelemetryactive_test_calls_configure_azure_monitor_when_env_var_set" + }, + { + "label": ".test_sdk_exception_does_not_propagate()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L111", + "community": 18, + "norm_label": ".test_sdk_exception_does_not_propagate()", + "id": "tests_test_telemetry_testconfiguretelemetryactive_test_sdk_exception_does_not_propagate" + }, + { + "label": "TestConfigureTelemetryFastAPIInstrumentation", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L130", + "community": 18, + "norm_label": "testconfiguretelemetryfastapiinstrumentation", + "id": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation" + }, + { + "label": ".test_instrument_app_called_when_connection_string_and_service_name_set()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L143", + "community": 18, + "norm_label": ".test_instrument_app_called_when_connection_string_and_service_name_set()", + "id": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_instrument_app_called_when_connection_string_and_service_name_set" + }, + { + "label": ".test_configure_azure_monitor_called_when_both_env_vars_set()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L182", + "community": 18, + "norm_label": ".test_configure_azure_monitor_called_when_both_env_vars_set()", + "id": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_configure_azure_monitor_called_when_both_env_vars_set" + }, + { + "label": ".test_instrument_app_not_called_when_app_is_none()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L218", + "community": 18, + "norm_label": ".test_instrument_app_not_called_when_app_is_none()", + "id": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_instrument_app_not_called_when_app_is_none" + }, + { + "label": "TestConfigureTelemetrySQLAlchemyInstrumentation", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L258", + "community": 18, + "norm_label": "testconfiguretelemetrysqlalchemyinstrumentation", + "id": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation" + }, + { + "label": ".test_sqlalchemy_instrument_called_with_sync_engine()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L273", + "community": 18, + "norm_label": ".test_sqlalchemy_instrument_called_with_sync_engine()", + "id": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_called_with_sync_engine" + }, + { + "label": ".test_sqlalchemy_instrument_not_called_when_engine_is_none()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L315", + "community": 18, + "norm_label": ".test_sqlalchemy_instrument_not_called_when_engine_is_none()", + "id": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_not_called_when_engine_is_none" + }, + { + "label": ".test_sqlalchemy_instrument_not_called_when_telemetry_unconfigured()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L353", + "community": 18, + "norm_label": ".test_sqlalchemy_instrument_not_called_when_telemetry_unconfigured()", + "id": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_not_called_when_telemetry_unconfigured" + }, + { + "label": "TestConfigureTelemetryAsyncPGInstrumentation", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L391", + "community": 18, + "norm_label": "testconfiguretelemetryasyncpginstrumentation", + "id": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation" + }, + { + "label": ".test_asyncpg_instrument_called_when_telemetry_configured()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L405", + "community": 18, + "norm_label": ".test_asyncpg_instrument_called_when_telemetry_configured()", + "id": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation_test_asyncpg_instrument_called_when_telemetry_configured" + }, + { + "label": ".test_asyncpg_instrument_not_called_when_telemetry_unconfigured()", + "file_type": "code", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L443", + "community": 18, + "norm_label": ".test_asyncpg_instrument_not_called_when_telemetry_unconfigured()", + "id": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation_test_asyncpg_instrument_not_called_when_telemetry_unconfigured" + }, + { + "label": "Tests for backend/app/telemetry.py. Verifies: - configure_telemetry() is a no-o", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L1", + "community": 18, + "norm_label": "tests for backend/app/telemetry.py. verifies: - configure_telemetry() is a no-o", + "id": "tests_test_telemetry_rationale_1" + }, + { + "label": "When APPLICATIONINSIGHTS_CONNECTION_STRING is absent, nothing should happen.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L18", + "community": 18, + "norm_label": "when applicationinsights_connection_string is absent, nothing should happen.", + "id": "tests_test_telemetry_rationale_18" + }, + { + "label": "No exception and configure_azure_monitor is never imported or called.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L21", + "community": 18, + "norm_label": "no exception and configure_azure_monitor is never imported or called.", + "id": "tests_test_telemetry_rationale_21" + }, + { + "label": "An explicitly empty string also results in a no-op.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L43", + "community": 18, + "norm_label": "an explicitly empty string also results in a no-op.", + "id": "tests_test_telemetry_rationale_43" + }, + { + "label": "A whitespace-only string is treated the same as empty.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L62", + "community": 18, + "norm_label": "a whitespace-only string is treated the same as empty.", + "id": "tests_test_telemetry_rationale_62" + }, + { + "label": "When env var is set, configure_azure_monitor() must be called.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L82", + "community": 18, + "norm_label": "when env var is set, configure_azure_monitor() must be called.", + "id": "tests_test_telemetry_rationale_82" + }, + { + "label": "configure_azure_monitor() is called exactly once with logger_name='app'.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L93", + "community": 18, + "norm_label": "configure_azure_monitor() is called exactly once with logger_name='app'.", + "id": "tests_test_telemetry_rationale_93" + }, + { + "label": "If configure_azure_monitor raises, the exception is swallowed.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L112", + "community": 18, + "norm_label": "if configure_azure_monitor raises, the exception is swallowed.", + "id": "tests_test_telemetry_rationale_112" + }, + { + "label": "Regression tests: FastAPIInstrumentor.instrument_app() must be called. Issu", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L131", + "community": 18, + "norm_label": "regression tests: fastapiinstrumentor.instrument_app() must be called. issu", + "id": "tests_test_telemetry_rationale_131" + }, + { + "label": "FastAPIInstrumentor.instrument_app() is called with the FastAPI app. Wh", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L144", + "community": 18, + "norm_label": "fastapiinstrumentor.instrument_app() is called with the fastapi app. wh", + "id": "tests_test_telemetry_rationale_144" + }, + { + "label": "configure_azure_monitor() is called when both env vars are present. Reg", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L183", + "community": 18, + "norm_label": "configure_azure_monitor() is called when both env vars are present. reg", + "id": "tests_test_telemetry_rationale_183" + }, + { + "label": "FastAPIInstrumentor.instrument_app() is NOT called when app argument is None.", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L219", + "community": 18, + "norm_label": "fastapiinstrumentor.instrument_app() is not called when app argument is none.", + "id": "tests_test_telemetry_rationale_219" + }, + { + "label": "SQLAlchemyInstrumentor must be called when engine is provided. Issue #257:", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L259", + "community": 18, + "norm_label": "sqlalchemyinstrumentor must be called when engine is provided. issue #257:", + "id": "tests_test_telemetry_rationale_259" + }, + { + "label": "SQLAlchemyInstrumentor().instrument(engine=...) is called with the engin", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L274", + "community": 18, + "norm_label": "sqlalchemyinstrumentor().instrument(engine=...) is called with the engin", + "id": "tests_test_telemetry_rationale_274" + }, + { + "label": "SQLAlchemyInstrumentor().instrument() is NOT called when no engine argum", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L316", + "community": 18, + "norm_label": "sqlalchemyinstrumentor().instrument() is not called when no engine argum", + "id": "tests_test_telemetry_rationale_316" + }, + { + "label": "SQLAlchemyInstrumentor().instrument() is NOT called when APPLICATIONINSI", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L354", + "community": 18, + "norm_label": "sqlalchemyinstrumentor().instrument() is not called when applicationinsi", + "id": "tests_test_telemetry_rationale_354" + }, + { + "label": "AsyncPGInstrumentor must be called whenever telemetry is active. Issue #257", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L392", + "community": 18, + "norm_label": "asyncpginstrumentor must be called whenever telemetry is active. issue #257", + "id": "tests_test_telemetry_rationale_392" + }, + { + "label": "AsyncPGInstrumentor().instrument() is called when telemetry is active, r", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L406", + "community": 18, + "norm_label": "asyncpginstrumentor().instrument() is called when telemetry is active, r", + "id": "tests_test_telemetry_rationale_406" + }, + { + "label": "AsyncPGInstrumentor().instrument() is NOT called when APPLICATIONINSIGHT", + "file_type": "rationale", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L444", + "community": 18, + "norm_label": "asyncpginstrumentor().instrument() is not called when applicationinsight", + "id": "tests_test_telemetry_rationale_444" + }, + { + "label": "test_validation.py", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L1", + "community": 0, + "norm_label": "test_validation.py", + "id": "backend_tests_test_validation_py" + }, + { + "label": "_make_condition()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L126", + "community": 6, + "norm_label": "_make_condition()", + "id": "tests_test_validation_make_condition" + }, + { + "label": "test_validate_endpoint_404()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L148", + "community": 0, + "norm_label": "test_validate_endpoint_404()", + "id": "tests_test_validation_test_validate_endpoint_404" + }, + { + "label": "test_validate_endpoint_returns_result()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L172", + "community": 0, + "norm_label": "test_validate_endpoint_returns_result()", + "id": "tests_test_validation_test_validate_endpoint_returns_result" + }, + { + "label": "test_rule1_inactive_member_error()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L215", + "community": 0, + "norm_label": "test_rule1_inactive_member_error()", + "id": "tests_test_validation_test_rule1_inactive_member_error" + }, + { + "label": "test_rule1_active_member_no_error()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L235", + "community": 0, + "norm_label": "test_rule1_active_member_no_error()", + "id": "tests_test_validation_test_rule1_active_member_no_error" + }, + { + "label": "test_rule2_broken_building_assignment_counts_toward_scroll_limit()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L255", + "community": 0, + "norm_label": "test_rule2_broken_building_assignment_counts_toward_scroll_limit()", + "id": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit" + }, + { + "label": "test_rule2_broken_and_healthy_both_count_toward_scroll_limit()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L293", + "community": 0, + "norm_label": "test_rule2_broken_and_healthy_both_count_toward_scroll_limit()", + "id": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit" + }, + { + "label": "test_rule2_exceeds_scroll_count()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L340", + "community": 0, + "norm_label": "test_rule2_exceeds_scroll_count()", + "id": "tests_test_validation_test_rule2_exceeds_scroll_count" + }, + { + "label": "test_rule2_within_scroll_count()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L364", + "community": 0, + "norm_label": "test_rule2_within_scroll_count()", + "id": "tests_test_validation_test_rule2_within_scroll_count" + }, + { + "label": "test_rule3_valid_building_number()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L406", + "community": 0, + "norm_label": "test_rule3_valid_building_number()", + "id": "tests_test_validation_test_rule3_valid_building_number" + }, + { + "label": "test_rule4_invalid_group_number()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L420", + "community": 0, + "norm_label": "test_rule4_invalid_group_number()", + "id": "tests_test_validation_test_rule4_invalid_group_number" + }, + { + "label": "test_rule4_valid_group_number()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L437", + "community": 0, + "norm_label": "test_rule4_valid_group_number()", + "id": "tests_test_validation_test_rule4_valid_group_number" + }, + { + "label": "test_rule5_position_number_exceeds_slot_count()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L454", + "community": 0, + "norm_label": "test_rule5_position_number_exceeds_slot_count()", + "id": "tests_test_validation_test_rule5_position_number_exceeds_slot_count" + }, + { + "label": "test_rule5_valid_position_number()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L471", + "community": 0, + "norm_label": "test_rule5_valid_position_number()", + "id": "tests_test_validation_test_rule5_valid_position_number" + }, + { + "label": "test_rule6_valid_attack_day()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L501", + "community": 12, + "norm_label": "test_rule6_valid_attack_day()", + "id": "tests_test_validation_test_rule6_valid_attack_day" + }, + { + "label": "test_rule7_post_has_multiple_groups()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L514", + "community": 0, + "norm_label": "test_rule7_post_has_multiple_groups()", + "id": "tests_test_validation_test_rule7_post_has_multiple_groups" + }, + { + "label": "test_rule7_post_has_exactly_one_group()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L536", + "community": 0, + "norm_label": "test_rule7_post_has_exactly_one_group()", + "id": "tests_test_validation_test_rule7_post_has_exactly_one_group" + }, + { + "label": "test_rule8_disabled_with_member()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L552", + "community": 0, + "norm_label": "test_rule8_disabled_with_member()", + "id": "tests_test_validation_test_rule8_disabled_with_member" + }, + { + "label": "test_rule8_reserve_with_member()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L570", + "community": 0, + "norm_label": "test_rule8_reserve_with_member()", + "id": "tests_test_validation_test_rule8_reserve_with_member" + }, + { + "label": "test_rule8_valid_state()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L588", + "community": 0, + "norm_label": "test_rule8_valid_state()", + "id": "tests_test_validation_test_rule8_valid_state" + }, + { + "label": "test_rule9_wrong_building_count()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L606", + "community": 0, + "norm_label": "test_rule9_wrong_building_count()", + "id": "tests_test_validation_test_rule9_wrong_building_count" + }, + { + "label": "test_rule9_correct_building_count()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L618", + "community": 0, + "norm_label": "test_rule9_correct_building_count()", + "id": "tests_test_validation_test_rule9_correct_building_count" + }, + { + "label": "test_rule10_empty_unresolved_slot()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L643", + "community": 0, + "norm_label": "test_rule10_empty_unresolved_slot()", + "id": "tests_test_validation_test_rule10_empty_unresolved_slot" + }, + { + "label": "test_rule10_message_uses_position_name()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L660", + "community": 0, + "norm_label": "test_rule10_message_uses_position_name()", + "id": "tests_test_validation_test_rule10_message_uses_position_name" + }, + { + "label": "test_rule10_no_warning_when_disabled()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L687", + "community": 0, + "norm_label": "test_rule10_no_warning_when_disabled()", + "id": "tests_test_validation_test_rule10_no_warning_when_disabled" + }, + { + "label": "test_rule11_member_pref_no_match()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L704", + "community": 0, + "norm_label": "test_rule11_member_pref_no_match()", + "id": "tests_test_validation_test_rule11_member_pref_no_match" + }, + { + "label": "test_rule11_no_warning_when_no_preferences()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L732", + "community": 0, + "norm_label": "test_rule11_no_warning_when_no_preferences()", + "id": "tests_test_validation_test_rule11_no_warning_when_no_preferences" + }, + { + "label": "test_rule13_missing_attack_day_assigned_member()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L759", + "community": 0, + "norm_label": "test_rule13_missing_attack_day_assigned_member()", + "id": "tests_test_validation_test_rule13_missing_attack_day_assigned_member" + }, + { + "label": "test_rule13_attack_day_set()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L795", + "community": 0, + "norm_label": "test_rule13_attack_day_set()", + "id": "tests_test_validation_test_rule13_attack_day_set" + }, + { + "label": "test_rule14_fewer_than_10_day2()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L815", + "community": 12, + "norm_label": "test_rule14_fewer_than_10_day2()", + "id": "tests_test_validation_test_rule14_fewer_than_10_day2" + }, + { + "label": "test_rule14_ten_or_more_day2()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L830", + "community": 12, + "norm_label": "test_rule14_ten_or_more_day2()", + "id": "tests_test_validation_test_rule14_ten_or_more_day2" + }, + { + "label": "test_rule15_hh_no_reserve()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L845", + "community": 0, + "norm_label": "test_rule15_hh_no_reserve()", + "id": "tests_test_validation_test_rule15_hh_no_reserve" + }, + { + "label": "test_rule15_advanced_no_reserve()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L865", + "community": 0, + "norm_label": "test_rule15_advanced_no_reserve()", + "id": "tests_test_validation_test_rule15_advanced_no_reserve" + }, + { + "label": "test_rule15_hh_reserve_configured()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L885", + "community": 0, + "norm_label": "test_rule15_hh_reserve_configured()", + "id": "tests_test_validation_test_rule15_hh_reserve_configured" + }, + { + "label": "test_rule15_non_hh_no_reserve_no_warning()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L905", + "community": 0, + "norm_label": "test_rule15_non_hh_no_reserve_no_warning()", + "id": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning" + }, + { + "label": "test_rule16_post_fewer_than_3_conditions()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L925", + "community": 6, + "norm_label": "test_rule16_post_fewer_than_3_conditions()", + "id": "tests_test_validation_test_rule16_post_fewer_than_3_conditions" + }, + { + "label": "test_rule16_post_has_3_conditions()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L952", + "community": 0, + "norm_label": "test_rule16_post_has_3_conditions()", + "id": "tests_test_validation_test_rule16_post_has_3_conditions" + }, + { + "label": "_default_configs()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L977", + "community": 54, + "norm_label": "_default_configs()", + "id": "tests_test_validation_default_configs" + }, + { + "label": "_session_with_siege_and_configs()", + "file_type": "code", + "source_file": "backend/tests/test_validation.py", + "source_location": "L987", + "community": 0, + "norm_label": "_session_with_siege_and_configs()", + "id": "tests_test_validation_session_with_siege_and_configs" + }, + { + "label": "Tests for the validation engine (all 16 rules) and the validate endpoint.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L1", + "community": 0, + "norm_label": "tests for the validation engine (all 16 rules) and the validate endpoint.", + "id": "tests_test_validation_rationale_1" + }, + { + "label": "Rule 1: assigned member who is inactive triggers an error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L216", + "community": 0, + "norm_label": "rule 1: assigned member who is inactive triggers an error.", + "id": "tests_test_validation_rationale_216" + }, + { + "label": "Rule 1 pass: active member assigned \u2014 no rule 1 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L236", + "community": 0, + "norm_label": "rule 1 pass: active member assigned \u2014 no rule 1 error.", + "id": "tests_test_validation_rationale_236" + }, + { + "label": "Rule 2 regression (#253): assignments on broken buildings count toward scroll bu", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L256", + "community": 0, + "norm_label": "rule 2 regression (#253): assignments on broken buildings count toward scroll bu", + "id": "tests_test_validation_rationale_256" + }, + { + "label": "Rule 2: assignments on broken buildings add to healthy-building count. Memb", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L294", + "community": 0, + "norm_label": "rule 2: assignments on broken buildings add to healthy-building count. memb", + "id": "tests_test_validation_rationale_294" + }, + { + "label": "Rule 2: member assigned 4 times when scrolls_per_player limit is 3 \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L341", + "community": 0, + "norm_label": "rule 2: member assigned 4 times when scrolls_per_player limit is 3 \u2192 error.", + "id": "tests_test_validation_rationale_341" + }, + { + "label": "Rule 2 pass: member assigned once, scroll count 5 \u2192 no error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L365", + "community": 0, + "norm_label": "rule 2 pass: member assigned once, scroll count 5 \u2192 no error.", + "id": "tests_test_validation_rationale_365" + }, + { + "label": "Rule 3: building_number=0 for stronghold \u2192 friendly label, no id= leak.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L385", + "community": 0, + "norm_label": "rule 3: building_number=0 for stronghold \u2192 friendly label, no id= leak.", + "id": "tests_test_validation_rationale_385" + }, + { + "label": "Rule 3 pass: building_number=1 for stronghold.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L407", + "community": 0, + "norm_label": "rule 3 pass: building_number=1 for stronghold.", + "id": "tests_test_validation_rationale_407" + }, + { + "label": "Rule 4: group_number=10 \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L421", + "community": 0, + "norm_label": "rule 4: group_number=10 \u2192 error.", + "id": "tests_test_validation_rationale_421" + }, + { + "label": "Rule 4 pass: group_number=1.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L438", + "community": 0, + "norm_label": "rule 4 pass: group_number=1.", + "id": "tests_test_validation_rationale_438" + }, + { + "label": "Rule 5: position_number=4 with slot_count=3 \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L455", + "community": 0, + "norm_label": "rule 5: position_number=4 with slot_count=3 \u2192 error.", + "id": "tests_test_validation_rationale_455" + }, + { + "label": "Rule 5 pass: position_number=2, slot_count=3.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L472", + "community": 0, + "norm_label": "rule 5 pass: position_number=2, slot_count=3.", + "id": "tests_test_validation_rationale_472" + }, + { + "label": "Rule 6: attack_day=3 \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L489", + "community": 12, + "norm_label": "rule 6: attack_day=3 \u2192 error.", + "id": "tests_test_validation_rationale_489" + }, + { + "label": "Rule 6 pass: attack_day=2.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L502", + "community": 12, + "norm_label": "rule 6 pass: attack_day=2.", + "id": "tests_test_validation_rationale_502" + }, + { + "label": "Rule 7: post building with 2 groups \u2192 error with correct message.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L515", + "community": 0, + "norm_label": "rule 7: post building with 2 groups \u2192 error with correct message.", + "id": "tests_test_validation_rationale_515" + }, + { + "label": "Rule 7 pass: post building with 1 group.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L537", + "community": 0, + "norm_label": "rule 7 pass: post building with 1 group.", + "id": "tests_test_validation_rationale_537" + }, + { + "label": "Rule 8: disabled position with member_id \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L553", + "community": 0, + "norm_label": "rule 8: disabled position with member_id \u2192 error.", + "id": "tests_test_validation_rationale_553" + }, + { + "label": "Rule 8: reserve position with member \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L571", + "community": 0, + "norm_label": "rule 8: reserve position with member \u2192 error.", + "id": "tests_test_validation_rationale_571" + }, + { + "label": "Rule 8 pass: position with member, not reserve, not disabled.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L589", + "community": 0, + "norm_label": "rule 8 pass: position with member, not reserve, not disabled.", + "id": "tests_test_validation_rationale_589" + }, + { + "label": "Rule 9: 0 strongholds when config expects 1 \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L607", + "community": 0, + "norm_label": "rule 9: 0 strongholds when config expects 1 \u2192 error.", + "id": "tests_test_validation_rationale_607" + }, + { + "label": "Rule 9 pass: exactly the right number of each building type.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L619", + "community": 0, + "norm_label": "rule 9 pass: exactly the right number of each building type.", + "id": "tests_test_validation_rationale_619" + }, + { + "label": "Rule 10: unassigned, non-disabled, non-reserve position \u2192 warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L644", + "community": 0, + "norm_label": "rule 10: unassigned, non-disabled, non-reserve position \u2192 warning.", + "id": "tests_test_validation_rationale_644" + }, + { + "label": "Rule 10 message uses friendly building label, not raw enum value.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L661", + "community": 0, + "norm_label": "rule 10 message uses friendly building label, not raw enum value.", + "id": "tests_test_validation_rationale_661" + }, + { + "label": "Rule 10 pass: disabled empty position \u2192 no rule 10 warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L688", + "community": 0, + "norm_label": "rule 10 pass: disabled empty position \u2192 no rule 10 warning.", + "id": "tests_test_validation_rationale_688" + }, + { + "label": "Rule 11: member has preferences but none match active conditions \u2192 warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L705", + "community": 0, + "norm_label": "rule 11: member has preferences but none match active conditions \u2192 warning.", + "id": "tests_test_validation_rationale_705" + }, + { + "label": "Rule 11 pass: member has no preferences \u2192 skip warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L733", + "community": 0, + "norm_label": "rule 11 pass: member has no preferences \u2192 skip warning.", + "id": "tests_test_validation_rationale_733" + }, + { + "label": "Rule 13: assigned member with no attack_day \u2192 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L760", + "community": 0, + "norm_label": "rule 13: assigned member with no attack_day \u2192 error.", + "id": "tests_test_validation_rationale_760" + }, + { + "label": "Rule 13: siege member not assigned to any position but has no attack_day \u2192 error", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L780", + "community": 0, + "norm_label": "rule 13: siege member not assigned to any position but has no attack_day \u2192 error", + "id": "tests_test_validation_rationale_780" + }, + { + "label": "Rule 13 pass: all siege members have attack_day set \u2192 no rule 13 error.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L796", + "community": 0, + "norm_label": "rule 13 pass: all siege members have attack_day set \u2192 no rule 13 error.", + "id": "tests_test_validation_rationale_796" + }, + { + "label": "Rule 14: 5 Day 2 attackers \u2192 warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L816", + "community": 12, + "norm_label": "rule 14: 5 day 2 attackers \u2192 warning.", + "id": "tests_test_validation_rationale_816" + }, + { + "label": "Rule 14 pass: 10 Day 2 attackers \u2192 no warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L831", + "community": 12, + "norm_label": "rule 14 pass: 10 day 2 attackers \u2192 no warning.", + "id": "tests_test_validation_rationale_831" + }, + { + "label": "Rule 15: HH member with has_reserve_set=None \u2192 warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L846", + "community": 0, + "norm_label": "rule 15: hh member with has_reserve_set=none \u2192 warning.", + "id": "tests_test_validation_rationale_846" + }, + { + "label": "Rule 15: Advanced Role member with has_reserve_set=None \u2192 warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L866", + "community": 0, + "norm_label": "rule 15: advanced role member with has_reserve_set=none \u2192 warning.", + "id": "tests_test_validation_rationale_866" + }, + { + "label": "Rule 15 pass: HH member with has_reserve_set=True \u2192 no warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L886", + "community": 0, + "norm_label": "rule 15 pass: hh member with has_reserve_set=true \u2192 no warning.", + "id": "tests_test_validation_rationale_886" + }, + { + "label": "Rule 15 pass: medium/novice member with has_reserve_set=None \u2192 no warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L906", + "community": 0, + "norm_label": "rule 15 pass: medium/novice member with has_reserve_set=none \u2192 no warning.", + "id": "tests_test_validation_rationale_906" + }, + { + "label": "Rule 16: post with 1 active condition \u2192 warning with correct message.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L926", + "community": 6, + "norm_label": "rule 16: post with 1 active condition \u2192 warning with correct message.", + "id": "tests_test_validation_rationale_926" + }, + { + "label": "Rule 16 pass: post with 3 active conditions \u2192 no rule 16 warning.", + "file_type": "rationale", + "source_file": "backend/tests/test_validation.py", + "source_location": "L953", + "community": 0, + "norm_label": "rule 16 pass: post with 3 active conditions \u2192 no rule 16 warning.", + "id": "tests_test_validation_rationale_953" + }, + { + "label": "test_version.py", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L1", + "community": 29, + "norm_label": "test_version.py", + "id": "backend_tests_test_version_py" + }, + { + "label": "_reload_version_module()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L16", + "community": 29, + "norm_label": "_reload_version_module()", + "id": "tests_test_version_reload_version_module" + }, + { + "label": "test_read_backend_version_semver_only()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L29", + "community": 29, + "norm_label": "test_read_backend_version_semver_only()", + "id": "tests_test_version_test_read_backend_version_semver_only" + }, + { + "label": "test_read_backend_version_with_build_info()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L53", + "community": 29, + "norm_label": "test_read_backend_version_with_build_info()", + "id": "tests_test_version_test_read_backend_version_with_build_info" + }, + { + "label": "test_read_backend_version_missing_version_file()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L70", + "community": 29, + "norm_label": "test_read_backend_version_missing_version_file()", + "id": "tests_test_version_test_read_backend_version_missing_version_file" + }, + { + "label": "test_read_backend_version_build_info_with_missing_file()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L87", + "community": 29, + "norm_label": "test_read_backend_version_build_info_with_missing_file()", + "id": "tests_test_version_test_read_backend_version_build_info_with_missing_file" + }, + { + "label": "test_get_version_returns_200_with_expected_keys()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L109", + "community": 29, + "norm_label": "test_get_version_returns_200_with_expected_keys()", + "id": "tests_test_version_test_get_version_returns_200_with_expected_keys" + }, + { + "label": "test_get_version_backend_version_has_build_suffix()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L128", + "community": 29, + "norm_label": "test_get_version_backend_version_has_build_suffix()", + "id": "tests_test_version_test_get_version_backend_version_has_build_suffix" + }, + { + "label": "test_get_version_backend_version_clean_in_local_dev()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L144", + "community": 29, + "norm_label": "test_get_version_backend_version_clean_in_local_dev()", + "id": "tests_test_version_test_get_version_backend_version_clean_in_local_dev" + }, + { + "label": "test_get_version_git_sha_field_preserved()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L159", + "community": 29, + "norm_label": "test_get_version_git_sha_field_preserved()", + "id": "tests_test_version_test_get_version_git_sha_field_preserved" + }, + { + "label": "test_get_version_bot_unreachable_returns_none()", + "file_type": "code", + "source_file": "backend/tests/test_version.py", + "source_location": "L175", + "community": 29, + "norm_label": "test_get_version_bot_unreachable_returns_none()", + "id": "tests_test_version_test_get_version_bot_unreachable_returns_none" + }, + { + "label": "Tests for GET /api/version endpoint and _read_backend_version helper.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L1", + "community": 29, + "norm_label": "tests for get /api/version endpoint and _read_backend_version helper.", + "id": "tests_test_version_rationale_1" + }, + { + "label": "Force re-import of version module so env-var reads pick up monkeypatches.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L17", + "community": 29, + "norm_label": "force re-import of version module so env-var reads pick up monkeypatches.", + "id": "tests_test_version_rationale_17" + }, + { + "label": "When BUILD_NUMBER / GIT_SHA are absent, return bare semver.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L30", + "community": 29, + "norm_label": "when build_number / git_sha are absent, return bare semver.", + "id": "tests_test_version_rationale_30" + }, + { + "label": "When env vars are explicitly 'unknown', return bare semver.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L43", + "community": 29, + "norm_label": "when env vars are explicitly 'unknown', return bare semver.", + "id": "tests_test_version_rationale_43" + }, + { + "label": "When both BUILD_NUMBER and GIT_SHA are set, return combined string.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L54", + "community": 29, + "norm_label": "when both build_number and git_sha are set, return combined string.", + "id": "tests_test_version_rationale_54" + }, + { + "label": "When the VERSION file is missing, semver falls back to 'unknown'.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L71", + "community": 29, + "norm_label": "when the version file is missing, semver falls back to 'unknown'.", + "id": "tests_test_version_rationale_71" + }, + { + "label": "Even with a missing VERSION file, build suffix is appended if env vars are set.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L88", + "community": 29, + "norm_label": "even with a missing version file, build suffix is appended if env vars are set.", + "id": "tests_test_version_rationale_88" + }, + { + "label": "GET /api/version responds 200 with all required fields.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L110", + "community": 29, + "norm_label": "get /api/version responds 200 with all required fields.", + "id": "tests_test_version_rationale_110" + }, + { + "label": "backend_version includes build metadata when env vars are present.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L129", + "community": 29, + "norm_label": "backend_version includes build metadata when env vars are present.", + "id": "tests_test_version_rationale_129" + }, + { + "label": "backend_version is bare semver when BUILD_NUMBER/GIT_SHA are absent.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L145", + "community": 29, + "norm_label": "backend_version is bare semver when build_number/git_sha are absent.", + "id": "tests_test_version_rationale_145" + }, + { + "label": "git_sha top-level field is still returned for backward compatibility.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L160", + "community": 29, + "norm_label": "git_sha top-level field is still returned for backward compatibility.", + "id": "tests_test_version_rationale_160" + }, + { + "label": "bot_version is null when the bot sidecar is unreachable.", + "file_type": "rationale", + "source_file": "backend/tests/test_version.py", + "source_location": "L176", + "community": 29, + "norm_label": "bot_version is null when the bot sidecar is unreachable.", + "id": "tests_test_version_rationale_176" + }, + { + "label": "config.py", + "file_type": "code", + "source_file": "bot/app/config.py", + "source_location": "L1", + "community": 10, + "norm_label": "config.py", + "id": "bot_app_config_py" + }, + { + "label": "discord_client.py", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L1", + "community": 37, + "norm_label": "discord_client.py", + "id": "bot_app_discord_client_py" + }, + { + "label": "SiegeBot", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L6", + "community": 37, + "norm_label": "siegebot", + "id": "app_discord_client_siegebot" + }, + { + "label": ".on_ready()", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L14", + "community": 37, + "norm_label": ".on_ready()", + "id": "app_discord_client_siegebot_on_ready" + }, + { + "label": "._require_guild()", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L17", + "community": 37, + "norm_label": "._require_guild()", + "id": "app_discord_client_siegebot_require_guild" + }, + { + "label": "Discord client for the Siege Assignment System.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L7", + "community": 37, + "norm_label": "discord client for the siege assignment system.", + "id": "app_discord_client_rationale_7" + }, + { + "label": "Find member by username in the guild, open DM, send message.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L23", + "community": 37, + "norm_label": "find member by username in the guild, open dm, send message.", + "id": "app_discord_client_rationale_23" + }, + { + "label": "Find text channel by name, post message.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L34", + "community": 37, + "norm_label": "find text channel by name, post message.", + "id": "app_discord_client_rationale_34" + }, + { + "label": "Find text channel by name, post image as Discord file attachment. Retur", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L47", + "community": 37, + "norm_label": "find text channel by name, post image as discord file attachment. retur", + "id": "app_discord_client_rationale_47" + }, + { + "label": "Return list of guild members as dicts with id, username, and display_name.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L62", + "community": 57, + "norm_label": "return list of guild members as dicts with id, username, and display_name.", + "id": "app_discord_client_rationale_62" + }, + { + "label": "http_api.py", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L1", + "community": 50, + "norm_label": "http_api.py", + "id": "bot_app_http_api_py" + }, + { + "label": "set_bot()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L22", + "community": 50, + "norm_label": "set_bot()", + "id": "app_http_api_set_bot" + }, + { + "label": "_get_bot()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L27", + "community": 37, + "norm_label": "_get_bot()", + "id": "app_http_api_get_bot" + }, + { + "label": "verify_api_key()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L36", + "community": 50, + "norm_label": "verify_api_key()", + "id": "app_http_api_verify_api_key" + }, + { + "label": "NotifyRequest", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L46", + "community": 50, + "norm_label": "notifyrequest", + "id": "app_http_api_notifyrequest" + }, + { + "label": "PostMessageRequest", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L51", + "community": 50, + "norm_label": "postmessagerequest", + "id": "app_http_api_postmessagerequest" + }, + { + "label": "version()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L57", + "community": 40, + "norm_label": "version()", + "id": "app_http_api_version" + }, + { + "label": "notify()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L83", + "community": 61, + "norm_label": "notify()", + "id": "app_http_api_notify" + }, + { + "label": "post_message()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L97", + "community": 37, + "norm_label": "post_message()", + "id": "app_http_api_post_message" + }, + { + "label": "post_image()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L111", + "community": 37, + "norm_label": "post_image()", + "id": "app_http_api_post_image" + }, + { + "label": "get_guild_member()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L136", + "community": 50, + "norm_label": "get_guild_member()", + "id": "app_http_api_get_guild_member" + }, + { + "label": "Validate the Bearer token against the configured bot API key.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L37", + "community": 50, + "norm_label": "validate the bearer token against the configured bot api key.", + "id": "app_http_api_rationale_37" + }, + { + "label": "Return the bot version \u2014 no authentication required. Returns ``1.0.1+42.abc", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L58", + "community": 40, + "norm_label": "return the bot version \u2014 no authentication required. returns ``1.0.1+42.abc", + "id": "app_http_api_rationale_58" + }, + { + "label": "Health check \u2014 no authentication required.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L78", + "community": 50, + "norm_label": "health check \u2014 no authentication required.", + "id": "app_http_api_rationale_78" + }, + { + "label": "Send a DM notification to a guild member.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L87", + "community": 61, + "norm_label": "send a dm notification to a guild member.", + "id": "app_http_api_rationale_87" + }, + { + "label": "Post a text message to a guild channel.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L101", + "community": 37, + "norm_label": "post a text message to a guild channel.", + "id": "app_http_api_rationale_101" + }, + { + "label": "Post an image to a guild channel.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L116", + "community": 37, + "norm_label": "post an image to a guild channel.", + "id": "app_http_api_rationale_116" + }, + { + "label": "Retrieve guild member list.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L130", + "community": 57, + "norm_label": "retrieve guild member list.", + "id": "app_http_api_rationale_130" + }, + { + "label": "Look up a single guild member by Discord user ID. Returns ``{\"is_member\": f", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L140", + "community": 50, + "norm_label": "look up a single guild member by discord user id. returns ``{\"is_member\": f", + "id": "app_http_api_rationale_140" + }, + { + "label": "main.py", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L1", + "community": 5, + "norm_label": "main.py", + "id": "bot_app_main_py" + }, + { + "label": "run_http_server()", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L18", + "community": 5, + "norm_label": "run_http_server()", + "id": "app_main_run_http_server" + }, + { + "label": "run_discord_client()", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L30", + "community": 5, + "norm_label": "run_discord_client()", + "id": "app_main_run_discord_client" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L36", + "community": 5, + "norm_label": "main()", + "id": "app_main_main" + }, + { + "label": "Run the FastAPI/uvicorn HTTP sidecar on port 8001.", + "file_type": "rationale", + "source_file": "bot/app/main.py", + "source_location": "L19", + "community": 5, + "norm_label": "run the fastapi/uvicorn http sidecar on port 8001.", + "id": "app_main_rationale_19" + }, + { + "label": "Connect and run the Discord client.", + "file_type": "rationale", + "source_file": "bot/app/main.py", + "source_location": "L31", + "community": 5, + "norm_label": "connect and run the discord client.", + "id": "app_main_rationale_31" + }, + { + "label": "Start both the Discord client and HTTP server concurrently.", + "file_type": "rationale", + "source_file": "bot/app/main.py", + "source_location": "L37", + "community": 5, + "norm_label": "start both the discord client and http server concurrently.", + "id": "app_main_rationale_37" + }, + { + "label": "telemetry.py", + "file_type": "code", + "source_file": "bot/app/telemetry.py", + "source_location": "L1", + "community": 69, + "norm_label": "telemetry.py", + "id": "bot_app_telemetry_py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "bot/app/__init__.py", + "source_location": "L1", + "community": 126, + "norm_label": "__init__.py", + "id": "bot_app_init_py" + }, + { + "label": "conftest.py", + "file_type": "code", + "source_file": "bot/tests/conftest.py", + "source_location": "L1", + "community": 51, + "norm_label": "conftest.py", + "id": "bot_tests_conftest_py" + }, + { + "label": "_FakeClient", + "file_type": "code", + "source_file": "bot/tests/conftest.py", + "source_location": "L21", + "community": 51, + "norm_label": "_fakeclient", + "id": "tests_conftest_fakeclient" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "bot/tests/conftest.py", + "source_location": "L22", + "community": 51, + "norm_label": ".__init__()", + "id": "tests_conftest_fakeclient_init" + }, + { + "label": "_FakeTextChannel", + "file_type": "code", + "source_file": "bot/tests/conftest.py", + "source_location": "L26", + "community": 51, + "norm_label": "_faketextchannel", + "id": "tests_conftest_faketextchannel" + }, + { + "label": "_FakeHTTPException", + "file_type": "code", + "source_file": "bot/tests/conftest.py", + "source_location": "L32", + "community": 51, + "norm_label": "_fakehttpexception", + "id": "tests_conftest_fakehttpexception" + }, + { + "label": "Exception", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 51, + "norm_label": "exception", + "id": "exception" + }, + { + "label": "_FakeNotFound", + "file_type": "code", + "source_file": "bot/tests/conftest.py", + "source_location": "L35", + "community": 51, + "norm_label": "_fakenotfound", + "id": "tests_conftest_fakenotfound" + }, + { + "label": "_find()", + "file_type": "code", + "source_file": "bot/tests/conftest.py", + "source_location": "L45", + "community": 51, + "norm_label": "_find()", + "id": "tests_conftest_find" + }, + { + "label": "test_discord_client.py", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L1", + "community": 47, + "norm_label": "test_discord_client.py", + "id": "bot_tests_test_discord_client_py" + }, + { + "label": "_make_bot()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L11", + "community": 47, + "norm_label": "_make_bot()", + "id": "tests_test_discord_client_make_bot" + }, + { + "label": "_make_text_channel()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L35", + "community": 47, + "norm_label": "_make_text_channel()", + "id": "tests_test_discord_client_make_text_channel" + }, + { + "label": "_make_guild()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L44", + "community": 47, + "norm_label": "_make_guild()", + "id": "tests_test_discord_client_make_guild" + }, + { + "label": "test_send_dm_finds_member_and_sends()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L57", + "community": 47, + "norm_label": "test_send_dm_finds_member_and_sends()", + "id": "tests_test_discord_client_test_send_dm_finds_member_and_sends" + }, + { + "label": "test_send_dm_case_insensitive()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L70", + "community": 47, + "norm_label": "test_send_dm_case_insensitive()", + "id": "tests_test_discord_client_test_send_dm_case_insensitive" + }, + { + "label": "test_send_dm_raises_value_error_if_member_not_found()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L81", + "community": 47, + "norm_label": "test_send_dm_raises_value_error_if_member_not_found()", + "id": "tests_test_discord_client_test_send_dm_raises_value_error_if_member_not_found" + }, + { + "label": "test_post_message_finds_channel_and_sends()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L95", + "community": 47, + "norm_label": "test_post_message_finds_channel_and_sends()", + "id": "tests_test_discord_client_test_post_message_finds_channel_and_sends" + }, + { + "label": "test_post_message_raises_value_error_if_channel_not_found()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L106", + "community": 47, + "norm_label": "test_post_message_raises_value_error_if_channel_not_found()", + "id": "tests_test_discord_client_test_post_message_raises_value_error_if_channel_not_found" + }, + { + "label": "test_post_image_returns_cdn_url()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L125", + "community": 47, + "norm_label": "test_post_image_returns_cdn_url()", + "id": "tests_test_discord_client_test_post_image_returns_cdn_url" + }, + { + "label": "test_get_members_returns_correct_dict_format()", + "file_type": "code", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L143", + "community": 47, + "norm_label": "test_get_members_returns_correct_dict_format()", + "id": "tests_test_discord_client_test_get_members_returns_correct_dict_format" + }, + { + "label": "Unit tests for SiegeBot Discord client methods using mock guild/member objects.", + "file_type": "rationale", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L1", + "community": 47, + "norm_label": "unit tests for siegebot discord client methods using mock guild/member objects.", + "id": "tests_test_discord_client_rationale_1" + }, + { + "label": "Create a SiegeBot instance with a pre-loaded guild (bypasses Discord connect).", + "file_type": "rationale", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L12", + "community": 47, + "norm_label": "create a siegebot instance with a pre-loaded guild (bypasses discord connect).", + "id": "tests_test_discord_client_rationale_12" + }, + { + "label": "test_get_guild_member.py", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L1", + "community": 9, + "norm_label": "test_get_guild_member.py", + "id": "bot_tests_test_get_guild_member_py" + }, + { + "label": "patch_guild_id()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L30", + "community": 9, + "norm_label": "patch_guild_id()", + "id": "tests_test_get_guild_member_patch_guild_id" + }, + { + "label": "_make_mock_member()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L40", + "community": 9, + "norm_label": "_make_mock_member()", + "id": "tests_test_get_guild_member_make_mock_member" + }, + { + "label": "_make_mock_bot_with_guild()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L75", + "community": 9, + "norm_label": "_make_mock_bot_with_guild()", + "id": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "label": "test_get_guild_member_found_returns_200_with_member_data()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L89", + "community": 9, + "norm_label": "test_get_guild_member_found_returns_200_with_member_data()", + "id": "tests_test_get_guild_member_test_get_guild_member_found_returns_200_with_member_data" + }, + { + "label": "test_get_guild_member_roles_exclude_everyone()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L119", + "community": 9, + "norm_label": "test_get_guild_member_roles_exclude_everyone()", + "id": "tests_test_get_guild_member_test_get_guild_member_roles_exclude_everyone" + }, + { + "label": "test_get_guild_member_not_found_returns_200_is_member_false()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L144", + "community": 9, + "norm_label": "test_get_guild_member_not_found_returns_200_is_member_false()", + "id": "tests_test_get_guild_member_test_get_guild_member_not_found_returns_200_is_member_false" + }, + { + "label": "test_get_guild_member_discord_http_exception_returns_503()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L166", + "community": 9, + "norm_label": "test_get_guild_member_discord_http_exception_returns_503()", + "id": "tests_test_get_guild_member_test_get_guild_member_discord_http_exception_returns_503" + }, + { + "label": "test_get_guild_member_guild_none_returns_503()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L188", + "community": 9, + "norm_label": "test_get_guild_member_guild_none_returns_503()", + "id": "tests_test_get_guild_member_test_get_guild_member_guild_none_returns_503" + }, + { + "label": "test_get_guild_member_bot_none_returns_503()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L202", + "community": 9, + "norm_label": "test_get_guild_member_bot_none_returns_503()", + "id": "tests_test_get_guild_member_test_get_guild_member_bot_none_returns_503" + }, + { + "label": "test_get_guild_member_no_auth_returns_403()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L218", + "community": 9, + "norm_label": "test_get_guild_member_no_auth_returns_403()", + "id": "tests_test_get_guild_member_test_get_guild_member_no_auth_returns_403" + }, + { + "label": "test_get_guild_member_wrong_api_key_returns_401()", + "file_type": "code", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L228", + "community": 9, + "norm_label": "test_get_guild_member_wrong_api_key_returns_401()", + "id": "tests_test_get_guild_member_test_get_guild_member_wrong_api_key_returns_401" + }, + { + "label": "Tests for GET /api/members/{discord_user_id} \u2014 guild member lookup endpoint.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L1", + "community": 9, + "norm_label": "tests for get /api/members/{discord_user_id} \u2014 guild member lookup endpoint.", + "id": "tests_test_get_guild_member_rationale_1" + }, + { + "label": "Override the discord_guild_id setting for all tests.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L31", + "community": 9, + "norm_label": "override the discord_guild_id setting for all tests.", + "id": "tests_test_get_guild_member_rationale_31" + }, + { + "label": "Build a mock discord.Member with realistic attributes. ``role_ids`` default", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L46", + "community": 9, + "norm_label": "build a mock discord.member with realistic attributes. ``role_ids`` default", + "id": "tests_test_get_guild_member_rationale_46" + }, + { + "label": "Build a mock bot whose get_guild() returns the given guild object.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L76", + "community": 9, + "norm_label": "build a mock bot whose get_guild() returns the given guild object.", + "id": "tests_test_get_guild_member_rationale_76" + }, + { + "label": "When the member exists, respond 200 with is_member=true and full payload.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L90", + "community": 9, + "norm_label": "when the member exists, respond 200 with is_member=true and full payload.", + "id": "tests_test_get_guild_member_rationale_90" + }, + { + "label": "The @everyone role must never appear in the roles list.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L120", + "community": 9, + "norm_label": "the @everyone role must never appear in the roles list.", + "id": "tests_test_get_guild_member_rationale_120" + }, + { + "label": "When Discord returns NotFound, respond 200 with is_member=false.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L145", + "community": 9, + "norm_label": "when discord returns notfound, respond 200 with is_member=false.", + "id": "tests_test_get_guild_member_rationale_145" + }, + { + "label": "When Discord raises an unexpected HTTPException, respond 503.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L167", + "community": 9, + "norm_label": "when discord raises an unexpected httpexception, respond 503.", + "id": "tests_test_get_guild_member_rationale_167" + }, + { + "label": "When get_guild() returns None (bot not in guild), respond 503.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L189", + "community": 9, + "norm_label": "when get_guild() returns none (bot not in guild), respond 503.", + "id": "tests_test_get_guild_member_rationale_189" + }, + { + "label": "When _bot is None entirely, guild lookup yields None and we get 503.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L203", + "community": 9, + "norm_label": "when _bot is none entirely, guild lookup yields none and we get 503.", + "id": "tests_test_get_guild_member_rationale_203" + }, + { + "label": "Requests without a Bearer token must be rejected (403 or 401).", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L219", + "community": 9, + "norm_label": "requests without a bearer token must be rejected (403 or 401).", + "id": "tests_test_get_guild_member_rationale_219" + }, + { + "label": "Requests with a wrong Bearer token must be rejected with 401.", + "file_type": "rationale", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L229", + "community": 9, + "norm_label": "requests with a wrong bearer token must be rejected with 401.", + "id": "tests_test_get_guild_member_rationale_229" + }, + { + "label": "test_http_api.py", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L1", + "community": 9, + "norm_label": "test_http_api.py", + "id": "bot_tests_test_http_api_py" + }, + { + "label": "patch_api_key()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L18", + "community": 9, + "norm_label": "patch_api_key()", + "id": "tests_test_http_api_patch_api_key" + }, + { + "label": "_make_mock_bot()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L28", + "community": 9, + "norm_label": "_make_mock_bot()", + "id": "tests_test_http_api_make_mock_bot" + }, + { + "label": "test_version_returns_200()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L44", + "community": 9, + "norm_label": "test_version_returns_200()", + "id": "tests_test_http_api_test_version_returns_200" + }, + { + "label": "test_version_bare_semver_in_local_dev()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L54", + "community": 9, + "norm_label": "test_version_bare_semver_in_local_dev()", + "id": "tests_test_http_api_test_version_bare_semver_in_local_dev" + }, + { + "label": "test_version_includes_build_suffix_when_env_vars_set()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L74", + "community": 9, + "norm_label": "test_version_includes_build_suffix_when_env_vars_set()", + "id": "tests_test_http_api_test_version_includes_build_suffix_when_env_vars_set" + }, + { + "label": "test_version_unknown_when_version_file_missing()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L94", + "community": 9, + "norm_label": "test_version_unknown_when_version_file_missing()", + "id": "tests_test_http_api_test_version_unknown_when_version_file_missing" + }, + { + "label": "test_version_bare_semver_when_env_vars_are_unknown_literal()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L112", + "community": 9, + "norm_label": "test_version_bare_semver_when_env_vars_are_unknown_literal()", + "id": "tests_test_http_api_test_version_bare_semver_when_env_vars_are_unknown_literal" + }, + { + "label": "test_health_no_bot()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L137", + "community": 9, + "norm_label": "test_health_no_bot()", + "id": "tests_test_http_api_test_health_no_bot" + }, + { + "label": "test_health_with_bot_connected()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L148", + "community": 9, + "norm_label": "test_health_with_bot_connected()", + "id": "tests_test_http_api_test_health_with_bot_connected" + }, + { + "label": "test_notify_success()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L163", + "community": 9, + "norm_label": "test_notify_success()", + "id": "tests_test_http_api_test_notify_success" + }, + { + "label": "test_notify_bot_not_ready_returns_503()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L179", + "community": 9, + "norm_label": "test_notify_bot_not_ready_returns_503()", + "id": "tests_test_http_api_test_notify_bot_not_ready_returns_503" + }, + { + "label": "test_notify_member_not_found_returns_404()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L191", + "community": 9, + "norm_label": "test_notify_member_not_found_returns_404()", + "id": "tests_test_http_api_test_notify_member_not_found_returns_404" + }, + { + "label": "test_post_message_success()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L212", + "community": 9, + "norm_label": "test_post_message_success()", + "id": "tests_test_http_api_test_post_message_success" + }, + { + "label": "test_post_message_bot_not_ready_returns_503()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L228", + "community": 9, + "norm_label": "test_post_message_bot_not_ready_returns_503()", + "id": "tests_test_http_api_test_post_message_bot_not_ready_returns_503" + }, + { + "label": "test_post_image_success()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L245", + "community": 9, + "norm_label": "test_post_image_success()", + "id": "tests_test_http_api_test_post_image_success" + }, + { + "label": "test_post_image_bot_not_ready_returns_503()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L264", + "community": 9, + "norm_label": "test_post_image_bot_not_ready_returns_503()", + "id": "tests_test_http_api_test_post_image_bot_not_ready_returns_503" + }, + { + "label": "test_get_members_returns_list()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L281", + "community": 9, + "norm_label": "test_get_members_returns_list()", + "id": "tests_test_http_api_test_get_members_returns_list" + }, + { + "label": "test_get_members_bot_not_ready_returns_503()", + "file_type": "code", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L299", + "community": 9, + "norm_label": "test_get_members_bot_not_ready_returns_503()", + "id": "tests_test_http_api_test_get_members_bot_not_ready_returns_503" + }, + { + "label": "Tests for the bot HTTP API endpoints.", + "file_type": "rationale", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L1", + "community": 9, + "norm_label": "tests for the bot http api endpoints.", + "id": "tests_test_http_api_rationale_1" + }, + { + "label": "Override the bot_api_key setting for all tests.", + "file_type": "rationale", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L19", + "community": 9, + "norm_label": "override the bot_api_key setting for all tests.", + "id": "tests_test_http_api_rationale_19" + }, + { + "label": "GET /version responds 200 with a 'version' key.", + "file_type": "rationale", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L45", + "community": 9, + "norm_label": "get /version responds 200 with a 'version' key.", + "id": "tests_test_http_api_rationale_45" + }, + { + "label": "When BUILD_NUMBER / GIT_SHA are absent the version is the bare semver.", + "file_type": "rationale", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L55", + "community": 9, + "norm_label": "when build_number / git_sha are absent the version is the bare semver.", + "id": "tests_test_http_api_rationale_55" + }, + { + "label": "When BUILD_NUMBER and GIT_SHA are set, version is 'semver+build.sha7'.", + "file_type": "rationale", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L75", + "community": 9, + "norm_label": "when build_number and git_sha are set, version is 'semver+build.sha7'.", + "id": "tests_test_http_api_rationale_75" + }, + { + "label": "When the VERSION file is absent, semver falls back to 'unknown'.", + "file_type": "rationale", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L95", + "community": 9, + "norm_label": "when the version file is absent, semver falls back to 'unknown'.", + "id": "tests_test_http_api_rationale_95" + }, + { + "label": "Env vars explicitly set to 'unknown' should yield bare semver (no suffix).", + "file_type": "rationale", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L113", + "community": 9, + "norm_label": "env vars explicitly set to 'unknown' should yield bare semver (no suffix).", + "id": "tests_test_http_api_rationale_113" + }, + { + "label": "test_telemetry.py", + "file_type": "code", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L1", + "community": 18, + "norm_label": "test_telemetry.py", + "id": "bot_tests_test_telemetry_py" + }, + { + "label": "When APPLICATIONINSIGHTS_CONNECTION_STRING is set, configure_azure_monitor() is", + "file_type": "rationale", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L91", + "community": 18, + "norm_label": "when applicationinsights_connection_string is set, configure_azure_monitor() is", + "id": "tests_test_telemetry_rationale_91" + }, + { + "label": "eslint.config.js", + "file_type": "code", + "source_file": "frontend/eslint.config.js", + "source_location": "L1", + "community": 127, + "norm_label": "eslint.config.js", + "id": "frontend_eslint_config_js" + }, + { + "label": "playwright.config.ts", + "file_type": "code", + "source_file": "frontend/playwright.config.ts", + "source_location": "L1", + "community": 128, + "norm_label": "playwright.config.ts", + "id": "frontend_playwright_config_ts" + }, + { + "label": "postcss.config.js", + "file_type": "code", + "source_file": "frontend/postcss.config.js", + "source_location": "L1", + "community": 129, + "norm_label": "postcss.config.js", + "id": "frontend_postcss_config_js" + }, + { + "label": "tailwind.config.ts", + "file_type": "code", + "source_file": "frontend/tailwind.config.ts", + "source_location": "L1", + "community": 22, + "norm_label": "tailwind.config.ts", + "id": "frontend_tailwind_config_ts" + }, + { + "label": "vite.config.ts", + "file_type": "code", + "source_file": "frontend/vite.config.ts", + "source_location": "L1", + "community": 75, + "norm_label": "vite.config.ts", + "id": "frontend_vite_config_ts" + }, + { + "label": "vitest.config.ts", + "file_type": "code", + "source_file": "frontend/vitest.config.ts", + "source_location": "L1", + "community": 75, + "norm_label": "vitest.config.ts", + "id": "frontend_vitest_config_ts" + }, + { + "label": "board.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L1", + "community": 35, + "norm_label": "board.spec.ts", + "id": "frontend_e2e_board_spec_ts" + }, + { + "label": "apiCreateSiege()", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L13", + "community": 35, + "norm_label": "apicreatesiege()", + "id": "e2e_board_spec_apicreatesiege" + }, + { + "label": "apiAddBuilding()", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L27", + "community": 35, + "norm_label": "apiaddbuilding()", + "id": "e2e_board_spec_apiaddbuilding" + }, + { + "label": "apiCreateMember()", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L52", + "community": 35, + "norm_label": "apicreatemember()", + "id": "e2e_board_spec_apicreatemember" + }, + { + "label": "buildingsTab", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L127", + "community": 35, + "norm_label": "buildingstab", + "id": "e2e_board_spec_buildingstab" + }, + { + "label": "postsTab", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L128", + "community": 38, + "norm_label": "poststab", + "id": "e2e_board_spec_poststab" + }, + { + "label": "search", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L179", + "community": 35, + "norm_label": "search", + "id": "e2e_board_spec_search" + }, + { + "label": "roleSelect", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L198", + "community": 35, + "norm_label": "roleselect", + "id": "e2e_board_spec_roleselect" + }, + { + "label": "firstPositionSpan", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L238", + "community": 35, + "norm_label": "firstpositionspan", + "id": "e2e_board_spec_firstpositionspan" + }, + { + "label": "positionCell", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L239", + "community": 35, + "norm_label": "positioncell", + "id": "e2e_board_spec_positioncell" + }, + { + "label": "chevron", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L244", + "community": 35, + "norm_label": "chevron", + "id": "e2e_board_spec_chevron" + }, + { + "label": "autofillBtn", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L367", + "community": 35, + "norm_label": "autofillbtn", + "id": "e2e_board_spec_autofillbtn" + }, + { + "label": "members.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L1", + "community": 70, + "norm_label": "members.spec.ts", + "id": "frontend_e2e_members_spec_ts" + }, + { + "label": "ensureMemberSlotsAvailable()", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L20", + "community": 70, + "norm_label": "ensurememberslotsavailable()", + "id": "e2e_members_spec_ensurememberslotsavailable" + }, + { + "label": "activeCheckbox", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L125", + "community": 70, + "norm_label": "activecheckbox", + "id": "e2e_members_spec_activecheckbox" + }, + { + "label": "editLinks", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L131", + "community": 70, + "norm_label": "editlinks", + "id": "e2e_members_spec_editlinks" + }, + { + "label": "siege-lifecycle.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L1", + "community": 35, + "norm_label": "siege-lifecycle.spec.ts", + "id": "frontend_e2e_siege_lifecycle_spec_ts" + }, + { + "label": "dateInput", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L121", + "community": 35, + "norm_label": "dateinput", + "id": "e2e_siege_lifecycle_spec_dateinput" + }, + { + "label": "url", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L153", + "community": 35, + "norm_label": "url", + "id": "e2e_siege_lifecycle_spec_url" + }, + { + "label": "tabStrip", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L181", + "community": 35, + "norm_label": "tabstrip", + "id": "e2e_siege_lifecycle_spec_tabstrip" + }, + { + "label": "boardLink", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L203", + "community": 35, + "norm_label": "boardlink", + "id": "e2e_siege_lifecycle_spec_boardlink" + }, + { + "label": "activeBadge", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L382", + "community": 35, + "norm_label": "activebadge", + "id": "e2e_siege_lifecycle_spec_activebadge" + }, + { + "label": "errorBadge", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L383", + "community": 35, + "norm_label": "errorbadge", + "id": "e2e_siege_lifecycle_spec_errorbadge" + }, + { + "label": "smoke.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/smoke.spec.ts", + "source_location": "L1", + "community": 130, + "norm_label": "smoke.spec.ts", + "id": "frontend_e2e_smoke_spec_ts" + }, + { + "label": "App.tsx", + "file_type": "code", + "source_file": "frontend/src/App.tsx", + "source_location": "L1", + "community": 22, + "norm_label": "app.tsx", + "id": "frontend_src_app_tsx" + }, + { + "label": "App()", + "file_type": "code", + "source_file": "frontend/src/App.tsx", + "source_location": "L19", + "community": 22, + "norm_label": "app()", + "id": "src_app_app" + }, + { + "label": "main.tsx", + "file_type": "code", + "source_file": "frontend/src/main.tsx", + "source_location": "L1", + "community": 22, + "norm_label": "main.tsx", + "id": "frontend_src_main_tsx" + }, + { + "label": "queryClient", + "file_type": "code", + "source_file": "frontend/src/main.tsx", + "source_location": "L9", + "community": 22, + "norm_label": "queryclient", + "id": "src_main_queryclient" + }, + { + "label": "vite-env.d.ts", + "file_type": "code", + "source_file": "frontend/src/vite-env.d.ts", + "source_location": "L1", + "community": 131, + "norm_label": "vite-env.d.ts", + "id": "frontend_src_vite_env_d_ts" + }, + { + "label": "board.ts", + "file_type": "code", + "source_file": "frontend/src/api/board.ts", + "source_location": "L1", + "community": 8, + "norm_label": "board.ts", + "id": "frontend_src_api_board_ts" + }, + { + "label": "getBoard()", + "file_type": "code", + "source_file": "frontend/src/api/board.ts", + "source_location": "L4", + "community": 8, + "norm_label": "getboard()", + "id": "api_board_getboard" + }, + { + "label": "changelog.ts", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L1", + "community": 41, + "norm_label": "changelog.ts", + "id": "frontend_src_api_changelog_ts" + }, + { + "label": "ChangelogStatus", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L3", + "community": 41, + "norm_label": "changelogstatus", + "id": "api_changelog_changelogstatus" + }, + { + "label": "fetchChangelogStatus()", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L7", + "community": 41, + "norm_label": "fetchchangelogstatus()", + "id": "api_changelog_fetchchangelogstatus" + }, + { + "label": "markChangelogSeen()", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L12", + "community": 49, + "norm_label": "markchangelogseen()", + "id": "api_changelog_markchangelogseen" + }, + { + "label": "client.ts", + "file_type": "code", + "source_file": "frontend/src/api/client.ts", + "source_location": "L1", + "community": 22, + "norm_label": "client.ts", + "id": "frontend_src_api_client_ts" + }, + { + "label": "apiClient", + "file_type": "code", + "source_file": "frontend/src/api/client.ts", + "source_location": "L3", + "community": 22, + "norm_label": "apiclient", + "id": "api_client_apiclient" + }, + { + "label": "config.ts", + "file_type": "code", + "source_file": "frontend/src/api/config.ts", + "source_location": "L1", + "community": 22, + "norm_label": "config.ts", + "id": "frontend_src_api_config_ts" + }, + { + "label": "AppConfig", + "file_type": "code", + "source_file": "frontend/src/api/config.ts", + "source_location": "L3", + "community": 22, + "norm_label": "appconfig", + "id": "api_config_appconfig" + }, + { + "label": "fetchConfig()", + "file_type": "code", + "source_file": "frontend/src/api/config.ts", + "source_location": "L7", + "community": 22, + "norm_label": "fetchconfig()", + "id": "api_config_fetchconfig" + }, + { + "label": "members.ts", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L1", + "community": 15, + "norm_label": "members.ts", + "id": "frontend_src_api_members_ts" + }, + { + "label": "getMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L17", + "community": 15, + "norm_label": "getmember()", + "id": "api_members_getmember" + }, + { + "label": "createMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L22", + "community": 15, + "norm_label": "createmember()", + "id": "api_members_createmember" + }, + { + "label": "updateMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L32", + "community": 15, + "norm_label": "updatemember()", + "id": "api_members_updatemember" + }, + { + "label": "deleteMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L46", + "community": 15, + "norm_label": "deletemember()", + "id": "api_members_deletemember" + }, + { + "label": "getMemberPreferences()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L50", + "community": 57, + "norm_label": "getmemberpreferences()", + "id": "api_members_getmemberpreferences" + }, + { + "label": "updateMemberPreferences()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L59", + "community": 15, + "norm_label": "updatememberpreferences()", + "id": "api_members_updatememberpreferences" + }, + { + "label": "getPostConditions()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L72", + "community": 15, + "norm_label": "getpostconditions()", + "id": "api_members_getpostconditions" + }, + { + "label": "getMemberRoles()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L77", + "community": 15, + "norm_label": "getmemberroles()", + "id": "api_members_getmemberroles" + }, + { + "label": "previewDiscordSync()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L82", + "community": 13, + "norm_label": "previewdiscordsync()", + "id": "api_members_previewdiscordsync" + }, + { + "label": "applyDiscordSync()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L89", + "community": 13, + "norm_label": "applydiscordsync()", + "id": "api_members_applydiscordsync" + }, + { + "label": "notifySiegeMembers()", + "file_type": "code", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L8", + "community": 34, + "norm_label": "notifysiegemembers()", + "id": "api_notifications_notifysiegemembers" + }, + { + "label": "getNotificationBatch()", + "file_type": "code", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L17", + "community": 34, + "norm_label": "getnotificationbatch()", + "id": "api_notifications_getnotificationbatch" + }, + { + "label": "postToChannel()", + "file_type": "code", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L27", + "community": 34, + "norm_label": "posttochannel()", + "id": "api_notifications_posttochannel" + }, + { + "label": "posts.ts", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L1", + "community": 38, + "norm_label": "posts.ts", + "id": "frontend_src_api_posts_ts" + }, + { + "label": "PostPriorityConfig", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L4", + "community": 16, + "norm_label": "postpriorityconfig", + "id": "api_posts_postpriorityconfig" + }, + { + "label": "getPostPriorities()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L11", + "community": 38, + "norm_label": "getpostpriorities()", + "id": "api_posts_getpostpriorities" + }, + { + "label": "updatePostPriority()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L16", + "community": 38, + "norm_label": "updatepostpriority()", + "id": "api_posts_updatepostpriority" + }, + { + "label": "getPosts()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L27", + "community": 38, + "norm_label": "getposts()", + "id": "api_posts_getposts" + }, + { + "label": "updatePost()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L32", + "community": 39, + "norm_label": "updatepost()", + "id": "api_posts_updatepost" + }, + { + "label": "setPostConditions()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L44", + "community": 39, + "norm_label": "setpostconditions()", + "id": "api_posts_setpostconditions" + }, + { + "label": "sieges.ts", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L1", + "community": 3, + "norm_label": "sieges.ts", + "id": "frontend_src_api_sieges_ts" + }, + { + "label": "getSieges()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L20", + "community": 7, + "norm_label": "getsieges()", + "id": "api_sieges_getsieges" + }, + { + "label": "getSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L27", + "community": 3, + "norm_label": "getsiege()", + "id": "api_sieges_getsiege" + }, + { + "label": "createSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L32", + "community": 7, + "norm_label": "createsiege()", + "id": "api_sieges_createsiege" + }, + { + "label": "updateSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L37", + "community": 42, + "norm_label": "updatesiege()", + "id": "api_sieges_updatesiege" + }, + { + "label": "deleteSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L45", + "community": 3, + "norm_label": "deletesiege()", + "id": "api_sieges_deletesiege" + }, + { + "label": "activateSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L49", + "community": 3, + "norm_label": "activatesiege()", + "id": "api_sieges_activatesiege" + }, + { + "label": "completeSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L54", + "community": 3, + "norm_label": "completesiege()", + "id": "api_sieges_completesiege" + }, + { + "label": "cloneSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L59", + "community": 3, + "norm_label": "clonesiege()", + "id": "api_sieges_clonesiege" + }, + { + "label": "reopenSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L64", + "community": 3, + "norm_label": "reopensiege()", + "id": "api_sieges_reopensiege" + }, + { + "label": "validateSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L69", + "community": 3, + "norm_label": "validatesiege()", + "id": "api_sieges_validatesiege" + }, + { + "label": "getBuildings()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L76", + "community": 45, + "norm_label": "getbuildings()", + "id": "api_sieges_getbuildings" + }, + { + "label": "createBuilding()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L83", + "community": 3, + "norm_label": "createbuilding()", + "id": "api_sieges_createbuilding" + }, + { + "label": "updateBuilding()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L94", + "community": 45, + "norm_label": "updatebuilding()", + "id": "api_sieges_updatebuilding" + }, + { + "label": "deleteBuilding()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L106", + "community": 45, + "norm_label": "deletebuilding()", + "id": "api_sieges_deletebuilding" + }, + { + "label": "getSiegeMembers()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L120", + "community": 3, + "norm_label": "getsiegemembers()", + "id": "api_sieges_getsiegemembers" + }, + { + "label": "getSiegeMemberPreferences()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L127", + "community": 38, + "norm_label": "getsiegememberpreferences()", + "id": "api_sieges_getsiegememberpreferences" + }, + { + "label": "previewAutofill()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L165", + "community": 42, + "norm_label": "previewautofill()", + "id": "api_sieges_previewautofill" + }, + { + "label": "applyAutofill()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L174", + "community": 24, + "norm_label": "applyautofill()", + "id": "api_sieges_applyautofill" + }, + { + "label": "previewAttackDay()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L183", + "community": 24, + "norm_label": "previewattackday()", + "id": "api_sieges_previewattackday" + }, + { + "label": "applyAttackDay()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L192", + "community": 3, + "norm_label": "applyattackday()", + "id": "api_sieges_applyattackday" + }, + { + "label": "compareSieges()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L201", + "community": 25, + "norm_label": "comparesieges()", + "id": "api_sieges_comparesieges" + }, + { + "label": "compareSiegesSpecific()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L210", + "community": 7, + "norm_label": "comparesiegesspecific()", + "id": "api_sieges_comparesiegesspecific" + }, + { + "label": "previewPostSuggestions()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L220", + "community": 24, + "norm_label": "previewpostsuggestions()", + "id": "api_sieges_previewpostsuggestions" + }, + { + "label": "applyPostSuggestions()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L229", + "community": 24, + "norm_label": "applypostsuggestions()", + "id": "api_sieges_applypostsuggestions" + }, + { + "label": "types.ts", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L1", + "community": 8, + "norm_label": "types.ts", + "id": "frontend_src_api_types_ts" + }, + { + "label": "MemberRole", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L2", + "community": 52, + "norm_label": "memberrole", + "id": "api_types_memberrole" + }, + { + "label": "SiegeStatus", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L3", + "community": 16, + "norm_label": "siegestatus", + "id": "api_types_siegestatus" + }, + { + "label": "BuildingType", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L4", + "community": 8, + "norm_label": "buildingtype", + "id": "api_types_buildingtype" + }, + { + "label": "Member", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L12", + "community": 16, + "norm_label": "member", + "id": "api_types_member" + }, + { + "label": "SyncMatch", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L23", + "community": 52, + "norm_label": "syncmatch", + "id": "api_types_syncmatch" + }, + { + "label": "SyncPreviewResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L32", + "community": 52, + "norm_label": "syncpreviewresponse", + "id": "api_types_syncpreviewresponse" + }, + { + "label": "SyncApplyItem", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L38", + "community": 15, + "norm_label": "syncapplyitem", + "id": "api_types_syncapplyitem" + }, + { + "label": "PostCondition", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L44", + "community": 16, + "norm_label": "postcondition", + "id": "api_types_postcondition" + }, + { + "label": "Siege", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L51", + "community": 16, + "norm_label": "siege", + "id": "api_types_siege" + }, + { + "label": "Building", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L62", + "community": 16, + "norm_label": "building", + "id": "api_types_building" + }, + { + "label": "MemberPreferenceSummary", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L72", + "community": 8, + "norm_label": "memberpreferencesummary", + "id": "api_types_memberpreferencesummary" + }, + { + "label": "PositionResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L79", + "community": 8, + "norm_label": "positionresponse", + "id": "api_types_positionresponse" + }, + { + "label": "BuildingGroupResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L89", + "community": 8, + "norm_label": "buildinggroupresponse", + "id": "api_types_buildinggroupresponse" + }, + { + "label": "BuildingResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L96", + "community": 8, + "norm_label": "buildingresponse", + "id": "api_types_buildingresponse" + }, + { + "label": "BoardResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L105", + "community": 34, + "norm_label": "boardresponse", + "id": "api_types_boardresponse" + }, + { + "label": "SiegeMember", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L111", + "community": 3, + "norm_label": "siegemember", + "id": "api_types_siegemember" + }, + { + "label": "Post", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L129", + "community": 16, + "norm_label": "post", + "id": "api_types_post" + }, + { + "label": "ValidationIssue", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L140", + "community": 3, + "norm_label": "validationissue", + "id": "api_types_validationissue" + }, + { + "label": "ValidationResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L146", + "community": 3, + "norm_label": "validationresult", + "id": "api_types_validationresult" + }, + { + "label": "AutofillAssignment", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L152", + "community": 8, + "norm_label": "autofillassignment", + "id": "api_types_autofillassignment" + }, + { + "label": "AutofillPreviewResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L158", + "community": 8, + "norm_label": "autofillpreviewresult", + "id": "api_types_autofillpreviewresult" + }, + { + "label": "AutofillApplyResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L163", + "community": 8, + "norm_label": "autofillapplyresult", + "id": "api_types_autofillapplyresult" + }, + { + "label": "AttackDayAssignment", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L168", + "community": 24, + "norm_label": "attackdayassignment", + "id": "api_types_attackdayassignment" + }, + { + "label": "AttackDayPreviewResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L173", + "community": 3, + "norm_label": "attackdaypreviewresult", + "id": "api_types_attackdaypreviewresult" + }, + { + "label": "AttackDayApplyResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L178", + "community": 24, + "norm_label": "attackdayapplyresult", + "id": "api_types_attackdayapplyresult" + }, + { + "label": "PositionKey", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L183", + "community": 8, + "norm_label": "positionkey", + "id": "api_types_positionkey" + }, + { + "label": "MemberDiff", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L190", + "community": 8, + "norm_label": "memberdiff", + "id": "api_types_memberdiff" + }, + { + "label": "ComparisonResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L198", + "community": 8, + "norm_label": "comparisonresult", + "id": "api_types_comparisonresult" + }, + { + "label": "NotificationResultItem", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L205", + "community": 34, + "norm_label": "notificationresultitem", + "id": "api_types_notificationresultitem" + }, + { + "label": "NotificationBatchResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L214", + "community": 34, + "norm_label": "notificationbatchresponse", + "id": "api_types_notificationbatchresponse" + }, + { + "label": "NotifyResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L220", + "community": 34, + "norm_label": "notifyresponse", + "id": "api_types_notifyresponse" + }, + { + "label": "GenerateImagesResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L227", + "community": 34, + "norm_label": "generateimagesresponse", + "id": "api_types_generateimagesresponse" + }, + { + "label": "VersionInfo", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L233", + "community": 40, + "norm_label": "versioninfo", + "id": "api_types_versioninfo" + }, + { + "label": "BuildingTypeInfo", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L241", + "community": 8, + "norm_label": "buildingtypeinfo", + "id": "api_types_buildingtypeinfo" + }, + { + "label": "MemberRoleInfo", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L249", + "community": 15, + "norm_label": "memberroleinfo", + "id": "api_types_memberroleinfo" + }, + { + "label": "PostSuggestionSkipReason", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L256", + "community": 8, + "norm_label": "postsuggestionskipreason", + "id": "api_types_postsuggestionskipreason" + }, + { + "label": "PostSuggestionEntry", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L262", + "community": 8, + "norm_label": "postsuggestionentry", + "id": "api_types_postsuggestionentry" + }, + { + "label": "PostSuggestionPreviewResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L279", + "community": 36, + "norm_label": "postsuggestionpreviewresult", + "id": "api_types_postsuggestionpreviewresult" + }, + { + "label": "PostSuggestionStaleReason", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L284", + "community": 8, + "norm_label": "postsuggestionstalereason", + "id": "api_types_postsuggestionstalereason" + }, + { + "label": "PostSuggestionStaleEntry", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L291", + "community": 14, + "norm_label": "postsuggestionstaleentry", + "id": "api_types_postsuggestionstaleentry" + }, + { + "label": "PostSuggestionApplyResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L298", + "community": 8, + "norm_label": "postsuggestionapplyresult", + "id": "api_types_postsuggestionapplyresult" + }, + { + "label": "getVersion()", + "file_type": "code", + "source_file": "frontend/src/api/version.ts", + "source_location": "L5", + "community": 40, + "norm_label": "getversion()", + "id": "api_version_getversion" + }, + { + "label": "useVersion()", + "file_type": "code", + "source_file": "frontend/src/api/version.ts", + "source_location": "L10", + "community": 40, + "norm_label": "useversion()", + "id": "api_version_useversion" + }, + { + "label": "CarouselSlide", + "file_type": "code", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L10", + "community": 1, + "norm_label": "carouselslide", + "id": "components_carousel_carouselslide" + }, + { + "label": "CarouselProps", + "file_type": "code", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L22", + "community": 1, + "norm_label": "carouselprops", + "id": "components_carousel_carouselprops" + }, + { + "label": "Carousel()", + "file_type": "code", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L35", + "community": 1, + "norm_label": "carousel()", + "id": "components_carousel_carousel" + }, + { + "label": "ChangelogDropdown.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L1", + "community": 41, + "norm_label": "changelogdropdown.tsx", + "id": "frontend_src_components_changelogdropdown_tsx" + }, + { + "label": "hasUnread()", + "file_type": "code", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L29", + "community": 41, + "norm_label": "hasunread()", + "id": "components_changelogdropdown_hasunread" + }, + { + "label": "DiscordSyncModal.tsx", + "file_type": "code", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "discordsyncmodal.tsx", + "id": "frontend_src_components_discordsyncmodal_tsx" + }, + { + "label": "ConfidenceVariant", + "file_type": "code", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L31", + "community": 7, + "norm_label": "confidencevariant", + "id": "components_discordsyncmodal_confidencevariant" + }, + { + "label": "CONFIDENCE_LABEL", + "file_type": "code", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L39", + "community": 7, + "norm_label": "confidence_label", + "id": "components_discordsyncmodal_confidence_label" + }, + { + "label": "Props", + "file_type": "code", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L11", + "community": 15, + "norm_label": "props", + "id": "components_groupbytoggle_props" + }, + { + "label": "GroupByToggle()", + "file_type": "code", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L31", + "community": 15, + "norm_label": "groupbytoggle()", + "id": "components_groupbytoggle_groupbytoggle" + }, + { + "label": "Layout.tsx", + "file_type": "code", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L1", + "community": 22, + "norm_label": "layout.tsx", + "id": "frontend_src_components_layout_tsx" + }, + { + "label": "navLinkClass()", + "file_type": "code", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L9", + "community": 22, + "norm_label": "navlinkclass()", + "id": "components_layout_navlinkclass" + }, + { + "label": "Layout()", + "file_type": "code", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L17", + "community": 22, + "norm_label": "layout()", + "id": "components_layout_layout" + }, + { + "label": "MemberWithMatches", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L57", + "community": 38, + "norm_label": "memberwithmatches", + "id": "components_poststab_memberwithmatches" + }, + { + "label": "DuplicateConditionMap", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L64", + "community": 38, + "norm_label": "duplicateconditionmap", + "id": "components_poststab_duplicateconditionmap" + }, + { + "label": "buildDuplicateConditionMap()", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L68", + "community": 38, + "norm_label": "buildduplicateconditionmap()", + "id": "components_poststab_buildduplicateconditionmap" + }, + { + "label": "findPostPosition()", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L85", + "community": 15, + "norm_label": "findpostposition()", + "id": "components_poststab_findpostposition" + }, + { + "label": "MemberAssignRow()", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L100", + "community": 38, + "norm_label": "memberassignrow()", + "id": "components_poststab_memberassignrow" + }, + { + "label": "PostSuggestionsModal.tsx", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L1", + "community": 14, + "norm_label": "postsuggestionsmodal.tsx", + "id": "frontend_src_components_postsuggestionsmodal_tsx" + }, + { + "label": "OutcomeFilter", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L30", + "community": 14, + "norm_label": "outcomefilter", + "id": "components_postsuggestionsmodal_outcomefilter" + }, + { + "label": "Classification", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L32", + "community": 14, + "norm_label": "classification", + "id": "components_postsuggestionsmodal_classification" + }, + { + "label": "PRIORITY_META", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L42", + "community": 14, + "norm_label": "priority_meta", + "id": "components_postsuggestionsmodal_priority_meta" + }, + { + "label": "getPriorityMeta()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L64", + "community": 14, + "norm_label": "getprioritymeta()", + "id": "components_postsuggestionsmodal_getprioritymeta" + }, + { + "label": "SKIP_REASON_LABEL", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L70", + "community": 14, + "norm_label": "skip_reason_label", + "id": "components_postsuggestionsmodal_skip_reason_label" + }, + { + "label": "STALE_REASON_LABEL", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L82", + "community": 14, + "norm_label": "stale_reason_label", + "id": "components_postsuggestionsmodal_stale_reason_label" + }, + { + "label": "TileConfig", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L93", + "community": 14, + "norm_label": "tileconfig", + "id": "components_postsuggestionsmodal_tileconfig" + }, + { + "label": "classify()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L159", + "community": 14, + "norm_label": "classify()", + "id": "components_postsuggestionsmodal_classify" + }, + { + "label": "Pill()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L169", + "community": 14, + "norm_label": "pill()", + "id": "components_postsuggestionsmodal_pill" + }, + { + "label": "ChangeCell()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L197", + "community": 14, + "norm_label": "changecell()", + "id": "components_postsuggestionsmodal_changecell" + }, + { + "label": "SkipIcon()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L248", + "community": 14, + "norm_label": "skipicon()", + "id": "components_postsuggestionsmodal_skipicon" + }, + { + "label": "ConditionCell()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L259", + "community": 14, + "norm_label": "conditioncell()", + "id": "components_postsuggestionsmodal_conditioncell" + }, + { + "label": "SummaryTile()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L290", + "community": 14, + "norm_label": "summarytile()", + "id": "components_postsuggestionsmodal_summarytile" + }, + { + "label": "StateLoading()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L345", + "community": 14, + "norm_label": "stateloading()", + "id": "components_postsuggestionsmodal_stateloading" + }, + { + "label": "StateEmpty()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L355", + "community": 14, + "norm_label": "stateempty()", + "id": "components_postsuggestionsmodal_stateempty" + }, + { + "label": "StateStaleConflict()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L379", + "community": 14, + "norm_label": "statestaleconflict()", + "id": "components_postsuggestionsmodal_statestaleconflict" + }, + { + "label": "ExpiryCountdown", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L476", + "community": 14, + "norm_label": "expirycountdown", + "id": "components_postsuggestionsmodal_expirycountdown" + }, + { + "label": "useExpiryCountdown()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L486", + "community": 14, + "norm_label": "useexpirycountdown()", + "id": "components_postsuggestionsmodal_useexpirycountdown" + }, + { + "label": "RequireAuth.tsx", + "file_type": "code", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L1", + "community": 22, + "norm_label": "requireauth.tsx", + "id": "frontend_src_components_requireauth_tsx" + }, + { + "label": "RequireAuth()", + "file_type": "code", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L4", + "community": 22, + "norm_label": "requireauth()", + "id": "components_requireauth_requireauth" + }, + { + "label": "SiegeLayout.tsx", + "file_type": "code", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L1", + "community": 22, + "norm_label": "siegelayout.tsx", + "id": "frontend_src_components_siegelayout_tsx" + }, + { + "label": "SiegeLayout()", + "file_type": "code", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L13", + "community": 22, + "norm_label": "siegelayout()", + "id": "components_siegelayout_siegelayout" + }, + { + "label": "badge.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "badge.tsx", + "id": "frontend_src_components_ui_badge_tsx" + }, + { + "label": "badgeVariants", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L5", + "community": 7, + "norm_label": "badgevariants", + "id": "ui_badge_badgevariants" + }, + { + "label": "BadgeProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L29", + "community": 7, + "norm_label": "badgeprops", + "id": "ui_badge_badgeprops" + }, + { + "label": "Badge()", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L34", + "community": 7, + "norm_label": "badge()", + "id": "ui_badge_badge" + }, + { + "label": "button.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "button.tsx", + "id": "frontend_src_components_ui_button_tsx" + }, + { + "label": "buttonVariants", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L6", + "community": 7, + "norm_label": "buttonvariants", + "id": "ui_button_buttonvariants" + }, + { + "label": "ButtonProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L36", + "community": 7, + "norm_label": "buttonprops", + "id": "ui_button_buttonprops" + }, + { + "label": "Button", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L43", + "community": 7, + "norm_label": "button", + "id": "ui_button_button" + }, + { + "label": "Checkbox", + "file_type": "code", + "source_file": "frontend/src/components/ui/checkbox.tsx", + "source_location": "L6", + "community": 15, + "norm_label": "checkbox", + "id": "ui_checkbox_checkbox" + }, + { + "label": "dialog.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L1", + "community": 3, + "norm_label": "dialog.tsx", + "id": "frontend_src_components_ui_dialog_tsx" + }, + { + "label": "DialogOverlay", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L11", + "community": 3, + "norm_label": "dialogoverlay", + "id": "ui_dialog_dialogoverlay" + }, + { + "label": "DialogContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L26", + "community": 3, + "norm_label": "dialogcontent", + "id": "ui_dialog_dialogcontent" + }, + { + "label": "DialogHeader()", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L50", + "community": 3, + "norm_label": "dialogheader()", + "id": "ui_dialog_dialogheader" + }, + { + "label": "DialogFooter()", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L66", + "community": 14, + "norm_label": "dialogfooter()", + "id": "ui_dialog_dialogfooter" + }, + { + "label": "DialogTitle", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L82", + "community": 3, + "norm_label": "dialogtitle", + "id": "ui_dialog_dialogtitle" + }, + { + "label": "DialogDescription", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L97", + "community": 3, + "norm_label": "dialogdescription", + "id": "ui_dialog_dialogdescription" + }, + { + "label": "dropdown-menu.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L1", + "community": 41, + "norm_label": "dropdown-menu.tsx", + "id": "frontend_src_components_ui_dropdown_menu_tsx" + }, + { + "label": "DropdownMenuSubTrigger", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L20", + "community": 41, + "norm_label": "dropdownmenusubtrigger", + "id": "ui_dropdown_menu_dropdownmenusubtrigger" + }, + { + "label": "DropdownMenuSubContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L42", + "community": 41, + "norm_label": "dropdownmenusubcontent", + "id": "ui_dropdown_menu_dropdownmenusubcontent" + }, + { + "label": "DropdownMenuContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L58", + "community": 41, + "norm_label": "dropdownmenucontent", + "id": "ui_dropdown_menu_dropdownmenucontent" + }, + { + "label": "DropdownMenuItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L76", + "community": 41, + "norm_label": "dropdownmenuitem", + "id": "ui_dropdown_menu_dropdownmenuitem" + }, + { + "label": "DropdownMenuCheckboxItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L94", + "community": 41, + "norm_label": "dropdownmenucheckboxitem", + "id": "ui_dropdown_menu_dropdownmenucheckboxitem" + }, + { + "label": "DropdownMenuRadioItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L118", + "community": 41, + "norm_label": "dropdownmenuradioitem", + "id": "ui_dropdown_menu_dropdownmenuradioitem" + }, + { + "label": "DropdownMenuLabel", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L140", + "community": 41, + "norm_label": "dropdownmenulabel", + "id": "ui_dropdown_menu_dropdownmenulabel" + }, + { + "label": "DropdownMenuSeparator", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L158", + "community": 41, + "norm_label": "dropdownmenuseparator", + "id": "ui_dropdown_menu_dropdownmenuseparator" + }, + { + "label": "DropdownMenuShortcut()", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L170", + "community": 41, + "norm_label": "dropdownmenushortcut()", + "id": "ui_dropdown_menu_dropdownmenushortcut" + }, + { + "label": "input.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L1", + "community": 15, + "norm_label": "input.tsx", + "id": "frontend_src_components_ui_input_tsx" + }, + { + "label": "InputProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L4", + "community": 15, + "norm_label": "inputprops", + "id": "ui_input_inputprops" + }, + { + "label": "Input", + "file_type": "code", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L6", + "community": 15, + "norm_label": "input", + "id": "ui_input_input" + }, + { + "label": "label.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "label.tsx", + "id": "frontend_src_components_ui_label_tsx" + }, + { + "label": "Label", + "file_type": "code", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L5", + "community": 7, + "norm_label": "label", + "id": "ui_label_label" + }, + { + "label": "select.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "select.tsx", + "id": "frontend_src_components_ui_select_tsx" + }, + { + "label": "SelectTrigger", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L10", + "community": 7, + "norm_label": "selecttrigger", + "id": "ui_select_selecttrigger" + }, + { + "label": "SelectScrollUpButton", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L30", + "community": 7, + "norm_label": "selectscrollupbutton", + "id": "ui_select_selectscrollupbutton" + }, + { + "label": "SelectScrollDownButton", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L47", + "community": 7, + "norm_label": "selectscrolldownbutton", + "id": "ui_select_selectscrolldownbutton" + }, + { + "label": "SelectContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L65", + "community": 7, + "norm_label": "selectcontent", + "id": "ui_select_selectcontent" + }, + { + "label": "SelectLabel", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L97", + "community": 7, + "norm_label": "selectlabel", + "id": "ui_select_selectlabel" + }, + { + "label": "SelectItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L109", + "community": 7, + "norm_label": "selectitem", + "id": "ui_select_selectitem" + }, + { + "label": "SelectSeparator", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L131", + "community": 7, + "norm_label": "selectseparator", + "id": "ui_select_selectseparator" + }, + { + "label": "table.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "table.tsx", + "id": "frontend_src_components_ui_table_tsx" + }, + { + "label": "Table", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L4", + "community": 7, + "norm_label": "table", + "id": "ui_table_table" + }, + { + "label": "TableBody", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L26", + "community": 7, + "norm_label": "tablebody", + "id": "ui_table_tablebody" + }, + { + "label": "TableFooter", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L38", + "community": 7, + "norm_label": "tablefooter", + "id": "ui_table_tablefooter" + }, + { + "label": "TableRow", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L53", + "community": 7, + "norm_label": "tablerow", + "id": "ui_table_tablerow" + }, + { + "label": "TableHead", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L68", + "community": 7, + "norm_label": "tablehead", + "id": "ui_table_tablehead" + }, + { + "label": "TableCell", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L83", + "community": 7, + "norm_label": "tablecell", + "id": "ui_table_tablecell" + }, + { + "label": "TableCaption", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L98", + "community": 7, + "norm_label": "tablecaption", + "id": "ui_table_tablecaption" + }, + { + "label": "textarea.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L1", + "community": 14, + "norm_label": "textarea.tsx", + "id": "frontend_src_components_ui_textarea_tsx" + }, + { + "label": "TextareaProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L4", + "community": 14, + "norm_label": "textareaprops", + "id": "ui_textarea_textareaprops" + }, + { + "label": "Textarea", + "file_type": "code", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L6", + "community": 14, + "norm_label": "textarea", + "id": "ui_textarea_textarea" + }, + { + "label": "AuthContext.tsx", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L1", + "community": 22, + "norm_label": "authcontext.tsx", + "id": "frontend_src_context_authcontext_tsx" + }, + { + "label": "AuthUser", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L11", + "community": 22, + "norm_label": "authuser", + "id": "context_authcontext_authuser" + }, + { + "label": "AuthContextValue", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L18", + "community": 22, + "norm_label": "authcontextvalue", + "id": "context_authcontext_authcontextvalue" + }, + { + "label": "AuthContext", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L25", + "community": 22, + "norm_label": "authcontext", + "id": "context_authcontext_authcontext" + }, + { + "label": "AuthProvider()", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L27", + "community": 22, + "norm_label": "authprovider()", + "id": "context_authcontext_authprovider" + }, + { + "label": "useAuth()", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L63", + "community": 22, + "norm_label": "useauth()", + "id": "context_authcontext_useauth" + }, + { + "label": "buildingColors.ts", + "file_type": "code", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L1", + "community": 3, + "norm_label": "buildingcolors.ts", + "id": "frontend_src_lib_buildingcolors_ts" + }, + { + "label": "BuildingColorClass", + "file_type": "code", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L3", + "community": 3, + "norm_label": "buildingcolorclass", + "id": "lib_buildingcolors_buildingcolorclass" + }, + { + "label": "BUILDING_LABELS", + "file_type": "code", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L49", + "community": 3, + "norm_label": "building_labels", + "id": "lib_buildingcolors_building_labels" + }, + { + "label": "groupPostConditions.ts", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L1", + "community": 15, + "norm_label": "grouppostconditions.ts", + "id": "frontend_src_lib_grouppostconditions_ts" + }, + { + "label": "GroupByMode", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L17", + "community": 15, + "norm_label": "groupbymode", + "id": "lib_grouppostconditions_groupbymode" + }, + { + "label": "ConditionGroup", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L20", + "community": 15, + "norm_label": "conditiongroup", + "id": "lib_grouppostconditions_conditiongroup" + }, + { + "label": "groupByLevel()", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L53", + "community": 15, + "norm_label": "groupbylevel()", + "id": "lib_grouppostconditions_groupbylevel" + }, + { + "label": "groupByType()", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L74", + "community": 15, + "norm_label": "groupbytype()", + "id": "lib_grouppostconditions_groupbytype" + }, + { + "label": "post-priority.ts", + "file_type": "code", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L1", + "community": 38, + "norm_label": "post-priority.ts", + "id": "frontend_src_lib_post_priority_ts" + }, + { + "label": "priorityLabel()", + "file_type": "code", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L23", + "community": 38, + "norm_label": "prioritylabel()", + "id": "lib_post_priority_prioritylabel" + }, + { + "label": "priorityBadgeColor()", + "file_type": "code", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L27", + "community": 38, + "norm_label": "prioritybadgecolor()", + "id": "lib_post_priority_prioritybadgecolor" + }, + { + "label": "useGroupByPreference.ts", + "file_type": "code", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L1", + "community": 15, + "norm_label": "usegroupbypreference.ts", + "id": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "label": "VALID_MODES", + "file_type": "code", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L14", + "community": 15, + "norm_label": "valid_modes", + "id": "lib_usegroupbypreference_valid_modes" + }, + { + "label": "utils.ts", + "file_type": "code", + "source_file": "frontend/src/lib/utils.ts", + "source_location": "L1", + "community": 1, + "norm_label": "utils.ts", + "id": "frontend_src_lib_utils_ts" + }, + { + "label": "cn()", + "file_type": "code", + "source_file": "frontend/src/lib/utils.ts", + "source_location": "L4", + "community": 14, + "norm_label": "cn()", + "id": "lib_utils_cn" + }, + { + "label": "ROLE_LABELS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L58", + "community": 38, + "norm_label": "role_labels", + "id": "pages_boardpage_role_labels" + }, + { + "label": "ROLE_PRIORITY", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L65", + "community": 38, + "norm_label": "role_priority", + "id": "pages_boardpage_role_priority" + }, + { + "label": "ROLE_COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L72", + "community": 3, + "norm_label": "role_colors", + "id": "pages_boardpage_role_colors" + }, + { + "label": "ROLE_BADGE_COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L79", + "community": 38, + "norm_label": "role_badge_colors", + "id": "pages_boardpage_role_badge_colors" + }, + { + "label": "ROLE_CHIP_COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L87", + "community": 3, + "norm_label": "role_chip_colors", + "id": "pages_boardpage_role_chip_colors" + }, + { + "label": "POWER_LABELS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L94", + "community": 38, + "norm_label": "power_labels", + "id": "pages_boardpage_power_labels" + }, + { + "label": "BUILDING_TYPE_ORDER", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L103", + "community": 3, + "norm_label": "building_type_order", + "id": "pages_boardpage_building_type_order" + }, + { + "label": "DraggableMemberRow()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L254", + "community": 3, + "norm_label": "draggablememberrow()", + "id": "pages_boardpage_draggablememberrow" + }, + { + "label": "MemberDragOverlay()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L322", + "community": 3, + "norm_label": "memberdragoverlay()", + "id": "pages_boardpage_memberdragoverlay" + }, + { + "label": "RoleFilter", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L347", + "community": 3, + "norm_label": "rolefilter", + "id": "pages_boardpage_rolefilter" + }, + { + "label": "ROLE_FILTER_OPTIONS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L349", + "community": 3, + "norm_label": "role_filter_options", + "id": "pages_boardpage_role_filter_options" + }, + { + "label": "MemberBucket()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L357", + "community": 3, + "norm_label": "memberbucket()", + "id": "pages_boardpage_memberbucket" + }, + { + "label": "BuildingTableRow()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L457", + "community": 3, + "norm_label": "buildingtablerow()", + "id": "pages_boardpage_buildingtablerow" + }, + { + "label": "BuildingTypeSection()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L553", + "community": 3, + "norm_label": "buildingtypesection()", + "id": "pages_boardpage_buildingtypesection" + }, + { + "label": "ConditionalDndContext()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L679", + "community": 3, + "norm_label": "conditionaldndcontext()", + "id": "pages_boardpage_conditionaldndcontext" + }, + { + "label": "ActiveTab", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L711", + "community": 3, + "norm_label": "activetab", + "id": "pages_boardpage_activetab" + }, + { + "label": "BoardPage()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L713", + "community": 3, + "norm_label": "boardpage()", + "id": "pages_boardpage_boardpage" + }, + { + "label": "formatPosition()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L17", + "community": 7, + "norm_label": "formatposition()", + "id": "pages_comparisonpage_formatposition" + }, + { + "label": "PositionTag()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L26", + "community": 7, + "norm_label": "positiontag()", + "id": "pages_comparisonpage_positiontag" + }, + { + "label": "MemberPositionsCell()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L41", + "community": 7, + "norm_label": "memberpositionscell()", + "id": "pages_comparisonpage_memberpositionscell" + }, + { + "label": "ComparisonPage()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L67", + "community": 7, + "norm_label": "comparisonpage()", + "id": "pages_comparisonpage_comparisonpage" + }, + { + "label": "LandingPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "landingpage.tsx", + "id": "frontend_src_pages_landingpage_tsx" + }, + { + "label": "LandingOrSieges()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L10", + "community": 22, + "norm_label": "landingorsieges()", + "id": "pages_landingpage_landingorsieges" + }, + { + "label": "SLIDES", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L26", + "community": 1, + "norm_label": "slides", + "id": "pages_landingpage_slides" + }, + { + "label": "ShieldIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L68", + "community": 1, + "norm_label": "shieldicon()", + "id": "pages_landingpage_shieldicon" + }, + { + "label": "GitHubIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L88", + "community": 1, + "norm_label": "githubicon()", + "id": "pages_landingpage_githubicon" + }, + { + "label": "CheckIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L108", + "community": 1, + "norm_label": "checkicon()", + "id": "pages_landingpage_checkicon" + }, + { + "label": "ExternalLinkIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L128", + "community": 1, + "norm_label": "externallinkicon()", + "id": "pages_landingpage_externallinkicon" + }, + { + "label": "COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L150", + "community": 1, + "norm_label": "colors", + "id": "pages_landingpage_colors" + }, + { + "label": "LandingPage()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L157", + "community": 1, + "norm_label": "landingpage()", + "id": "pages_landingpage_landingpage" + }, + { + "label": "ERROR_MESSAGES", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L7", + "community": 1, + "norm_label": "error_messages", + "id": "pages_loginpage_error_messages" + }, + { + "label": "MEMBERSHIP_ERRORS", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L15", + "community": 1, + "norm_label": "membership_errors", + "id": "pages_loginpage_membership_errors" + }, + { + "label": "MobileBanner()", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L18", + "community": 1, + "norm_label": "mobilebanner()", + "id": "pages_loginpage_mobilebanner" + }, + { + "label": "LoginPage()", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L34", + "community": 1, + "norm_label": "loginpage()", + "id": "pages_loginpage_loginpage" + }, + { + "label": "MemberDetailPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L1", + "community": 15, + "norm_label": "memberdetailpage.tsx", + "id": "frontend_src_pages_memberdetailpage_tsx" + }, + { + "label": "ROLE_OPTIONS", + "file_type": "code", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L41", + "community": 15, + "norm_label": "role_options", + "id": "pages_memberdetailpage_role_options" + }, + { + "label": "RoleBadgeVariant", + "file_type": "code", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L43", + "community": 7, + "norm_label": "rolebadgevariant", + "id": "pages_memberspage_rolebadgevariant" + }, + { + "label": "ROLE_VARIANTS", + "file_type": "code", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L45", + "community": 7, + "norm_label": "role_variants", + "id": "pages_memberspage_role_variants" + }, + { + "label": "MembersPage()", + "file_type": "code", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L52", + "community": 7, + "norm_label": "memberspage()", + "id": "pages_memberspage_memberspage" + }, + { + "label": "PostPrioritiesPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "postprioritiespage.tsx", + "id": "frontend_src_pages_postprioritiespage_tsx" + }, + { + "label": "DescriptionCell()", + "file_type": "code", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L30", + "community": 7, + "norm_label": "descriptioncell()", + "id": "pages_postprioritiespage_descriptioncell" + }, + { + "label": "Tab", + "file_type": "code", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L64", + "community": 7, + "norm_label": "tab", + "id": "pages_postprioritiespage_tab" + }, + { + "label": "PostRow()", + "file_type": "code", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L30", + "community": 15, + "norm_label": "postrow()", + "id": "pages_postspage_postrow" + }, + { + "label": "PostsPage()", + "file_type": "code", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L265", + "community": 15, + "norm_label": "postspage()", + "id": "pages_postspage_postspage" + }, + { + "label": "nextTuesdayFrom()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L19", + "community": 7, + "norm_label": "nexttuesdayfrom()", + "id": "pages_siegecreatepage_nexttuesdayfrom" + }, + { + "label": "formatDateLocal()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L27", + "community": 7, + "norm_label": "formatdatelocal()", + "id": "pages_siegecreatepage_formatdatelocal" + }, + { + "label": "suggestNextSiegeDate()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L34", + "community": 7, + "norm_label": "suggestnextsiegedate()", + "id": "pages_siegecreatepage_suggestnextsiegedate" + }, + { + "label": "SiegeCreatePage()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L46", + "community": 7, + "norm_label": "siegecreatepage()", + "id": "pages_siegecreatepage_siegecreatepage" + }, + { + "label": "AttackDaySelect()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L41", + "community": 3, + "norm_label": "attackdayselect()", + "id": "pages_siegememberspage_attackdayselect" + }, + { + "label": "SiegeSettingsPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L1", + "community": 3, + "norm_label": "siegesettingspage.tsx", + "id": "frontend_src_pages_siegesettingspage_tsx" + }, + { + "label": "SiegesPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L1", + "community": 7, + "norm_label": "siegespage.tsx", + "id": "frontend_src_pages_siegespage_tsx" + }, + { + "label": "StatusBadgeVariant", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L17", + "community": 7, + "norm_label": "statusbadgevariant", + "id": "pages_siegespage_statusbadgevariant" + }, + { + "label": "STATUS_VARIANTS", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L19", + "community": 7, + "norm_label": "status_variants", + "id": "pages_siegespage_status_variants" + }, + { + "label": "STATUS_LABELS", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L25", + "community": 7, + "norm_label": "status_labels", + "id": "pages_siegespage_status_labels" + }, + { + "label": "SiegesPage()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L31", + "community": 7, + "norm_label": "siegespage()", + "id": "pages_siegespage_siegespage" + }, + { + "label": "UI_LIBRARIES", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L6", + "community": 40, + "norm_label": "ui_libraries", + "id": "pages_systempage_ui_libraries" + }, + { + "label": "SectionPanel()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L16", + "community": 40, + "norm_label": "sectionpanel()", + "id": "pages_systempage_sectionpanel" + }, + { + "label": "DataRow()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L47", + "community": 14, + "norm_label": "datarow()", + "id": "pages_systempage_datarow" + }, + { + "label": "LibraryRow()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L80", + "community": 40, + "norm_label": "libraryrow()", + "id": "pages_systempage_libraryrow" + }, + { + "label": "SystemPage()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L100", + "community": 40, + "norm_label": "systempage()", + "id": "pages_systempage_systempage" + }, + { + "label": "handlers.ts", + "file_type": "code", + "source_file": "frontend/src/test/handlers.ts", + "source_location": "L1", + "community": 8, + "norm_label": "handlers.ts", + "id": "frontend_src_test_handlers_ts" + }, + { + "label": "handlers", + "file_type": "code", + "source_file": "frontend/src/test/handlers.ts", + "source_location": "L42", + "community": 8, + "norm_label": "handlers", + "id": "test_handlers_handlers" + }, + { + "label": "server.ts", + "file_type": "code", + "source_file": "frontend/src/test/server.ts", + "source_location": "L1", + "community": 1, + "norm_label": "server.ts", + "id": "frontend_src_test_server_ts" + }, + { + "label": "server", + "file_type": "code", + "source_file": "frontend/src/test/server.ts", + "source_location": "L4", + "community": 1, + "norm_label": "server", + "id": "test_server_server" + }, + { + "label": "setup.ts", + "file_type": "code", + "source_file": "frontend/src/test/setup.ts", + "source_location": "L1", + "community": 132, + "norm_label": "setup.ts", + "id": "frontend_src_test_setup_ts" + }, + { + "label": "TestRenderOptions", + "file_type": "code", + "source_file": "frontend/src/test/utils.tsx", + "source_location": "L7", + "community": 1, + "norm_label": "testrenderoptions", + "id": "test_utils_testrenderoptions" + }, + { + "label": "renderWithProviders()", + "file_type": "code", + "source_file": "frontend/src/test/utils.tsx", + "source_location": "L11", + "community": 1, + "norm_label": "renderwithproviders()", + "id": "test_utils_renderwithproviders" + }, + { + "label": "renderCarousel()", + "file_type": "code", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L13", + "community": 1, + "norm_label": "rendercarousel()", + "id": "components_carousel_test_rendercarousel" + }, + { + "label": "track", + "file_type": "code", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L20", + "community": 1, + "norm_label": "track", + "id": "components_carousel_test_track" + }, + { + "label": "dot0", + "file_type": "code", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L40", + "community": 1, + "norm_label": "dot0", + "id": "components_carousel_test_dot0" + }, + { + "label": "viewport", + "file_type": "code", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L116", + "community": 1, + "norm_label": "viewport", + "id": "components_carousel_test_viewport" + }, + { + "label": "ChangelogDropdown.test.tsx", + "file_type": "code", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "changelogdropdown.test.tsx", + "id": "frontend_src_test_components_changelogdropdown_test_tsx" + }, + { + "label": "renderDropdown()", + "file_type": "code", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L58", + "community": 1, + "norm_label": "renderdropdown()", + "id": "components_changelogdropdown_test_renderdropdown" + }, + { + "label": "GroupByConditions.test.tsx", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "groupbyconditions.test.tsx", + "id": "frontend_src_test_components_groupbyconditions_test_tsx" + }, + { + "label": "setupConditions()", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L100", + "community": 1, + "norm_label": "setupconditions()", + "id": "components_groupbyconditions_test_setupconditions" + }, + { + "label": "setupMember()", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L107", + "community": 1, + "norm_label": "setupmember()", + "id": "components_groupbyconditions_test_setupmember" + }, + { + "label": "openConditionsTab()", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L130", + "community": 1, + "norm_label": "openconditionstab()", + "id": "components_groupbyconditions_test_openconditionstab" + }, + { + "label": "elements", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L184", + "community": 1, + "norm_label": "elements", + "id": "components_groupbyconditions_test_elements" + }, + { + "label": "renderMemberDetail()", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L240", + "community": 1, + "norm_label": "rendermemberdetail()", + "id": "components_groupbyconditions_test_rendermemberdetail" + }, + { + "label": "waitForPreferences()", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L249", + "community": 1, + "norm_label": "waitforpreferences()", + "id": "components_groupbyconditions_test_waitforpreferences" + }, + { + "label": "headingTexts", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L278", + "community": 1, + "norm_label": "headingtexts", + "id": "components_groupbyconditions_test_headingtexts" + }, + { + "label": "GroupByToggle.test.tsx", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByToggle.test.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "groupbytoggle.test.tsx", + "id": "frontend_src_test_components_groupbytoggle_test_tsx" + }, + { + "label": "onChange", + "file_type": "code", + "source_file": "frontend/src/test/components/GroupByToggle.test.tsx", + "source_location": "L59", + "community": 1, + "norm_label": "onchange", + "id": "components_groupbytoggle_test_onchange" + }, + { + "label": "renderLanding()", + "file_type": "code", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L18", + "community": 1, + "norm_label": "renderlanding()", + "id": "components_landingpage_test_renderlanding" + }, + { + "label": "signIn", + "file_type": "code", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L55", + "community": 1, + "norm_label": "signin", + "id": "components_landingpage_test_signin" + }, + { + "label": "list", + "file_type": "code", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L71", + "community": 42, + "norm_label": "list", + "id": "components_landingpage_test_list" + }, + { + "label": "bullets", + "file_type": "code", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L72", + "community": 1, + "norm_label": "bullets", + "id": "components_landingpage_test_bullets" + }, + { + "label": "ghLink", + "file_type": "code", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L127", + "community": 1, + "norm_label": "ghlink", + "id": "components_landingpage_test_ghlink" + }, + { + "label": "scrollIntoViewMock", + "file_type": "code", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L192", + "community": 1, + "norm_label": "scrollintoviewmock", + "id": "components_landingpage_test_scrollintoviewmock" + }, + { + "label": "renderLayout()", + "file_type": "code", + "source_file": "frontend/src/test/components/Layout.test.tsx", + "source_location": "L13", + "community": 22, + "norm_label": "renderlayout()", + "id": "components_layout_test_renderlayout" + }, + { + "label": "PostsTab.test.tsx", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L1", + "community": 36, + "norm_label": "poststab.test.tsx", + "id": "frontend_src_test_components_poststab_test_tsx" + }, + { + "label": "makePostBoard()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L65", + "community": 36, + "norm_label": "makepostboard()", + "id": "components_poststab_test_makepostboard" + }, + { + "label": "setupHandlers()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L133", + "community": 1, + "norm_label": "setuphandlers()", + "id": "components_poststab_test_setuphandlers" + }, + { + "label": "navigateToPostsTab()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L159", + "community": 36, + "norm_label": "navigatetopoststab()", + "id": "components_poststab_test_navigatetopoststab" + }, + { + "label": "makeTwoPostBoard()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L299", + "community": 36, + "norm_label": "maketwopostboard()", + "id": "components_poststab_test_maketwopostboard" + }, + { + "label": "board", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L351", + "community": 36, + "norm_label": "board", + "id": "components_poststab_test_board" + }, + { + "label": "post1", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L352", + "community": 36, + "norm_label": "post1", + "id": "components_poststab_test_post1" + }, + { + "label": "post2", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L359", + "community": 36, + "norm_label": "post2", + "id": "components_poststab_test_post2" + }, + { + "label": "postRefs", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L391", + "community": 36, + "norm_label": "postrefs", + "id": "components_poststab_test_postrefs" + }, + { + "label": "labels", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L441", + "community": 36, + "norm_label": "labels", + "id": "components_poststab_test_labels" + }, + { + "label": "btn", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L604", + "community": 36, + "norm_label": "btn", + "id": "components_poststab_test_btn" + }, + { + "label": "makePostPreviewResult()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L611", + "community": 36, + "norm_label": "makepostpreviewresult()", + "id": "components_poststab_test_makepostpreviewresult" + }, + { + "label": "makeOptimalAssignment()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L621", + "community": 36, + "norm_label": "makeoptimalassignment()", + "id": "components_poststab_test_makeoptimalassignment" + }, + { + "label": "makeSuggestionAssignment()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L640", + "community": 36, + "norm_label": "makesuggestionassignment()", + "id": "components_poststab_test_makesuggestionassignment" + }, + { + "label": "chip", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L684", + "community": 36, + "norm_label": "chip", + "id": "components_poststab_test_chip" + }, + { + "label": "suggestBtn", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L762", + "community": 36, + "norm_label": "suggestbtn", + "id": "components_poststab_test_suggestbtn" + }, + { + "label": "applyBtn", + "file_type": "code", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L773", + "community": 36, + "norm_label": "applybtn", + "id": "components_poststab_test_applybtn" + }, + { + "label": "renderModal()", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L93", + "community": 14, + "norm_label": "rendermodal()", + "id": "components_postsuggestionsmodal_test_rendermodal" + }, + { + "label": "rows", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L143", + "community": 14, + "norm_label": "rows", + "id": "components_postsuggestionsmodal_test_rows" + }, + { + "label": "twoSuggestions", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L157", + "community": 14, + "norm_label": "twosuggestions", + "id": "components_postsuggestionsmodal_test_twosuggestions" + }, + { + "label": "onClose", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L233", + "community": 14, + "norm_label": "onclose", + "id": "components_postsuggestionsmodal_test_onclose" + }, + { + "label": "regenerateBtns", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L360", + "community": 14, + "norm_label": "regeneratebtns", + "id": "components_postsuggestionsmodal_test_regeneratebtns" + }, + { + "label": "skippedTile", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L390", + "community": 14, + "norm_label": "skippedtile", + "id": "components_postsuggestionsmodal_test_skippedtile" + }, + { + "label": "allTile", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L400", + "community": 14, + "norm_label": "alltile", + "id": "components_postsuggestionsmodal_test_alltile" + }, + { + "label": "optimalPreview", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L411", + "community": 14, + "norm_label": "optimalpreview", + "id": "components_postsuggestionsmodal_test_optimalpreview" + }, + { + "label": "twoRows", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L516", + "community": 14, + "norm_label": "tworows", + "id": "components_postsuggestionsmodal_test_tworows" + }, + { + "label": "applyRemainingBtn", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L598", + "community": 14, + "norm_label": "applyremainingbtn", + "id": "components_postsuggestionsmodal_test_applyremainingbtn" + }, + { + "label": "expiresAt", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L616", + "community": 14, + "norm_label": "expiresat", + "id": "components_postsuggestionsmodal_test_expiresat" + }, + { + "label": "subtitle", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L631", + "community": 14, + "norm_label": "subtitle", + "id": "components_postsuggestionsmodal_test_subtitle" + }, + { + "label": "slidersIcons", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L724", + "community": 14, + "norm_label": "slidersicons", + "id": "components_postsuggestionsmodal_test_slidersicons" + }, + { + "label": "infoIcons", + "file_type": "code", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L725", + "community": 14, + "norm_label": "infoicons", + "id": "components_postsuggestionsmodal_test_infoicons" + }, + { + "label": "postsLink", + "file_type": "code", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L73", + "community": 22, + "norm_label": "postslink", + "id": "components_siegelayout_test_postslink" + }, + { + "label": "settingsLink", + "file_type": "code", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L79", + "community": 22, + "norm_label": "settingslink", + "id": "components_siegelayout_test_settingslink" + }, + { + "label": "TestConsumer()", + "file_type": "code", + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L12", + "community": 22, + "norm_label": "testconsumer()", + "id": "context_authcontext_test_testconsumer" + }, + { + "label": "makeCond()", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L17", + "community": 15, + "norm_label": "makecond()", + "id": "lib_grouppostconditions_test_makecond" + }, + { + "label": "MIXED", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L27", + "community": 15, + "norm_label": "mixed", + "id": "lib_grouppostconditions_test_mixed" + }, + { + "label": "groups", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L38", + "community": 15, + "norm_label": "groups", + "id": "lib_grouppostconditions_test_groups" + }, + { + "label": "levels", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L39", + "community": 15, + "norm_label": "levels", + "id": "lib_grouppostconditions_test_levels" + }, + { + "label": "descriptions", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L53", + "community": 15, + "norm_label": "descriptions", + "id": "lib_grouppostconditions_test_descriptions" + }, + { + "label": "l1Only", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L59", + "community": 15, + "norm_label": "l1only", + "id": "lib_grouppostconditions_test_l1only" + }, + { + "label": "types", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L72", + "community": 15, + "norm_label": "types", + "id": "lib_grouppostconditions_test_types" + }, + { + "label": "headings", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L80", + "community": 1, + "norm_label": "headings", + "id": "lib_grouppostconditions_test_headings" + }, + { + "label": "factions", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L98", + "community": 15, + "norm_label": "factions", + "id": "lib_grouppostconditions_test_factions" + }, + { + "label": "unknown", + "file_type": "code", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L111", + "community": 15, + "norm_label": "unknown", + "id": "lib_grouppostconditions_test_unknown" + }, + { + "label": "ids", + "file_type": "code", + "source_file": "frontend/src/test/lib/postConditionTypes.test.ts", + "source_location": "L25", + "community": 16, + "norm_label": "ids", + "id": "lib_postconditiontypes_test_ids" + }, + { + "label": "unique", + "file_type": "code", + "source_file": "frontend/src/test/lib/postConditionTypes.test.ts", + "source_location": "L45", + "community": 16, + "norm_label": "unique", + "id": "lib_postconditiontypes_test_unique" + }, + { + "label": "count()", + "file_type": "code", + "source_file": "frontend/src/test/lib/postConditionTypes.test.ts", + "source_location": "L51", + "community": 16, + "norm_label": "count()", + "id": "lib_postconditiontypes_test_count" + }, + { + "label": "BoardPage.test.tsx", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "boardpage.test.tsx", + "id": "frontend_src_test_pages_boardpage_test_tsx" + }, + { + "label": "makeBoard()", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L54", + "community": 2, + "norm_label": "makeboard()", + "id": "pages_boardpage_test_makeboard" + }, + { + "label": "makeSiegeMember()", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L90", + "community": 12, + "norm_label": "makesiegemember()", + "id": "pages_boardpage_test_makesiegemember" + }, + { + "label": "setupDefaultHandlers()", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L107", + "community": 1, + "norm_label": "setupdefaulthandlers()", + "id": "pages_boardpage_test_setupdefaulthandlers" + }, + { + "label": "renderBoard()", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L120", + "community": 1, + "norm_label": "renderboard()", + "id": "pages_boardpage_test_renderboard" + }, + { + "label": "ones", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L174", + "community": 1, + "norm_label": "ones", + "id": "pages_boardpage_test_ones" + }, + { + "label": "disabledEl", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L217", + "community": 1, + "norm_label": "disabledel", + "id": "pages_boardpage_test_disabledel" + }, + { + "label": "user", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L239", + "community": 1, + "norm_label": "user", + "id": "pages_boardpage_test_user" + }, + { + "label": "disabledSpan", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L341", + "community": 1, + "norm_label": "disabledspan", + "id": "pages_boardpage_test_disabledspan" + }, + { + "label": "cell", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L342", + "community": 1, + "norm_label": "cell", + "id": "pages_boardpage_test_cell" + }, + { + "label": "members", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L382", + "community": 1, + "norm_label": "members", + "id": "pages_boardpage_test_members" + }, + { + "label": "searchInput", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L420", + "community": 1, + "norm_label": "searchinput", + "id": "pages_boardpage_test_searchinput" + }, + { + "label": "memberRows", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L508", + "community": 35, + "norm_label": "memberrows", + "id": "pages_boardpage_test_memberrows" + }, + { + "label": "bucketRow", + "file_type": "code", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L510", + "community": 1, + "norm_label": "bucketrow", + "id": "pages_boardpage_test_bucketrow" + }, + { + "label": "link", + "file_type": "code", + "source_file": "frontend/src/test/pages/LoginPage.test.tsx", + "source_location": "L147", + "community": 1, + "norm_label": "link", + "id": "pages_loginpage_test_link" + }, + { + "label": "PostsPage.groupBy.test.tsx", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "postspage.groupby.test.tsx", + "id": "frontend_src_test_pages_postspage_groupby_test_tsx" + }, + { + "label": "SAMPLE_CONDITIONS", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L52", + "community": 1, + "norm_label": "sample_conditions", + "id": "pages_postspage_groupby_test_sample_conditions" + }, + { + "label": "TWO_POSTS", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L111", + "community": 1, + "norm_label": "two_posts", + "id": "pages_postspage_groupby_test_two_posts" + }, + { + "label": "expandFirstPost()", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L150", + "community": 1, + "norm_label": "expandfirstpost()", + "id": "pages_postspage_groupby_test_expandfirstpost" + }, + { + "label": "expandAllPosts()", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L167", + "community": 1, + "norm_label": "expandallposts()", + "id": "pages_postspage_groupby_test_expandallposts" + }, + { + "label": "rowToggle", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L204", + "community": 1, + "norm_label": "rowtoggle", + "id": "pages_postspage_groupby_test_rowtoggle" + }, + { + "label": "masterGroup", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L274", + "community": 1, + "norm_label": "mastergroup", + "id": "pages_postspage_groupby_test_mastergroup" + }, + { + "label": "rowGroups", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L299", + "community": 1, + "norm_label": "rowgroups", + "id": "pages_postspage_groupby_test_rowgroups" + }, + { + "label": "renderPostsPage()", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L41", + "community": 1, + "norm_label": "renderpostspage()", + "id": "pages_postspage_test_renderpostspage" + }, + { + "label": "posts", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L63", + "community": 15, + "norm_label": "posts", + "id": "pages_postspage_test_posts" + }, + { + "label": "postHeadings", + "file_type": "code", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L93", + "community": 15, + "norm_label": "postheadings", + "id": "pages_postspage_test_postheadings" + }, + { + "label": "makePreview()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L61", + "community": 3, + "norm_label": "makepreview()", + "id": "pages_siegememberspage_test_makepreview" + }, + { + "label": "registerHandlers()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L75", + "community": 3, + "norm_label": "registerhandlers()", + "id": "pages_siegememberspage_test_registerhandlers" + }, + { + "label": "renderPage()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L93", + "community": 3, + "norm_label": "renderpage()", + "id": "pages_siegememberspage_test_renderpage" + }, + { + "label": "openPreviewDialog()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L104", + "community": 3, + "norm_label": "openpreviewdialog()", + "id": "pages_siegememberspage_test_openpreviewdialog" + }, + { + "label": "allCells", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L139", + "community": 3, + "norm_label": "allcells", + "id": "pages_siegememberspage_test_allcells" + }, + { + "label": "nameCells", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L158", + "community": 3, + "norm_label": "namecells", + "id": "pages_siegememberspage_test_namecells" + }, + { + "label": "day2Header", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L164", + "community": 3, + "norm_label": "day2header", + "id": "pages_siegememberspage_test_day2header" + }, + { + "label": "day1Names", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L184", + "community": 3, + "norm_label": "day1names", + "id": "pages_siegememberspage_test_day1names" + }, + { + "label": "makeNotifyResponse()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L71", + "community": 3, + "norm_label": "makenotifyresponse()", + "id": "pages_siegesettingspage_test_makenotifyresponse" + }, + { + "label": "makeResult()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L82", + "community": 3, + "norm_label": "makeresult()", + "id": "pages_siegesettingspage_test_makeresult" + }, + { + "label": "makeBatchResponse()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L96", + "community": 3, + "norm_label": "makebatchresponse()", + "id": "pages_siegesettingspage_test_makebatchresponse" + }, + { + "label": "emptyValidation", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L115", + "community": 3, + "norm_label": "emptyvalidation", + "id": "pages_siegesettingspage_test_emptyvalidation" + }, + { + "label": "waitForPageLoad()", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L151", + "community": 3, + "norm_label": "waitforpageload()", + "id": "pages_siegesettingspage_test_waitforpageload" + }, + { + "label": "dialog", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L182", + "community": 3, + "norm_label": "dialog", + "id": "pages_siegesettingspage_test_dialog" + }, + { + "label": "notifyBtn", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L223", + "community": 3, + "norm_label": "notifybtn", + "id": "pages_siegesettingspage_test_notifybtn" + }, + { + "label": "statusEl", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L277", + "community": 3, + "norm_label": "statusel", + "id": "pages_siegesettingspage_test_statusel" + }, + { + "label": "SiegesPage.test.tsx", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "siegespage.test.tsx", + "id": "frontend_src_test_pages_siegespage_test_tsx" + }, + { + "label": "sieges", + "file_type": "code", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L51", + "community": 1, + "norm_label": "sieges", + "id": "pages_siegespage_test_sieges" + }, + { + "label": "changelog.d.ts", + "file_type": "code", + "source_file": "frontend/src/types/changelog.d.ts", + "source_location": "L1", + "community": 98, + "norm_label": "changelog.d.ts", + "id": "frontend_src_types_changelog_d_ts" + }, + { + "label": "ChangelogEntry", + "file_type": "code", + "source_file": "frontend/src/types/changelog.d.ts", + "source_location": "L13", + "community": 98, + "norm_label": "changelogentry", + "id": "types_changelog_d_changelogentry" + }, + { + "label": "bootstrap-db.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-db.ps1", + "source_location": "L1", + "community": 133, + "norm_label": "bootstrap-db.ps1", + "id": "scripts_bootstrap_db_ps1" + }, + { + "label": "bootstrap-excel-import.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-excel-import.ps1", + "source_location": "L1", + "community": 134, + "norm_label": "bootstrap-excel-import.ps1", + "id": "scripts_bootstrap_excel_import_ps1" + }, + { + "label": "bootstrap-images.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-images.ps1", + "source_location": "L1", + "community": 135, + "norm_label": "bootstrap-images.ps1", + "id": "scripts_bootstrap_images_ps1" + }, + { + "label": "bootstrap-keyvault.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-keyvault.ps1", + "source_location": "L1", + "community": 136, + "norm_label": "bootstrap-keyvault.ps1", + "id": "scripts_bootstrap_keyvault_ps1" + }, + { + "label": "bootstrap-reimport.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-reimport.ps1", + "source_location": "L1", + "community": 137, + "norm_label": "bootstrap-reimport.ps1", + "id": "scripts_bootstrap_reimport_ps1" + }, + { + "label": "generate-origin-pfx.ps1", + "file_type": "code", + "source_file": "scripts/generate-origin-pfx.ps1", + "source_location": "L1", + "community": 138, + "norm_label": "generate-origin-pfx.ps1", + "id": "scripts_generate_origin_pfx_ps1" + }, + { + "label": "rebuild.ps1", + "file_type": "code", + "source_file": "scripts/rebuild.ps1", + "source_location": "L1", + "community": 139, + "norm_label": "rebuild.ps1", + "id": "scripts_rebuild_ps1" + }, + { + "label": "import_excel.py", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1", + "community": 21, + "norm_label": "import_excel.py", + "id": "scripts_excel_import_import_excel_py" + }, + { + "label": "ParsedMember", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L160", + "community": 16, + "norm_label": "parsedmember", + "id": "excel_import_import_excel_parsedmember" + }, + { + "label": "ParsedAssignment", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L169", + "community": 16, + "norm_label": "parsedassignment", + "id": "excel_import_import_excel_parsedassignment" + }, + { + "label": "ParsedReserve", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L178", + "community": 16, + "norm_label": "parsedreserve", + "id": "excel_import_import_excel_parsedreserve" + }, + { + "label": "ParsedPostConfig", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L185", + "community": 16, + "norm_label": "parsedpostconfig", + "id": "excel_import_import_excel_parsedpostconfig" + }, + { + "label": "ParsedPostConditions", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L192", + "community": 16, + "norm_label": "parsedpostconditions", + "id": "excel_import_import_excel_parsedpostconditions" + }, + { + "label": "ImportStats", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L198", + "community": 16, + "norm_label": "importstats", + "id": "excel_import_import_excel_importstats" + }, + { + "label": "parse_filename_date()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L224", + "community": 21, + "norm_label": "parse_filename_date()", + "id": "excel_import_import_excel_parse_filename_date" + }, + { + "label": "map_role()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L236", + "community": 21, + "norm_label": "map_role()", + "id": "excel_import_import_excel_map_role" + }, + { + "label": "map_building_alias()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L241", + "community": 21, + "norm_label": "map_building_alias()", + "id": "excel_import_import_excel_map_building_alias" + }, + { + "label": "parse_members_sheet()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L265", + "community": 21, + "norm_label": "parse_members_sheet()", + "id": "excel_import_import_excel_parse_members_sheet" + }, + { + "label": "parse_assignments_sheet()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L337", + "community": 21, + "norm_label": "parse_assignments_sheet()", + "id": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "label": "parse_reserves_sheet()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L445", + "community": 21, + "norm_label": "parse_reserves_sheet()", + "id": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "label": "parse_posts_sheet_config()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L489", + "community": 21, + "norm_label": "parse_posts_sheet_config()", + "id": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "label": "parse_posts_sheet_conditions()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L534", + "community": 21, + "norm_label": "parse_posts_sheet_conditions()", + "id": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "label": "build_group_structure()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L570", + "community": 21, + "norm_label": "build_group_structure()", + "id": "excel_import_import_excel_build_group_structure" + }, + { + "label": "compute_building_group_structure()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L592", + "community": 21, + "norm_label": "compute_building_group_structure()", + "id": "excel_import_import_excel_compute_building_group_structure" + }, + { + "label": "infer_building_level()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L677", + "community": 21, + "norm_label": "infer_building_level()", + "id": "excel_import_import_excel_infer_building_level" + }, + { + "label": "create_building_with_groups_and_positions()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L719", + "community": 21, + "norm_label": "create_building_with_groups_and_positions()", + "id": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "label": "import_file()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L776", + "community": 21, + "norm_label": "import_file()", + "id": "excel_import_import_excel_import_file" + }, + { + "label": "collect_xlsm_files()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1146", + "community": 42, + "norm_label": "collect_xlsm_files()", + "id": "excel_import_import_excel_collect_xlsm_files" + }, + { + "label": "Excel import script for Raid Shadow Legends Siege Assignment Web App. Imports h", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1", + "community": 21, + "norm_label": "excel import script for raid shadow legends siege assignment web app. imports h", + "id": "excel_import_import_excel_rationale_1" + }, + { + "label": "Extract the siege date from a filename like clan_siege_MM_DD_YYYY.xlsm.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L225", + "community": 21, + "norm_label": "extract the siege date from a filename like clan_siege_mm_dd_yyyy.xlsm.", + "id": "excel_import_import_excel_rationale_225" + }, + { + "label": "Map a display role string to its enum value.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L237", + "community": 21, + "norm_label": "map a display role string to its enum value.", + "id": "excel_import_import_excel_rationale_237" + }, + { + "label": "Map a raw building type string to its canonical enum value and optional building", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L242", + "community": 21, + "norm_label": "map a raw building type string to its canonical enum value and optional building", + "id": "excel_import_import_excel_rationale_242" + }, + { + "label": "Parse the 'Members' worksheet. Expected columns: A: name, B: level (i", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L266", + "community": 21, + "norm_label": "parse the 'members' worksheet. expected columns: a: name, b: level (i", + "id": "excel_import_import_excel_rationale_266" + }, + { + "label": "Parse the 'Assignments' worksheet in its visual grid format. Layout:", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L338", + "community": 21, + "norm_label": "parse the 'assignments' worksheet in its visual grid format. layout:", + "id": "excel_import_import_excel_rationale_338" + }, + { + "label": "Parse the 'Reserves' worksheet. Expected columns: A: member_name, B:", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L446", + "community": 21, + "norm_label": "parse the 'reserves' worksheet. expected columns: a: member_name, b:", + "id": "excel_import_import_excel_rationale_446" + }, + { + "label": "Parse post priority and descriptions from the Posts sheet, rows 2\u201317, columns B\u2013", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L490", + "community": 21, + "norm_label": "parse post priority and descriptions from the posts sheet, rows 2\u201317, columns b\u2013", + "id": "excel_import_import_excel_rationale_490" + }, + { + "label": "Parse post active conditions from the Posts sheet, rows 34\u201351, columns D\u2013F.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L535", + "community": 21, + "norm_label": "parse post active conditions from the posts sheet, rows 34\u201351, columns d\u2013f.", + "id": "excel_import_import_excel_rationale_535" + }, + { + "label": "Return a list of slot_counts for each group of the given building type. e.g", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L571", + "community": 21, + "norm_label": "return a list of slot_counts for each group of the given building type. e.g", + "id": "excel_import_import_excel_rationale_571" + }, + { + "label": "Scan the given list of ParsedAssignments and return {group_number: slot_count}", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L597", + "community": 21, + "norm_label": "scan the given list of parsedassignments and return {group_number: slot_count}", + "id": "excel_import_import_excel_rationale_597" + }, + { + "label": "Sum all slot counts in group_structure and look up the level for that building t", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L678", + "community": 21, + "norm_label": "sum all slot counts in group_structure and look up the level for that building t", + "id": "excel_import_import_excel_rationale_678" + }, + { + "label": "Return (member, created). Looks up by name (case-insensitive). Creates if no", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L691", + "community": 21, + "norm_label": "return (member, created). looks up by name (case-insensitive). creates if no", + "id": "excel_import_import_excel_rationale_691" + }, + { + "label": "Create a Building, its BuildingGroups, and their Positions. Uses the provid", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L727", + "community": 21, + "norm_label": "create a building, its buildinggroups, and their positions. uses the provid", + "id": "excel_import_import_excel_rationale_727" + }, + { + "label": "Import a single .xlsm file. Returns ImportStats.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L781", + "community": 21, + "norm_label": "import a single .xlsm file. returns importstats.", + "id": "excel_import_import_excel_rationale_781" + }, + { + "label": "Import a list of .xlsm files into the database.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1073", + "community": 21, + "norm_label": "import a list of .xlsm files into the database.", + "id": "excel_import_import_excel_rationale_1073" + }, + { + "label": "Return a sorted list of .xlsm files from a file path or directory.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1147", + "community": 42, + "norm_label": "return a sorted list of .xlsm files from a file path or directory.", + "id": "excel_import_import_excel_rationale_1147" + }, + { + "label": "test_import_excel.py", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L1", + "community": 28, + "norm_label": "test_import_excel.py", + "id": "scripts_excel_import_tests_test_import_excel_py" + }, + { + "label": "test_parse_filename()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L28", + "community": 85, + "norm_label": "test_parse_filename()", + "id": "tests_test_import_excel_test_parse_filename" + }, + { + "label": "test_parse_filename_with_path_prefix()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L34", + "community": 86, + "norm_label": "test_parse_filename_with_path_prefix()", + "id": "tests_test_import_excel_test_parse_filename_with_path_prefix" + }, + { + "label": "test_parse_filename_invalid_random()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L51", + "community": 73, + "norm_label": "test_parse_filename_invalid_random()", + "id": "tests_test_import_excel_test_parse_filename_invalid_random" + }, + { + "label": "test_parse_filename_invalid_impossible_date()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L57", + "community": 28, + "norm_label": "test_parse_filename_invalid_impossible_date()", + "id": "tests_test_import_excel_test_parse_filename_invalid_impossible_date" + }, + { + "label": "test_role_mapping_heavy_hitter()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L68", + "community": 28, + "norm_label": "test_role_mapping_heavy_hitter()", + "id": "tests_test_import_excel_test_role_mapping_heavy_hitter" + }, + { + "label": "test_role_mapping_advanced()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L72", + "community": 28, + "norm_label": "test_role_mapping_advanced()", + "id": "tests_test_import_excel_test_role_mapping_advanced" + }, + { + "label": "test_role_mapping_medium()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L76", + "community": 28, + "norm_label": "test_role_mapping_medium()", + "id": "tests_test_import_excel_test_role_mapping_medium" + }, + { + "label": "test_role_mapping_novice()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L80", + "community": 28, + "norm_label": "test_role_mapping_novice()", + "id": "tests_test_import_excel_test_role_mapping_novice" + }, + { + "label": "test_role_mapping_unknown_returns_none()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L84", + "community": 28, + "norm_label": "test_role_mapping_unknown_returns_none()", + "id": "tests_test_import_excel_test_role_mapping_unknown_returns_none" + }, + { + "label": "test_building_alias_stronghold()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L93", + "community": 28, + "norm_label": "test_building_alias_stronghold()", + "id": "tests_test_import_excel_test_building_alias_stronghold" + }, + { + "label": "test_building_alias_mana_shrine_full()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L97", + "community": 28, + "norm_label": "test_building_alias_mana_shrine_full()", + "id": "tests_test_import_excel_test_building_alias_mana_shrine_full" + }, + { + "label": "test_building_alias_mana_short()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L101", + "community": 28, + "norm_label": "test_building_alias_mana_short()", + "id": "tests_test_import_excel_test_building_alias_mana_short" + }, + { + "label": "test_building_alias_magic_short()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L109", + "community": 28, + "norm_label": "test_building_alias_magic_short()", + "id": "tests_test_import_excel_test_building_alias_magic_short" + }, + { + "label": "test_building_alias_defense_tower_full()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L113", + "community": 28, + "norm_label": "test_building_alias_defense_tower_full()", + "id": "tests_test_import_excel_test_building_alias_defense_tower_full" + }, + { + "label": "test_building_alias_defense_short()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L117", + "community": 28, + "norm_label": "test_building_alias_defense_short()", + "id": "tests_test_import_excel_test_building_alias_defense_short" + }, + { + "label": "test_building_alias_post()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L121", + "community": 28, + "norm_label": "test_building_alias_post()", + "id": "tests_test_import_excel_test_building_alias_post" + }, + { + "label": "test_building_alias_unknown_returns_none()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L125", + "community": 28, + "norm_label": "test_building_alias_unknown_returns_none()", + "id": "tests_test_import_excel_test_building_alias_unknown_returns_none" + }, + { + "label": "_make_worksheet()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L134", + "community": 48, + "norm_label": "_make_worksheet()", + "id": "tests_test_import_excel_make_worksheet" + }, + { + "label": "test_parse_members_sheet_basic()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L141", + "community": 48, + "norm_label": "test_parse_members_sheet_basic()", + "id": "tests_test_import_excel_test_parse_members_sheet_basic" + }, + { + "label": "test_parse_members_sheet_skips_empty_rows()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L169", + "community": 48, + "norm_label": "test_parse_members_sheet_skips_empty_rows()", + "id": "tests_test_import_excel_test_parse_members_sheet_skips_empty_rows" + }, + { + "label": "test_parse_members_sheet_strips_whitespace()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L183", + "community": 48, + "norm_label": "test_parse_members_sheet_strips_whitespace()", + "id": "tests_test_import_excel_test_parse_members_sheet_strips_whitespace" + }, + { + "label": "test_parse_members_sheet_post_preferences()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L198", + "community": 48, + "norm_label": "test_parse_members_sheet_post_preferences()", + "id": "tests_test_import_excel_test_parse_members_sheet_post_preferences" + }, + { + "label": "_make_assignments_worksheet()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L237", + "community": 58, + "norm_label": "_make_assignments_worksheet()", + "id": "tests_test_import_excel_make_assignments_worksheet" + }, + { + "label": "test_parse_assignments_sheet_member_assignment()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L252", + "community": 58, + "norm_label": "test_parse_assignments_sheet_member_assignment()", + "id": "tests_test_import_excel_test_parse_assignments_sheet_member_assignment" + }, + { + "label": "test_parse_assignments_sheet_skips_unknown_building_type()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L288", + "community": 58, + "norm_label": "test_parse_assignments_sheet_skips_unknown_building_type()", + "id": "tests_test_import_excel_test_parse_assignments_sheet_skips_unknown_building_type" + }, + { + "label": "test_parse_assignments_sheet_skips_incomplete_rows()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L303", + "community": 58, + "norm_label": "test_parse_assignments_sheet_skips_incomplete_rows()", + "id": "tests_test_import_excel_test_parse_assignments_sheet_skips_incomplete_rows" + }, + { + "label": "test_parse_assignments_sheet_empty_value_is_none()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L315", + "community": 58, + "norm_label": "test_parse_assignments_sheet_empty_value_is_none()", + "id": "tests_test_import_excel_test_parse_assignments_sheet_empty_value_is_none" + }, + { + "label": "test_parse_reserves_sheet_basic()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L331", + "community": 48, + "norm_label": "test_parse_reserves_sheet_basic()", + "id": "tests_test_import_excel_test_parse_reserves_sheet_basic" + }, + { + "label": "test_parse_reserves_sheet_skips_empty_rows()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L354", + "community": 48, + "norm_label": "test_parse_reserves_sheet_skips_empty_rows()", + "id": "tests_test_import_excel_test_parse_reserves_sheet_skips_empty_rows" + }, + { + "label": "test_parse_reserves_sheet_invalid_attack_day_ignored()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L366", + "community": 48, + "norm_label": "test_parse_reserves_sheet_invalid_attack_day_ignored()", + "id": "tests_test_import_excel_test_parse_reserves_sheet_invalid_attack_day_ignored" + }, + { + "label": "test_parse_reserves_sheet_case_insensitive_yes_no()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L372", + "community": 48, + "norm_label": "test_parse_reserves_sheet_case_insensitive_yes_no()", + "id": "tests_test_import_excel_test_parse_reserves_sheet_case_insensitive_yes_no" + }, + { + "label": "test_build_group_structure_stronghold()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L389", + "community": 28, + "norm_label": "test_build_group_structure_stronghold()", + "id": "tests_test_import_excel_test_build_group_structure_stronghold" + }, + { + "label": "test_build_group_structure_mana_shrine()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L395", + "community": 87, + "norm_label": "test_build_group_structure_mana_shrine()", + "id": "tests_test_import_excel_test_build_group_structure_mana_shrine" + }, + { + "label": "test_build_group_structure_magic_tower()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L401", + "community": 94, + "norm_label": "test_build_group_structure_magic_tower()", + "id": "tests_test_import_excel_test_build_group_structure_magic_tower" + }, + { + "label": "test_build_group_structure_defense_tower()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L407", + "community": 88, + "norm_label": "test_build_group_structure_defense_tower()", + "id": "tests_test_import_excel_test_build_group_structure_defense_tower" + }, + { + "label": "test_build_group_structure_post()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L413", + "community": 95, + "norm_label": "test_build_group_structure_post()", + "id": "tests_test_import_excel_test_build_group_structure_post" + }, + { + "label": "test_compute_building_group_structure_basic()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L424", + "community": 67, + "norm_label": "test_compute_building_group_structure_basic()", + "id": "tests_test_import_excel_test_compute_building_group_structure_basic" + }, + { + "label": "test_compute_building_group_structure_post_no_inflation()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L472", + "community": 89, + "norm_label": "test_compute_building_group_structure_post_no_inflation()", + "id": "tests_test_import_excel_test_compute_building_group_structure_post_no_inflation" + }, + { + "label": "test_compute_building_group_structure_filters_by_building_number()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L485", + "community": 28, + "norm_label": "test_compute_building_group_structure_filters_by_building_number()", + "id": "tests_test_import_excel_test_compute_building_group_structure_filters_by_building_number" + }, + { + "label": "test_compute_building_group_structure_mana_shrine_level2()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L540", + "community": 72, + "norm_label": "test_compute_building_group_structure_mana_shrine_level2()", + "id": "tests_test_import_excel_test_compute_building_group_structure_mana_shrine_level2" + }, + { + "label": "test_compute_building_group_structure_magic_tower_level3()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L575", + "community": 71, + "norm_label": "test_compute_building_group_structure_magic_tower_level3()", + "id": "tests_test_import_excel_test_compute_building_group_structure_magic_tower_level3" + }, + { + "label": "test_infer_building_level_stronghold_level1()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L615", + "community": 97, + "norm_label": "test_infer_building_level_stronghold_level1()", + "id": "tests_test_import_excel_test_infer_building_level_stronghold_level1" + }, + { + "label": "test_infer_building_level_mana_shrine_level2()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L635", + "community": 90, + "norm_label": "test_infer_building_level_mana_shrine_level2()", + "id": "tests_test_import_excel_test_infer_building_level_mana_shrine_level2" + }, + { + "label": "test_infer_building_level_magic_tower_level1()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L641", + "community": 91, + "norm_label": "test_infer_building_level_magic_tower_level1()", + "id": "tests_test_import_excel_test_infer_building_level_magic_tower_level1" + }, + { + "label": "test_infer_building_level_defense_tower_level4()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L647", + "community": 92, + "norm_label": "test_infer_building_level_defense_tower_level4()", + "id": "tests_test_import_excel_test_infer_building_level_defense_tower_level4" + }, + { + "label": "test_infer_building_level_post()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L653", + "community": 28, + "norm_label": "test_infer_building_level_post()", + "id": "tests_test_import_excel_test_infer_building_level_post" + }, + { + "label": "test_infer_building_level_fallback()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L659", + "community": 96, + "norm_label": "test_infer_building_level_fallback()", + "id": "tests_test_import_excel_test_infer_building_level_fallback" + }, + { + "label": "test_infer_building_level_unknown_building_type_fallback()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L665", + "community": 93, + "norm_label": "test_infer_building_level_unknown_building_type_fallback()", + "id": "tests_test_import_excel_test_infer_building_level_unknown_building_type_fallback" + }, + { + "label": "_make_posts_config_worksheet()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L676", + "community": 59, + "norm_label": "_make_posts_config_worksheet()", + "id": "tests_test_import_excel_make_posts_config_worksheet" + }, + { + "label": "test_parse_posts_sheet_config_basic()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L689", + "community": 59, + "norm_label": "test_parse_posts_sheet_config_basic()", + "id": "tests_test_import_excel_test_parse_posts_sheet_config_basic" + }, + { + "label": "test_parse_posts_sheet_config_default_priority()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L708", + "community": 59, + "norm_label": "test_parse_posts_sheet_config_default_priority()", + "id": "tests_test_import_excel_test_parse_posts_sheet_config_default_priority" + }, + { + "label": "test_parse_posts_sheet_config_multiple_sections()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L720", + "community": 59, + "norm_label": "test_parse_posts_sheet_config_multiple_sections()", + "id": "tests_test_import_excel_test_parse_posts_sheet_config_multiple_sections" + }, + { + "label": "_make_posts_conditions_worksheet()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L745", + "community": 64, + "norm_label": "_make_posts_conditions_worksheet()", + "id": "tests_test_import_excel_make_posts_conditions_worksheet" + }, + { + "label": "test_parse_posts_sheet_conditions_basic()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L757", + "community": 64, + "norm_label": "test_parse_posts_sheet_conditions_basic()", + "id": "tests_test_import_excel_test_parse_posts_sheet_conditions_basic" + }, + { + "label": "test_parse_posts_sheet_conditions_skips_empty()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L777", + "community": 64, + "norm_label": "test_parse_posts_sheet_conditions_skips_empty()", + "id": "tests_test_import_excel_test_parse_posts_sheet_conditions_skips_empty" + }, + { + "label": "_make_empty_worksheet()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L796", + "community": 56, + "norm_label": "_make_empty_worksheet()", + "id": "tests_test_import_excel_make_empty_worksheet" + }, + { + "label": "_make_workbook_mock()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L803", + "community": 56, + "norm_label": "_make_workbook_mock()", + "id": "tests_test_import_excel_make_workbook_mock" + }, + { + "label": "_make_session_mock()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L839", + "community": 56, + "norm_label": "_make_session_mock()", + "id": "tests_test_import_excel_make_session_mock" + }, + { + "label": "test_import_file_section3c_skipped_when_not_most_recent()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L861", + "community": 56, + "norm_label": "test_import_file_section3c_skipped_when_not_most_recent()", + "id": "tests_test_import_excel_test_import_file_section3c_skipped_when_not_most_recent" + }, + { + "label": "test_import_file_section3c_runs_when_most_recent_but_finds_nothing()", + "file_type": "code", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L880", + "community": 56, + "norm_label": "test_import_file_section3c_runs_when_most_recent_but_finds_nothing()", + "id": "tests_test_import_excel_test_import_file_section3c_runs_when_most_recent_but_finds_nothing" + }, + { + "label": "Tests for scripts/import_excel.py parsing logic. All tests are pure-function te", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L1", + "community": 28, + "norm_label": "tests for scripts/import_excel.py parsing logic. all tests are pure-function te", + "id": "tests_test_import_excel_rationale_1" + }, + { + "label": "Extracts a valid date from a canonical MM_DD_YYYY filename.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L29", + "community": 85, + "norm_label": "extracts a valid date from a canonical mm_dd_yyyy filename.", + "id": "tests_test_import_excel_rationale_29" + }, + { + "label": "Extracts date even when the filename has a path prefix passed as string.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L35", + "community": 86, + "norm_label": "extracts date even when the filename has a path prefix passed as string.", + "id": "tests_test_import_excel_rationale_35" + }, + { + "label": "Returns None for a filename that does not match the pattern.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L46", + "community": 73, + "norm_label": "returns none for a filename that does not match the pattern.", + "id": "tests_test_import_excel_rationale_46" + }, + { + "label": "Returns None for a completely unrelated filename.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L52", + "community": 73, + "norm_label": "returns none for a completely unrelated filename.", + "id": "tests_test_import_excel_rationale_52" + }, + { + "label": "Returns None when the extracted date components don't form a valid date.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L58", + "community": 28, + "norm_label": "returns none when the extracted date components don't form a valid date.", + "id": "tests_test_import_excel_rationale_58" + }, + { + "label": "Create a mock openpyxl worksheet that yields the given rows.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L135", + "community": 48, + "norm_label": "create a mock openpyxl worksheet that yields the given rows.", + "id": "tests_test_import_excel_rationale_135" + }, + { + "label": "Parses name, power_level bucket, and role from correct column positions.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L142", + "community": 48, + "norm_label": "parses name, power_level bucket, and role from correct column positions.", + "id": "tests_test_import_excel_rationale_142" + }, + { + "label": "Column E is parsed as a slash-separated list of keyword strings.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L199", + "community": 48, + "norm_label": "column e is parsed as a slash-separated list of keyword strings.", + "id": "tests_test_import_excel_rationale_199" + }, + { + "label": "Empty or None column E results in an empty list.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L212", + "community": 48, + "norm_label": "empty or none column e results in an empty list.", + "id": "tests_test_import_excel_rationale_212" + }, + { + "label": "Build a mock assignments worksheet with the proper two header rows prepended.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L238", + "community": 58, + "norm_label": "build a mock assignments worksheet with the proper two header rows prepended.", + "id": "tests_test_import_excel_rationale_238" + }, + { + "label": "Rows with a None group cell are skipped.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L304", + "community": 58, + "norm_label": "rows with a none group cell are skipped.", + "id": "tests_test_import_excel_rationale_304" + }, + { + "label": "Whitespace-only cell values normalise to None.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L316", + "community": 58, + "norm_label": "whitespace-only cell values normalise to none.", + "id": "tests_test_import_excel_rationale_316" + }, + { + "label": "Stronghold: 4 groups all with 3 slots.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L390", + "community": 28, + "norm_label": "stronghold: 4 groups all with 3 slots.", + "id": "tests_test_import_excel_rationale_390" + }, + { + "label": "Mana shrine: 2 groups both with 3 slots.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L396", + "community": 87, + "norm_label": "mana shrine: 2 groups both with 3 slots.", + "id": "tests_test_import_excel_rationale_396" + }, + { + "label": "Magic tower: 1 group with 2 slots.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L402", + "community": 94, + "norm_label": "magic tower: 1 group with 2 slots.", + "id": "tests_test_import_excel_rationale_402" + }, + { + "label": "Defense tower: 1 group with 2 slots.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L408", + "community": 88, + "norm_label": "defense tower: 1 group with 2 slots.", + "id": "tests_test_import_excel_rationale_408" + }, + { + "label": "Post: 1 group with 1 slot.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L414", + "community": 95, + "norm_label": "post: 1 group with 1 slot.", + "id": "tests_test_import_excel_rationale_414" + }, + { + "label": "Mana shrine with 2 groups: position 3 is an empty trailing sheet column for grou", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L425", + "community": 67, + "norm_label": "mana shrine with 2 groups: position 3 is an empty trailing sheet column for grou", + "id": "tests_test_import_excel_rationale_425" + }, + { + "label": "Magic tower (base_last_slots=2): position 3 is a trailing empty sheet column and", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L445", + "community": 71, + "norm_label": "magic tower (base_last_slots=2): position 3 is a trailing empty sheet column and", + "id": "tests_test_import_excel_rationale_445" + }, + { + "label": "Magic tower at a higher level where position 3 is genuinely filled: slot_cou", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L459", + "community": 71, + "norm_label": "magic tower at a higher level where position 3 is genuinely filled: slot_cou", + "id": "tests_test_import_excel_rationale_459" + }, + { + "label": "Post (base_last_slots=1): positions 2 and 3 are always empty trailing columns.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L473", + "community": 89, + "norm_label": "post (base_last_slots=1): positions 2 and 3 are always empty trailing columns.", + "id": "tests_test_import_excel_rationale_473" + }, + { + "label": "Only assignments for the specified (type, number) pair are counted.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L486", + "community": 28, + "norm_label": "only assignments for the specified (type, number) pair are counted.", + "id": "tests_test_import_excel_rationale_486" + }, + { + "label": "Stronghold level 2 = 16 total slots = 5 full groups (3 slots each) + 1 last grou", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L503", + "community": 67, + "norm_label": "stronghold level 2 = 16 total slots = 5 full groups (3 slots each) + 1 last grou", + "id": "tests_test_import_excel_rationale_503" + }, + { + "label": "Stronghold level 4 = 22 total slots = 7 full groups + 1 last group with 1 slot.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L524", + "community": 67, + "norm_label": "stronghold level 4 = 22 total slots = 7 full groups + 1 last group with 1 slot.", + "id": "tests_test_import_excel_rationale_524" + }, + { + "label": "Mana Shrine level 2 = 7 total slots = 2 full groups + 1 last group with 1 slot.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L541", + "community": 72, + "norm_label": "mana shrine level 2 = 7 total slots = 2 full groups + 1 last group with 1 slot.", + "id": "tests_test_import_excel_rationale_541" + }, + { + "label": "Mana Shrine level 4 = 11 total slots = 3 full groups + 1 last group with 2 slots", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L558", + "community": 72, + "norm_label": "mana shrine level 4 = 11 total slots = 3 full groups + 1 last group with 2 slots", + "id": "tests_test_import_excel_rationale_558" + }, + { + "label": "Magic Tower level 3 = 4 total slots = 1 full group (3 slots) + 1 last group with", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L576", + "community": 71, + "norm_label": "magic tower level 3 = 4 total slots = 1 full group (3 slots) + 1 last group with", + "id": "tests_test_import_excel_rationale_576" + }, + { + "label": "Defense Tower level 4 = 6 total slots = 2 full groups \u00d7 3 slots each. At lev", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L593", + "community": 67, + "norm_label": "defense tower level 4 = 6 total slots = 2 full groups \u00d7 3 slots each. at lev", + "id": "tests_test_import_excel_rationale_593" + }, + { + "label": "12 total positions in a stronghold -> level 1.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L616", + "community": 97, + "norm_label": "12 total positions in a stronghold -> level 1.", + "id": "tests_test_import_excel_rationale_616" + }, + { + "label": "7 total positions in a mana shrine -> level 2.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L636", + "community": 90, + "norm_label": "7 total positions in a mana shrine -> level 2.", + "id": "tests_test_import_excel_rationale_636" + }, + { + "label": "2 total positions in a magic tower -> level 1.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L642", + "community": 91, + "norm_label": "2 total positions in a magic tower -> level 1.", + "id": "tests_test_import_excel_rationale_642" + }, + { + "label": "6 total positions in a defense tower -> level 4.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L648", + "community": 92, + "norm_label": "6 total positions in a defense tower -> level 4.", + "id": "tests_test_import_excel_rationale_648" + }, + { + "label": "1 total position in a post -> level 1.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L654", + "community": 28, + "norm_label": "1 total position in a post -> level 1.", + "id": "tests_test_import_excel_rationale_654" + }, + { + "label": "An unknown total position count falls back to level 1.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L660", + "community": 96, + "norm_label": "an unknown total position count falls back to level 1.", + "id": "tests_test_import_excel_rationale_660" + }, + { + "label": "An unknown building type falls back to level 1.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L666", + "community": 93, + "norm_label": "an unknown building type falls back to level 1.", + "id": "tests_test_import_excel_rationale_666" + }, + { + "label": "Create a mock worksheet for parse_posts_sheet_config. The function calls ws", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L677", + "community": 59, + "norm_label": "create a mock worksheet for parse_posts_sheet_config. the function calls ws", + "id": "tests_test_import_excel_rationale_677" + }, + { + "label": "One high-priority section with two posts: both get priority=3 and correct descri", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L690", + "community": 59, + "norm_label": "one high-priority section with two posts: both get priority=3 and correct descri", + "id": "tests_test_import_excel_rationale_690" + }, + { + "label": "Rows before any priority header default to priority=1 (Low).", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L709", + "community": 59, + "norm_label": "rows before any priority header default to priority=1 (low).", + "id": "tests_test_import_excel_rationale_709" + }, + { + "label": "Posts fall into the correct priority section based on their position.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L721", + "community": 59, + "norm_label": "posts fall into the correct priority section based on their position.", + "id": "tests_test_import_excel_rationale_721" + }, + { + "label": "Create a mock worksheet for parse_posts_sheet_conditions. The function enum", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L746", + "community": 64, + "norm_label": "create a mock worksheet for parse_posts_sheet_conditions. the function enum", + "id": "tests_test_import_excel_rationale_746" + }, + { + "label": "Three post rows with 1\u20133 keywords each are parsed correctly.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L758", + "community": 64, + "norm_label": "three post rows with 1\u20133 keywords each are parsed correctly.", + "id": "tests_test_import_excel_rationale_758" + }, + { + "label": "A row with all-None cells is not included in the result.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L778", + "community": 64, + "norm_label": "a row with all-none cells is not included in the result.", + "id": "tests_test_import_excel_rationale_778" + }, + { + "label": "Worksheet that yields no rows.", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L797", + "community": 56, + "norm_label": "worksheet that yields no rows.", + "id": "tests_test_import_excel_rationale_797" + }, + { + "label": "Minimal openpyxl workbook mock. Members / Assignments / Reserves are empty", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L804", + "community": 56, + "norm_label": "minimal openpyxl workbook mock. members / assignments / reserves are empty", + "id": "tests_test_import_excel_rationale_804" + }, + { + "label": "AsyncMock session whose execute() returns a result whose scalars().all() is [].", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L840", + "community": 56, + "norm_label": "asyncmock session whose execute() returns a result whose scalars().all() is [].", + "id": "tests_test_import_excel_rationale_840" + }, + { + "label": "When is_most_recent=False, section 3c must not run even if the Posts sheet p", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L862", + "community": 56, + "norm_label": "when is_most_recent=false, section 3c must not run even if the posts sheet p", + "id": "tests_test_import_excel_rationale_862" + }, + { + "label": "When is_most_recent=True and the DB has no PostPriorityConfig rows yet, sect", + "file_type": "rationale", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L881", + "community": 56, + "norm_label": "when is_most_recent=true and the db has no postpriorityconfig rows yet, sect", + "id": "tests_test_import_excel_rationale_881" + }, + { + "label": "run-graphify-dry-run.ps1", + "file_type": "code", + "source_file": "scripts/experiments/run-graphify-dry-run.ps1", + "source_location": "L1", + "community": 140, + "norm_label": "run-graphify-dry-run.ps1", + "id": "scripts_experiments_run_graphify_dry_run_ps1" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_run_migrations_offline" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_do_run_migrations" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_run_async_migrations" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_run_migrations_online" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "alembic_env_run_migrations_online", + "target": "alembic_env_run_async_migrations" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0001_initial_schema_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L273", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0001_initial_schema_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0001_initial_schema_rationale_1", + "target": "backend_alembic_versions_0001_initial_schema_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0002_add_preview_columns_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0003_make_siege_date_nullable_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0004_add_post_priority_config_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0005_add_description_to_post_priority_config_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0007_fix_group_number_max_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0009_add_discord_id_to_member_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_25", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0011_add_post_suggest_preview_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0011_add_post_suggest_preview_rationale_23", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0002_add_preview_columns_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0003_make_siege_date_nullable_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0004_add_post_priority_config_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0005_add_description_to_post_priority_config_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0007_fix_group_number_max_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0009_add_discord_id_to_member_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_33", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0011_add_post_suggest_preview_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0011_add_post_suggest_preview_rationale_34", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0002_add_preview_columns_rationale_1", + "target": "backend_alembic_versions_0002_add_preview_columns_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0003_make_siege_date_nullable_rationale_1", + "target": "backend_alembic_versions_0003_make_siege_date_nullable_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0004_add_post_priority_config_rationale_1", + "target": "backend_alembic_versions_0004_add_post_priority_config_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0005_add_description_to_post_priority_config_rationale_1", + "target": "backend_alembic_versions_0005_add_description_to_post_priority_config_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0006_power_level_and_drop_sort_value_rationale_1", + "target": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0007_fix_group_number_max_rationale_1", + "target": "backend_alembic_versions_0007_fix_group_number_max_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0008_add_matched_condition_id_to_position_rationale_1", + "target": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0009_add_discord_id_to_member_rationale_1", + "target": "backend_alembic_versions_0009_add_discord_id_to_member_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_1", + "target": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0011_add_post_suggest_preview_rationale_1", + "target": "backend_alembic_versions_0011_add_post_suggest_preview_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/config.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_config_py", + "target": "app_config_settings" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/app/config.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_config_settings", + "target": "basesettings" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_config.py", + "source_location": "L212", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_config_testsettingsdefaults", + "target": "app_config_settings" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_config.py", + "source_location": "L212", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_config_testenvironmentrequired", + "target": "app_config_settings" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_config.py", + "source_location": "L212", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_config_testlifespanauthguard", + "target": "app_config_settings" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_tests_test_config_endpoint_py", + "target": "app_config_settings" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_config_endpoint_teststartupsessionsecretguard", + "target": "app_config_settings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/main.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_lifespan" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/main.py", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_48", + "target": "app_main_lifespan" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_1", + "target": "bot_app_main_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/middleware.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_middleware_py", + "target": "app_middleware_requestloggingmiddleware" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/middleware.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_middleware_requestloggingmiddleware", + "target": "basehttpmiddleware" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/middleware.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_middleware_requestloggingmiddleware", + "target": "app_middleware_requestloggingmiddleware_dispatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_get_client_ip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_rate_limit_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L179", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_parse_retry_after_seconds" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L217", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_rate_limit_exceeded_handler" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_1", + "target": "backend_app_rate_limit_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rate_limit_key", + "target": "app_rate_limit_get_client_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_53", + "target": "app_rate_limit_get_client_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_155", + "target": "app_rate_limit_rate_limit_key" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L267", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rate_limit_exceeded_handler", + "target": "app_rate_limit_parse_retry_after_seconds" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L180", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_180", + "target": "app_rate_limit_parse_retry_after_seconds" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_218", + "target": "app_rate_limit_rate_limit_exceeded_handler" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/telemetry.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_telemetry_py", + "target": "app_telemetry_configure_telemetry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/telemetry.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_telemetry_rationale_32", + "target": "app_telemetry_configure_telemetry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/telemetry.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_telemetry_rationale_1", + "target": "bot_app_telemetry_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_sieges_previewattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_sieges_applyattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_types_attackdayassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_types_attackdayapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "services_autofill_now_utc" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "services_attack_day_build_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_autherror" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_exchange_code_for_token" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_get_discord_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_check_guild_membership" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_login" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_callback" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_logout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L210", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_me" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L222", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_error_redirect" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_1", + "target": "backend_app_api_auth_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "dependencies_auth_get_current_user" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_rationale_1", + "target": "backend_app_api_auth_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_28", + "target": "api_auth_autherror" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/auth.py", + "source_location": "L17", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_auth_autherror", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/auth.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_auth_autherror", + "target": "api_types_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L137", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_exchange_code_for_token" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_42", + "target": "api_auth_exchange_code_for_token" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_get_discord_user" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_60", + "target": "api_auth_get_discord_user" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_check_guild_membership" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_71", + "target": "api_auth_check_guild_membership" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_78", + "target": "api_auth_login" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_error_redirect" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_118", + "target": "api_auth_callback" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L204", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_204", + "target": "api_auth_logout" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_213", + "target": "api_auth_me" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L223", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_223", + "target": "api_auth_error_redirect" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_sieges_previewautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L122", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_sieges_applyautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_types_autofillassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_types_autofillapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "services_autofill_now_utc" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_board_getboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_posts_updatepost" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_board_bulk_update_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_positionboardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_groupboardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_buildingboardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_types_boardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_positionupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_bulkpositionupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "services_board_get_siege_for_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "services_board_validate_position_state" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "services_board_validate_member_active" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L227", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_board_bulk_update_positions", + "target": "services_board_validate_position_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L172", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_172", + "target": "api_board_bulk_update_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_list_buildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L181", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_add_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L270", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_sieges_updatebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L334", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_sieges_deletebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L346", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_add_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L397", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_delete_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_rebuild_groups_for_level" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L141", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_require_planning_or_not_locked" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_create_groups_and_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L178", + "weight": 1.0, + "source": "api_buildings_list_buildings", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L189", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_add_building", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_add_building", + "target": "services_buildings_create_groups_and_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_add_group", + "target": "api_sieges_getbuildings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L376", + "weight": 1.0, + "source": "api_buildings_add_group", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L407", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_delete_group", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "api_changelog_require_member_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "api_changelog_get_changelog_status" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_1", + "target": "backend_app_api_changelog_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_changelog_rationale_1", + "target": "backend_app_api_changelog_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_get_changelog_status", + "target": "api_changelog_require_member_session" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_markchangelogseen", + "target": "api_changelog_require_member_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_25", + "target": "api_changelog_require_member_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_47", + "target": "api_changelog_get_changelog_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/changelog.py", + "source_location": "L65", + "weight": 1.0, + "source": "api_changelog_get_changelog_status", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L73", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_73", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/comparison.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_comparison_compare_with_most_recent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/comparison.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_comparison_compare_with_specific" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_types_positionkey" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_types_memberdiff" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_types_comparisonresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "services_comparison_load_assignments" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "services_comparison_load_member_names" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "services_comparison_get_most_recent_completed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_sieges_comparesieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/config.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_config_py", + "target": "api_config_get_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/config.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_config_rationale_12", + "target": "api_config_get_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/config.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_config_rationale_1", + "target": "bot_app_config_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_discord_sync_py", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_discord_sync_py", + "target": "api_members_applydiscordsync" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_discord_sync_rationale_1", + "target": "backend_app_api_discord_sync_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_discord_sync_rationale_1", + "target": "backend_app_api_discord_sync_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_discord_sync_rationale_17", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_discord_sync_rationale_26", + "target": "api_members_applydiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/health.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_health_py", + "target": "api_health_health" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "api_health_health" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_78", + "target": "api_health_health" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_images_py", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_images_py", + "target": "api_images_generate_images" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_images_rationale_1", + "target": "backend_app_api_images_py" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_generateimagesresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_notifyresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_notificationresultitem", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_notificationbatchresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_priority_config_postpriorityresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_priority_config_postpriorityupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_siege_members_siegemembercreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_attackdayassignment", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_attackdaypreviewresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_attackdayapplyresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_autofillassignment", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_autofillpreviewresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_autofillapplyresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_positionboardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_groupboardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_buildingboardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_boardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_positionupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_bulkpositionupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_building_buildingcreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_building_buildingupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_positionresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_buildinggroupresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_buildingresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_building_groupcreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_changelog_changelogstatusresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/common.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_common_errorresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_positionkey", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_memberdiff", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_comparisonresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberbase", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberpreferencesupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_syncmatch", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_syncpreviewresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_syncapply", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_syncapplyresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_postresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_postupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_postconditionsupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_condition.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_condition_postconditionresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postsuggestionentry", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postsuggestionpreviewresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_postsuggestionapplyrequest", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_staleentry", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postsuggestionapplyresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_siegecreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_siegeupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_siegeresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_member_siegememberresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_member_siegememberupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_memberpreferencesummary", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_validationissue", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_validationresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/version.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_version_versionresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_notifyrequest", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_postmessagerequest", + "target": "basemodel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L73", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_images_generate_images", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_images_rationale_35", + "target": "api_images_generate_images" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_images_generate_images" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_images_generate_images" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/images.py", + "source_location": "L58", + "weight": 1.0, + "source": "api_images_generate_images", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_activatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_completesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_reopensiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_clonesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_list_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_createmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_get_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_updatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/members.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_delete_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_getmemberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L81", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "services_members_deactivate_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/members.py", + "source_location": "L24", + "weight": 1.0, + "source": "api_members_list_members", + "target": "components_landingpage_test_list" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_get_member", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_get_guild_member", + "target": "api_members_get_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_72", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_updatemember", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_members_deactivate_member", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_getmemberpreferences", + "target": "api_members_get_member" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_get_member", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_62", + "target": "api_members_get_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_get_member", + "target": "app_http_api_get_bot" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_130", + "target": "api_members_get_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_get_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "api_members_get_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_members_get_member" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_notifyresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_notificationresultitem" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_send_dms" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_notifysiegemembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_getnotificationbatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_posttochannel" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_1", + "target": "backend_app_api_notifications_py" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "backend_app_api_notifications_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_65", + "target": "api_notifications_send_dms" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "api_notifications_send_dms" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_send_dms", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_23", + "target": "api_notifications_send_dms" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1028", + "weight": 1.0, + "source": "tests_test_notifications_test_send_dms_sets_completed_status_even_when_bot_raises", + "target": "api_notifications_send_dms" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_142", + "target": "api_notifications_notifysiegemembers" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L310", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_310", + "target": "api_notifications_getnotificationbatch" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L371", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_371", + "target": "api_notifications_posttochannel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_serialize_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_list_posts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_updatepost" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_setpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "services_posts_get_post_for_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_list_posts", + "target": "api_posts_serialize_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "api_posts_serialize_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_setpostconditions", + "target": "api_posts_serialize_post" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_rationale_13", + "target": "api_posts_serialize_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_list_posts", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_posts_rationale_37", + "target": "api_posts_list_posts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/posts.py", + "source_location": "L51", + "weight": 1.0, + "source": "api_posts_list_posts", + "target": "components_landingpage_test_list" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_post_priority_config_postpriorityresponse", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_post_priority_config_postpriorityupdate", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_postpriorityconfig", + "target": "api_post_priority_config_list_post_priorities" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L28", + "weight": 1.0, + "source": "api_post_priority_config_list_post_priorities", + "target": "components_landingpage_test_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L335", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_suggestions_rationale_1", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_types_postsuggestionentry" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "schemas_post_suggestions_staleentry" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_1", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "services_autofill_now_utc" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L517", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "services_post_suggestions_get_target_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L537", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "services_post_suggestions_null_entry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_1", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L418", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_418", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L489", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_489", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_suggestions_rationale_37", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_suggestions_rationale_62", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/reference.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_reference_py", + "target": "api_members_getpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/reference.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_reference_py", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/reference.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_reference_py", + "target": "api_members_getmemberroles" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_list_sieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_createsiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_get_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_updatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_delete_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/sieges.py", + "source_location": "L55", + "weight": 1.0, + "source": "api_sieges_list_sieges", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatesiege", + "target": "api_sieges_get_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_delete_siege", + "target": "api_sieges_get_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_siege_members_siegemembercreate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_siege_members_siegemembercreate", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_siege_members_siegemembercreate", + "target": "schemas_siege_member_siegememberresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_siege_members_siegemembercreate", + "target": "schemas_siege_member_siegememberupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/siege_members.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_siege_members_list_siege_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/siege_members.py", + "source_location": "L39", + "weight": 1.0, + "source": "api_siege_members_list_siege_members", + "target": "components_landingpage_test_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/validation.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_validation_py", + "target": "api_sieges_validatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_validation_py", + "target": "api_types_validationissue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_validation_py", + "target": "api_types_validationresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_read_backend_version" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_getversion", + "target": "api_version_read_backend_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_rationale_20", + "target": "api_version_read_backend_version" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_fetch_bot_version" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_getversion", + "target": "api_version_fetch_bot_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_rationale_43", + "target": "api_version_fetch_bot_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_rationale_57", + "target": "api_version_getversion" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/base.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_base_py", + "target": "base" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/base.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "base", + "target": "declarativebase" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_seeds_py", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_seeds_py", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_seeds_py", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_1", + "target": "backend_app_db_seeds_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_8", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L249", + "weight": 1.0, + "source": "app_main_main", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_schema.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_test_schema_test_post_condition_count", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_test_seed_canonical_run_canonical_seed", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L73", + "weight": 1.0, + "source": "tests_test_seed_demo_run_seed", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_64", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L250", + "weight": 1.0, + "source": "app_main_main", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_schema.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_test_schema_test_building_type_config_count", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_test_seed_canonical_run_canonical_seed", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L74", + "weight": 1.0, + "source": "tests_test_seed_demo_run_seed", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_92", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L251", + "weight": 1.0, + "source": "app_main_main", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_test_seed_canonical_run_canonical_seed", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_test_seed_demo_run_seed", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1085", + "weight": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/session.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_session_py", + "target": "db_session_get_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_get_current_user", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_rationale_24", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L19", + "weight": 0.8, + "confidence_score": 0.5, + "source": "dependencies_auth_authenticateduser", + "target": "api_types_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_rationale_37", + "target": "dependencies_auth_get_current_user" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_building", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_group.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_building_group_buildinggroup", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_type_config.py", + "source_location": "L4", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_building_type_config_py", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/member.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_member", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch_result.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_notification_batch_result_py", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_post", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_condition.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_postcondition", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_priority_config.py", + "source_location": "L4", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_posts_postpriorityconfig", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege_member.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siegemember", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L26", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostconditions", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L26", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedbuildingtypeconfig", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L26", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostpriorityconfig", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemomembers", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiege", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemobuildingsandpositions", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiegemembers", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_group.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_building_group_buildinggroup", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L66", + "weight": 1.0, + "source": "services_buildings_rebuild_groups_for_level", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L160", + "weight": 1.0, + "source": "services_buildings_create_groups_and_positions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L164", + "weight": 1.0, + "source": "api_sieges_clonesiege", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/sieges.py", + "source_location": "L109", + "weight": 1.0, + "source": "api_sieges_createsiege", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L164", + "weight": 1.0, + "source": "scripts_seed_demo_seed_buildings_and_positions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_autofill.py", + "source_location": "L405", + "weight": 1.0, + "source": "tests_test_autofill_test_apply_autofill_skips_broken_building_positions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_test_sieges_seed_siege", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L751", + "weight": 1.0, + "source": "excel_import_import_excel_create_building_with_groups_and_positions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_type_config.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_building_type_config_py", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L27", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostconditions", + "target": "backend_app_models_building_type_config_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L27", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedbuildingtypeconfig", + "target": "backend_app_models_building_type_config_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L27", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostpriorityconfig", + "target": "backend_app_models_building_type_config_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "api_types_siegestatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "api_types_memberrole" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "models_enums_powerlevel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch.py", + "source_location": "L8", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/member.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "api_types_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberbase" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_membercreate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberpreferencesupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "api_types_syncmatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "api_types_syncpreviewresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_syncapply" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_syncapplyresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L17", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "backend_app_models_notification_batch_result_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L17", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "backend_app_models_notification_batch_result_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch_result.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_notification_batch_result_py", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L270", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "backend_app_models_notification_batch_result_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/position.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_position_py", + "target": "models_position_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L787", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "models_position_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L657", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L29", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemomembers", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L29", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiege", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L29", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemobuildingsandpositions", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L29", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiegemembers", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "models_position_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/post.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "api_types_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "schemas_post_postresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "schemas_post_postupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "schemas_post_postconditionsupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/siege.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "api_types_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "schemas_siege_siegecreate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "schemas_siege_siegeupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "schemas_siege_siegeresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_positionboardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_groupboardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_buildingboardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_positionupdate", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_bulkpositionupdate", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "schemas_building_buildingcreate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_building_buildingcreate", + "target": "api_types_buildingtype" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_buildings.py", + "source_location": "L451", + "weight": 1.0, + "source": "tests_test_buildings_test_add_building_post_uses_priority_config", + "target": "schemas_building_buildingcreate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "schemas_building_buildingupdate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_building_buildingupdate", + "target": "api_types_buildingtype" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_buildings.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_groups", + "target": "schemas_building_buildingupdate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_buildings.py", + "source_location": "L223", + "weight": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_last_slot_count", + "target": "schemas_building_buildingupdate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_buildings.py", + "source_location": "L307", + "weight": 1.0, + "source": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip", + "target": "schemas_building_buildingupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "schemas_building_groupcreate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_building_groupcreate", + "target": "api_types_buildingtype" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_changelog_rationale_9", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/changelog.py", + "source_location": "L95", + "weight": 1.0, + "source": "api_changelog_markchangelogseen", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/common.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_schemas_common_py", + "target": "schemas_common_errorresponse" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_membercreate", + "target": "schemas_member_memberbase" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberresponse", + "target": "schemas_member_memberbase" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberbase", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_membercreate", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberupdate", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberpreferencesupdate", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_syncapply", + "target": "api_types_memberrole" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L464", + "weight": 1.0, + "source": "tests_test_discord_sync_test_service_apply_updates_discord_fields", + "target": "schemas_member_syncapply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L490", + "weight": 1.0, + "source": "tests_test_discord_sync_test_service_apply_unknown_member_id_skipped", + "target": "schemas_member_syncapply" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_syncapplyresponse", + "target": "api_types_memberrole" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L158", + "weight": 1.0, + "source": "api_members_applydiscordsync", + "target": "schemas_member_syncapplyresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_test_discord_sync_test_apply_updates_matched_members", + "target": "schemas_member_syncapplyresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L187", + "weight": 1.0, + "source": "tests_test_discord_sync_test_apply_with_empty_list_returns_zero", + "target": "schemas_member_syncapplyresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L203", + "weight": 1.0, + "source": "tests_test_discord_sync_test_apply_with_unknown_member_id_skips_gracefully", + "target": "schemas_member_syncapplyresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_post_postresponse", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_post_postupdate", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_post_postconditionsupdate", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_condition.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postcondition", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_member_siegememberresponse", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_member_siegememberupdate", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_memberpreferencesummary", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_80", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L921", + "weight": 1.0, + "source": "tests_test_post_suggestions_apply", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1170", + "weight": 1.0, + "source": "tests_test_post_suggestions_test_apply_completed_siege_raises_400", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L265", + "weight": 1.0, + "source": "tests_test_post_suggestions_integration_test_apply_persists_matched_condition_id_to_db", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L294", + "weight": 1.0, + "source": "tests_test_post_suggestions_integration_test_apply_subset_leaves_unselected_positions_unchanged", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L358", + "weight": 1.0, + "source": "tests_test_post_suggestions_integration_test_member_changed_stale_reason_on_concurrent_apply", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_92", + "target": "schemas_post_suggestions_staleentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L454", + "weight": 1.0, + "source": "api_sieges_applypostsuggestions", + "target": "schemas_post_suggestions_staleentry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_13", + "target": "api_types_postsuggestionentry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_66", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_117", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_siegecreate", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_siegeupdate", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_siegeresponse", + "target": "api_types_siegestatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "schemas_siege_member_siegememberresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "schemas_siege_member_resolve_member_fields" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "schemas_siege_member_siegememberupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/version.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "schemas_version_versionresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/version.py", + "source_location": "L63", + "weight": 1.0, + "source": "api_version_getversion", + "target": "schemas_version_versionresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewattackday", + "target": "services_attack_day_build_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_attack_day_build_preview", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_applyattackday", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewautofill", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L136", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_applyautofill", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L324", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewpostsuggestions", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L385", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_applypostsuggestions", + "target": "services_autofill_now_utc" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_71", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L151", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_board_validate_position_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_98", + "target": "services_board_validate_position_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_board_validate_member_active" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_16", + "target": "api_board_getboard" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_123", + "target": "api_posts_updatepost" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "app_http_api_notify" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "app_http_api_post_message" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "app_http_api_post_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_1", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_test_bot_client_test_notify_returns_false_on_http_error", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_test_bot_client_test_post_message_returns_false_on_http_error", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_test_bot_client_test_post_image_returns_none_on_http_error", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_test_bot_client_test_get_members_returns_empty_on_http_error", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_test_bot_client_test_notify_returns_true_on_success", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_test_bot_client_test_get_member_returns_not_member", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_test_bot_client_test_get_member_raises_on_connection_error", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_test_bot_client_test_get_member_raises_on_503", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_notify", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_message", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_19", + "target": "app_http_api_notify" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_32", + "target": "app_http_api_post_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_45", + "target": "app_http_api_post_image" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L321", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatebuilding", + "target": "services_buildings_rebuild_groups_for_level" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_buildings_rationale_23", + "target": "services_buildings_rebuild_groups_for_level" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L31", + "weight": 1.0, + "source": "services_buildings_rebuild_groups_for_level", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L45", + "weight": 1.0, + "source": "services_buildings_rebuild_groups_for_level", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L290", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatebuilding", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_default_configs", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_buildings_rationale_142", + "target": "services_buildings_require_planning_or_not_locked" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_buildings_rationale_156", + "target": "services_buildings_create_groups_and_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_building_capacity_py", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_building_capacity_rationale_14", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/sieges.py", + "source_location": "L46", + "weight": 1.0, + "source": "services_sieges_compute_scroll_count", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_comparesieges", + "target": "services_comparison_load_assignments" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_comparison_rationale_14", + "target": "services_comparison_load_assignments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_comparison.py", + "source_location": "L297", + "weight": 1.0, + "source": "tests_test_comparison_test_inactive_member_excluded_from_comparison", + "target": "services_comparison_load_assignments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_comparesieges", + "target": "services_comparison_load_member_names" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_comparison.py", + "source_location": "L376", + "weight": 1.0, + "source": "tests_test_comparison_test_get_most_recent_completed_returns_none", + "target": "services_comparison_get_most_recent_completed" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_discord_sync_rationale_12", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_discord_sync_rationale_153", + "target": "api_members_applydiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L233", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L331", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L350", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_generate_assignments_image" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L360", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_generate_reserves_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_1", + "target": "backend_app_services_image_gen_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L16", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L24", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L24", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L24", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_image_gen_siegememberwithname", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_image_gen_siegememberwithname", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_image_gen_siegememberwithname", + "target": "api_types_boardresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L399", + "weight": 1.0, + "source": "api_notifications_posttochannel", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_test_auth_make_member", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_assignments_image", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_66", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_contains_title", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_contains_building_type", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_reserve_cell", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_disabled_cell", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L125", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_empty_board", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L136", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_all_building_types_colored", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L237", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_present", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L248", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_before_members", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L265", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_single_row_per_group", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L297", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_buildings_side_by_side", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L321", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_heavy_hitter_color", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L334", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_role_map_fallback", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L345", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_color_on_span_not_background", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L416", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_colors_match_ui", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L450", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_level_in_header", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L463", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_broken_building_no_level", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L473", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_building_number_in_thead", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L505", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_flat_table", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L535", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_reserve_and_disabled", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L365", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_reserves_image", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_237", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_contains_title", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L158", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_contains_member", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L358", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_day1_color", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L180", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_no_role_column", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L366", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_novice_color", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L383", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_fallback_color", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L433", + "weight": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_role_colors_match_ui", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L357", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_assignments_image", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L366", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_reserves_image", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_332", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_355", + "target": "services_image_gen_generate_assignments_image" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L201", + "weight": 1.0, + "source": "tests_test_image_gen_test_generate_assignments_image_calls_render", + "target": "services_image_gen_generate_assignments_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L364", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_364", + "target": "services_image_gen_generate_reserves_image" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L218", + "weight": 1.0, + "source": "tests_test_image_gen_test_generate_reserves_image_calls_render", + "target": "services_image_gen_generate_reserves_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_18", + "target": "api_sieges_activatesiege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_62", + "target": "api_sieges_completesiege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_86", + "target": "api_sieges_reopensiege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_110", + "target": "api_sieges_clonesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_position_sort_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_position_label" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_positions_to_key_set" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_positions_from_keys" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L126", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_build_section" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_1", + "target": "backend_app_services_notification_message_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_61", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_notification_message_positioninfo", + "target": "api_types_buildingtype" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L214", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_test_notification_message_stronghold_pos", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_test_notification_message_defense_tower_pos", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_test_notification_message_post_pos", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_75", + "target": "services_notification_message_position_sort_key" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_section", + "target": "services_notification_message_position_label" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_85", + "target": "services_notification_message_position_label" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_member_notification_message", + "target": "services_notification_message_positions_to_key_set" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_111", + "target": "services_notification_message_positions_to_key_set" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L205", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_member_notification_message", + "target": "services_notification_message_positions_from_keys" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_118", + "target": "services_notification_message_positions_from_keys" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_member_notification_message", + "target": "services_notification_message_build_section" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_131", + "target": "services_notification_message_build_section" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L161", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_161", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L262", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_test_notification_message_test_no_previous_siege_all_current_in_set_at", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_test_notification_message_test_empty_sections_omitted_all_no_change", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_test_notification_message_test_full_diff_three_sections", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_test_notification_message_test_header_contains_siege_date_and_member_settings", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L171", + "weight": 1.0, + "source": "tests_test_notification_message_test_none_fields_display_as_unknown", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L185", + "weight": 1.0, + "source": "tests_test_notification_message_test_false_reserve_set_displays_no", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L204", + "weight": 1.0, + "source": "tests_test_notification_message_test_single_building_type_omits_building_number", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_test_notification_message_test_multiple_building_type_includes_building_number", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L245", + "weight": 1.0, + "source": "tests_test_notification_message_test_post_always_uses_short_format", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L260", + "weight": 1.0, + "source": "tests_test_notification_message_test_post_with_single_count_still_uses_short_format", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L282", + "weight": 1.0, + "source": "tests_test_notification_message_test_section_order_no_change_then_remove_then_set_at", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L309", + "weight": 1.0, + "source": "tests_test_notification_message_test_positions_sorted_within_section", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L343", + "weight": 1.0, + "source": "tests_test_notification_message_test_no_change_section_has_header_and_plain_position_lines", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L367", + "weight": 1.0, + "source": "tests_test_notification_message_test_remove_from_section_has_header_and_plain_position_lines", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L391", + "weight": 1.0, + "source": "tests_test_notification_message_test_set_at_section_has_header_and_plain_position_lines", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L419", + "weight": 1.0, + "source": "tests_test_notification_message_test_blank_line_between_no_change_and_remove_from", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L436", + "weight": 1.0, + "source": "tests_test_notification_message_test_blank_line_between_remove_from_and_set_at", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L449", + "weight": 1.0, + "source": "tests_test_notification_message_test_no_blank_line_when_only_one_section", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L471", + "weight": 1.0, + "source": "tests_test_notification_message_test_blank_line_count_with_all_three_sections", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L494", + "weight": 1.0, + "source": "tests_test_notification_message_test_all_three_section_headers_exact_format", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L510", + "weight": 1.0, + "source": "tests_test_notification_message_test_header_line_not_a_position_line", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_setpostconditions", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_posts_get_post_for_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_setpostconditions", + "target": "services_posts_get_post_for_siege_or_404" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_posts_rationale_55", + "target": "api_posts_updatepost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_posts_rationale_79", + "target": "api_posts_setpostconditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewpostsuggestions", + "target": "services_post_suggestions_get_target_position" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L518", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_518", + "target": "services_post_suggestions_get_target_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L170", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewpostsuggestions", + "target": "services_post_suggestions_null_entry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L546", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_546", + "target": "services_post_suggestions_null_entry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_79", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L340", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_340", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_sieges_rationale_20", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/autofill.py", + "source_location": "L77", + "weight": 1.0, + "source": "api_sieges_previewautofill", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/validation.py", + "source_location": "L43", + "weight": 1.0, + "source": "api_sieges_validatesiege", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_sieges_rationale_29", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/autofill.py", + "source_location": "L76", + "weight": 1.0, + "source": "api_sieges_previewautofill", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/validation.py", + "source_location": "L42", + "weight": 1.0, + "source": "api_sieges_validatesiege", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_sieges.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_sums_theoretical_capacity", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_sieges.py", + "source_location": "L255", + "weight": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_broken_building_unchanged", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_sieges.py", + "source_location": "L275", + "weight": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_level_change_updates_count", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_sieges.py", + "source_location": "L305", + "weight": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_post_buildings_contribute_one", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_py", + "target": "app_main_main" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L220", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_seed_siege_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "app_main_main" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L256", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_96", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L687", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L702", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_get_or_create_members", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L835", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L691", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_691", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_test_seed_demo_run_seed", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L261", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_115", + "target": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_test_seed_demo_run_seed", + "target": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L139", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_139", + "target": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L84", + "weight": 1.0, + "source": "tests_test_seed_demo_run_seed", + "target": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L204", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_204", + "target": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L271", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_seed_siege_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L225", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_225", + "target": "scripts_seed_demo_seed_siege_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_test_seed_demo_run_seed", + "target": "scripts_seed_demo_seed_siege_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/conftest.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_conftest_py", + "target": "tests_conftest_disable_auth_for_tests" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/conftest.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_conftest_rationale_31", + "target": "tests_conftest_disable_auth_for_tests" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_conftest_rationale_1", + "target": "bot_tests_conftest_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_preview_attack_day_endpoint_200" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_apply_attack_day_endpoint_200" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_session_for_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_heavy_hitters_and_advanced_always_day2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L129", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_medium_promoted_when_under_10" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_novice_promoted_when_still_under_10" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_pinned_members_count_toward_threshold" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L211", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_overridden_members_not_changed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L227", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_boundary_at_exactly_10" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L245", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_apply_attack_day_commits" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_apply_attack_day_409_no_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L299", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_attack_day_py", + "target": "tests_test_attack_day_test_apply_attack_day_409_expired" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_1", + "target": "backend_tests_test_attack_day_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_heavy_hitters_and_advanced_always_day2", + "target": "tests_test_attack_day_session_for_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L141", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_medium_promoted_when_under_10", + "target": "tests_test_attack_day_session_for_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_novice_promoted_when_still_under_10", + "target": "tests_test_attack_day_session_for_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_pinned_members_count_toward_threshold", + "target": "tests_test_attack_day_session_for_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_overridden_members_not_changed", + "target": "tests_test_attack_day_session_for_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L234", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_boundary_at_exactly_10", + "target": "tests_test_attack_day_session_for_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_heavy_hitters_and_advanced_always_day2", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_heavy_hitters_and_advanced_always_day2", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_heavy_hitters_and_advanced_always_day2", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_114", + "target": "tests_test_attack_day_test_heavy_hitters_and_advanced_always_day2" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_medium_promoted_when_under_10", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_medium_promoted_when_under_10", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L139", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_medium_promoted_when_under_10", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_130", + "target": "tests_test_attack_day_test_medium_promoted_when_under_10" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_novice_promoted_when_still_under_10", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_novice_promoted_when_still_under_10", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L165", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_novice_promoted_when_still_under_10", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_153", + "target": "tests_test_attack_day_test_novice_promoted_when_still_under_10" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L184", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_pinned_members_count_toward_threshold", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L187", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_pinned_members_count_toward_threshold", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_pinned_members_count_toward_threshold", + "target": "tests_test_auth_make_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_183", + "target": "tests_test_attack_day_test_pinned_members_count_toward_threshold" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_overridden_members_not_changed", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L214", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_overridden_members_not_changed", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_212", + "target": "tests_test_attack_day_test_overridden_members_not_changed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L229", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_boundary_at_exactly_10", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L230", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_boundary_at_exactly_10", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L232", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_boundary_at_exactly_10", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L228", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_228", + "target": "tests_test_attack_day_test_boundary_at_exactly_10" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L250", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_apply_attack_day_commits", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L252", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_apply_attack_day_commits", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L246", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_246", + "target": "tests_test_attack_day_test_apply_attack_day_commits" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L280", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_apply_attack_day_409_no_preview", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L277", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_277", + "target": "tests_test_attack_day_test_apply_attack_day_409_no_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L307", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_test_apply_attack_day_409_expired", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_attack_day.py", + "source_location": "L300", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_attack_day_rationale_300", + "target": "tests_test_attack_day_test_apply_attack_day_409_expired" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_make_expired_jwt" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_auth_disabled_allows_access" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_valid_service_token_allows_access" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_invalid_service_token_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_valid_jwt_cookie_allows_access" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_expired_jwt_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_jwt_with_wrong_secret_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_jwt_with_deleted_member_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_no_auth_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L286", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_health_no_auth_required" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L305", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_version_no_auth_required" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L323", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_login_returns_discord_url_and_state_cookie" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L343", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_invalid_state_redirects" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L361", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_happy_path" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L412", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_not_in_guild_redirects" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_insufficient_role_redirects" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L481", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_insufficient_role_missing_role_names_key_redirects" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L516", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_with_required_role_proceeds_to_member_lookup" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L567", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_bot_unreachable_redirects_service_unavailable" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L600", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_callback_no_member_record_redirects" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L647", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_logout_clears_session_cookie" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L660", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_me_with_valid_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L692", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_me_without_auth_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L716", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_teststartupvalidation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L719", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_startup_rejects_empty_session_secret" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L730", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_startup_rejects_missing_bot_service_token_in_production" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L742", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_py", + "target": "tests_test_auth_test_startup_allows_empty_bot_service_token_in_development" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_1", + "target": "backend_tests_test_auth_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L180", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_valid_jwt_cookie_allows_access", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L229", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_jwt_with_wrong_secret_returns_401", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L254", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_jwt_with_deleted_member_returns_401", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L675", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_me_with_valid_session", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_get_status_fresh_user_returns_null", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_mark_seen_then_get_status_returns_timestamp", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_mark_seen_twice_is_idempotent", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_30", + "target": "tests_test_auth_make_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L206", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_expired_jwt_returns_401", + "target": "tests_test_auth_make_expired_jwt" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L173", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_valid_jwt_cookie_allows_access", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L366", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_callback_happy_path", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L522", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_callback_with_required_role_proceeds_to_member_lookup", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L666", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_me_with_valid_session", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_respects_scroll_count", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L188", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_marks_leftover_as_reserve", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L306", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_skips_broken_building_positions", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_get_status_fresh_user_returns_null", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_mark_seen_then_get_status_returns_timestamp", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L160", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_mark_seen_twice_is_idempotent", + "target": "tests_test_auth_make_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_54", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_contains_member", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L357", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_day1_color", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L177", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_no_role_column", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_generate_reserves_image_calls_render", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L365", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_novice_color", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L375", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_fallback_color", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L432", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_reserves_html_role_colors_match_ui", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_build_valid_siege_graph", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_members_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_members_test_create_member_returns_201", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_members_test_delete_member_returns_204", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_test_makesiegemember", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L275", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_get_notification_batch_returns_results", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L560", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skips_member_with_no_discord_username", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L624", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skips_member_not_in_guild", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L683", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_eligible_member_gets_result_row_and_dm", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L749", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skipped_count_reflects_all_skipped_members", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L920", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_bot_unreachable_falls_back_to_username_filter", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L285", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L314", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L340", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L366", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L412", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L449", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L481", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L509", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L533", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L567", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L612", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L664", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L710", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L766", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L787", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L987", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1003", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1037", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1062", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1080", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1098", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_member_changed_returns_409", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1139", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1191", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L217", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_inactive_member_error", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_active_member_no_error", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L263", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L300", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L342", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_exceeds_scroll_count", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L366", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_within_scroll_count", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L554", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_disabled_with_member", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L572", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_reserve_with_member", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L590", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_valid_state", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L708", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L735", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L781", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_missing_attack_day_assigned_member", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L797", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_attack_day_set", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L847", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_no_reserve", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L867", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_advanced_no_reserve", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L887", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_reserve_configured", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L907", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning", + "target": "tests_test_auth_make_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_finds_member_and_sends", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_case_insensitive", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_get_members_returns_correct_dict_format", + "target": "tests_test_auth_make_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_auth_disabled_allows_access", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_valid_service_token_allows_access", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L174", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_valid_jwt_cookie_allows_access", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L248", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_jwt_with_deleted_member_returns_401", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L367", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_callback_happy_path", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L523", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_callback_with_required_role_proceeds_to_member_lookup", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L669", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_test_me_with_valid_session", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_71", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_get_status_fresh_user_returns_null", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_mark_seen_then_get_status_returns_timestamp", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L161", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_mark_seen_twice_is_idempotent", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L250", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_test_get_status_service_token_returns_400", + "target": "tests_test_auth_make_mock_db" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_93", + "target": "tests_test_auth_test_auth_disabled_allows_access" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_118", + "target": "tests_test_auth_test_valid_service_token_allows_access" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_146", + "target": "tests_test_auth_test_invalid_service_token_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L168", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_168", + "target": "tests_test_auth_test_valid_jwt_cookie_allows_access" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_197", + "target": "tests_test_auth_test_expired_jwt_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L219", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_219", + "target": "tests_test_auth_test_jwt_with_wrong_secret_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_242", + "target": "tests_test_auth_test_jwt_with_deleted_member_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L267", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_267", + "target": "tests_test_auth_test_no_auth_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L287", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_287", + "target": "tests_test_auth_test_health_no_auth_required" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L306", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_306", + "target": "tests_test_auth_test_version_no_auth_required" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L324", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_324", + "target": "tests_test_auth_test_login_returns_discord_url_and_state_cookie" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L344", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_344", + "target": "tests_test_auth_test_callback_invalid_state_redirects" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L362", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_362", + "target": "tests_test_auth_test_callback_happy_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L413", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_413", + "target": "tests_test_auth_test_callback_not_in_guild_redirects" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L446", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_446", + "target": "tests_test_auth_test_callback_insufficient_role_redirects" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L482", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_482", + "target": "tests_test_auth_test_callback_insufficient_role_missing_role_names_key_redirects" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L517", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_517", + "target": "tests_test_auth_test_callback_with_required_role_proceeds_to_member_lookup" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L568", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_568", + "target": "tests_test_auth_test_callback_bot_unreachable_redirects_service_unavailable" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L601", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_601", + "target": "tests_test_auth_test_callback_no_member_record_redirects" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L648", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_648", + "target": "tests_test_auth_test_logout_clears_session_cookie" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L661", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_661", + "target": "tests_test_auth_test_me_with_valid_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L693", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rationale_693", + "target": "tests_test_auth_test_me_without_auth_returns_401" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_auth.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_auth_teststartupvalidation", + "target": "api_types_memberrole" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_reset_rate_limit_state" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_login_rate_limit_triggers_429" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L124", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_login_rate_limit_independent_per_ip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_callback_rate_limit_triggers_429" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L194", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_login_no_429_when_auth_disabled" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L209", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_callback_no_429_when_auth_disabled" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L236", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_xff_pathological_header_parses_to_leftmost_ip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L271", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_garbage_xff_falls_back_to_remote_address_bucket" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L301", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_different_garbage_xff_values_share_remote_address_bucket" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L331", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_valid_xff_still_buckets_by_ip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L361", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_429_response_includes_retry_after_header" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L405", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_missing_xff_in_production_logs_warning" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L434", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_missing_xff_in_development_does_not_log_warning" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L464", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_concurrent_absent_xff_in_production_warns_exactly_once" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L534", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_invalid_xff_in_production_logs_warning" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L566", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_invalid_xff_in_development_does_not_log_warning" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L597", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_auth_rate_limit_py", + "target": "tests_test_auth_rate_limit_test_invalid_xff_warning_is_throttled_to_once_per_window" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_1", + "target": "backend_tests_test_auth_rate_limit_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_50", + "target": "tests_test_auth_rate_limit_reset_rate_limit_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_login_rate_limit_triggers_429", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_login_rate_limit_independent_per_ip", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L204", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_login_no_429_when_auth_disabled", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L259", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_xff_pathological_header_parses_to_leftmost_ip", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_garbage_xff_falls_back_to_remote_address_bucket", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L318", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_different_garbage_xff_values_share_remote_address_bucket", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L346", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_valid_xff_still_buckets_by_ip", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L376", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_429_response_includes_retry_after_header", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L425", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_missing_xff_in_production_logs_warning", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L448", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_missing_xff_in_development_does_not_log_warning", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L553", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_invalid_xff_in_production_logs_warning", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L580", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_invalid_xff_in_development_does_not_log_warning", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L618", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_test_invalid_xff_warning_is_throttled_to_once_per_window", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_90", + "target": "tests_test_auth_rate_limit_get" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_101", + "target": "tests_test_auth_rate_limit_test_login_rate_limit_triggers_429" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_125", + "target": "tests_test_auth_rate_limit_test_login_rate_limit_independent_per_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L151", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_151", + "target": "tests_test_auth_rate_limit_test_callback_rate_limit_triggers_429" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L195", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_195", + "target": "tests_test_auth_rate_limit_test_login_no_429_when_auth_disabled" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L210", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_195", + "target": "tests_test_auth_rate_limit_test_callback_no_429_when_auth_disabled" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_237", + "target": "tests_test_auth_rate_limit_test_xff_pathological_header_parses_to_leftmost_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L272", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_272", + "target": "tests_test_auth_rate_limit_test_garbage_xff_falls_back_to_remote_address_bucket" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L302", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_302", + "target": "tests_test_auth_rate_limit_test_different_garbage_xff_values_share_remote_address_bucket" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_332", + "target": "tests_test_auth_rate_limit_test_valid_xff_still_buckets_by_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L362", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_362", + "target": "tests_test_auth_rate_limit_test_429_response_includes_retry_after_header" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L406", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_406", + "target": "tests_test_auth_rate_limit_test_missing_xff_in_production_logs_warning" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L435", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_435", + "target": "tests_test_auth_rate_limit_test_missing_xff_in_development_does_not_log_warning" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L465", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_465", + "target": "tests_test_auth_rate_limit_test_concurrent_absent_xff_in_production_warns_exactly_once" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L535", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_535", + "target": "tests_test_auth_rate_limit_test_invalid_xff_in_production_logs_warning" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L567", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_567", + "target": "tests_test_auth_rate_limit_test_invalid_xff_in_development_does_not_log_warning" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_auth_rate_limit.py", + "source_location": "L598", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_auth_rate_limit_rationale_598", + "target": "tests_test_auth_rate_limit_test_invalid_xff_warning_is_throttled_to_once_per_window" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_posts_make_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L81", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_preview_endpoint_returns_200" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_apply_endpoint_returns_200" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L148", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_preview_respects_scroll_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_preview_marks_leftover_as_reserve" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_apply_commits_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L251", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_apply_returns_409_when_no_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L273", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_apply_returns_409_when_preview_expired" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L299", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_preview_skips_broken_building_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L349", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_enable_sqlite_fk_autofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_schema_db_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L367", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_test_apply_autofill_skips_broken_building_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L466", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_autofill_py", + "target": "tests_test_autofill_make_session_for_preview" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_1", + "target": "backend_tests_test_autofill_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_respects_scroll_count", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_marks_leftover_as_reserve", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L313", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_skips_broken_building_positions", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_groups", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L187", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_last_slot_count", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L263", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L124", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_build_valid_siege_graph", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L215", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L244", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L269", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L317", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L343", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L371", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L418", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L453", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L487", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L515", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L539", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L571", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L620", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L668", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L717", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L770", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L790", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L820", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1195", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L219", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_inactive_member_error", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L239", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_active_member_no_error", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L268", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L306", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L346", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_exceeds_scroll_count", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L368", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_within_scroll_count", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L423", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_invalid_group_number", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L440", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_valid_group_number", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L457", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_position_number_exceeds_slot_count", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L474", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_valid_position_number", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L517", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_multiple_groups", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L539", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_exactly_one_group", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L556", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_disabled_with_member", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L574", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_reserve_with_member", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L592", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_valid_state", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L646", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_empty_unresolved_slot", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L665", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_message_uses_position_name", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L690", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_no_warning_when_disabled", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L714", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L741", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L763", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_missing_attack_day_assigned_member", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L799", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_attack_day_set", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L849", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_no_reserve", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L869", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_advanced_no_reserve", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L889", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_reserve_configured", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L909", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L931", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_fewer_than_3_conditions", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L958", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_has_3_conditions", + "target": "tests_test_autofill_make_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L166", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_respects_scroll_count", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_marks_leftover_as_reserve", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L331", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_skips_broken_building_positions", + "target": "tests_test_autofill_make_sm" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L844", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_autofill_test_preview_endpoint_returns_200" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L845", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_845", + "target": "tests_test_autofill_test_preview_endpoint_returns_200" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L860", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_autofill_test_apply_endpoint_returns_200" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L861", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_861", + "target": "tests_test_autofill_test_apply_endpoint_returns_200" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_respects_scroll_count", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L161", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_respects_scroll_count", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L164", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_respects_scroll_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_respects_scroll_count", + "target": "tests_test_autofill_make_session_for_preview" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_149", + "target": "tests_test_autofill_test_preview_respects_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L189", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_marks_leftover_as_reserve", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_marks_leftover_as_reserve", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L195", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_marks_leftover_as_reserve", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L200", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_marks_leftover_as_reserve", + "target": "tests_test_autofill_make_session_for_preview" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_183", + "target": "tests_test_autofill_test_preview_marks_leftover_as_reserve" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L217", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_apply_commits_preview", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L219", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_apply_commits_preview", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_213", + "target": "tests_test_autofill_test_apply_commits_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L255", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_apply_returns_409_when_no_preview", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L252", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_252", + "target": "tests_test_autofill_test_apply_returns_409_when_no_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L281", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_apply_returns_409_when_preview_expired", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_274", + "target": "tests_test_autofill_test_apply_returns_409_when_preview_expired" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L310", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_skips_broken_building_positions", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L315", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_skips_broken_building_positions", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L329", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_skips_broken_building_positions", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L334", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_test_preview_skips_broken_building_positions", + "target": "tests_test_autofill_make_session_for_preview" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L300", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_300", + "target": "tests_test_autofill_test_preview_skips_broken_building_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L368", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_368", + "target": "tests_test_autofill_test_apply_autofill_skips_broken_building_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_autofill.py", + "source_location": "L467", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_autofill_rationale_467", + "target": "tests_test_autofill_make_session_for_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_board_py", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_board_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_board_py", + "target": "tests_test_board_test_get_board_returns_nested_structure" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_board_py", + "target": "tests_test_board_test_update_position_assign_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_board_py", + "target": "tests_test_board_test_update_position_invalid_state_reserve_with_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L119", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_board_py", + "target": "tests_test_board_test_update_position_not_found" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_board_rationale_1", + "target": "backend_tests_test_board_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_board.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_board_test_update_position_assign_member", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_contains_building_type", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_reserve_cell", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_disabled_cell", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L233", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_present", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L244", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_before_members", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L261", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_single_row_per_group", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_buildings_side_by_side", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L317", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_heavy_hitter_color", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L330", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_role_map_fallback", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_color_on_span_not_background", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L412", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_colors_match_ui", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_level_in_header", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L458", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_broken_building_no_level", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L470", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_building_number_in_thead", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L490", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_flat_table", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L522", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_reserve_and_disabled", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_test_full_siege_lifecycle", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L214", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L243", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L268", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L287", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L316", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L342", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L370", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L417", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L452", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L486", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L514", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L538", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L570", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L619", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L667", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L716", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L769", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L789", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L819", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L986", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1002", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1035", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1061", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1079", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1097", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_member_changed_returns_409", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1137", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1194", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_inactive_member_error", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L238", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_active_member_no_error", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L304", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L344", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_exceeds_scroll_count", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L367", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_within_scroll_count", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L422", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_invalid_group_number", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L439", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_valid_group_number", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L456", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_position_number_exceeds_slot_count", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L473", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_valid_position_number", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L555", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_disabled_with_member", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L573", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_reserve_with_member", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L591", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_valid_state", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L645", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_empty_unresolved_slot", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L662", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_message_uses_position_name", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L689", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_no_warning_when_disabled", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L715", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L742", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L762", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_missing_attack_day_assigned_member", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L798", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_attack_day_set", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L848", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_no_reserve", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L868", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_advanced_no_reserve", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L888", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_reserve_configured", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L908", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_poststab_test_makepostboard", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L314", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_poststab_test_maketwopostboard", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "tests_test_board_make_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_test_makeboard", + "target": "tests_test_board_make_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_members_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L103", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_posts_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L838", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_board_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L839", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_839", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_reference.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_reference_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L138", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_board_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_make_ok_response" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_async_client_that_raises" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_async_client_that_returns" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_notify_returns_false_on_http_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_post_message_returns_false_on_http_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_post_image_returns_none_on_http_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_get_members_returns_empty_on_http_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_notify_returns_true_on_success" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_get_member_returns_not_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_get_member_raises_on_connection_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L132", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_bot_client_py", + "target": "tests_test_bot_client_test_get_member_raises_on_503" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_1", + "target": "backend_tests_test_bot_client_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_notify_returns_true_on_success", + "target": "tests_test_bot_client_make_ok_response" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_get_member_returns_not_member", + "target": "tests_test_bot_client_make_ok_response" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_notify_returns_false_on_http_error", + "target": "tests_test_bot_client_async_client_that_raises" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_post_message_returns_false_on_http_error", + "target": "tests_test_bot_client_async_client_that_raises" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_post_image_returns_none_on_http_error", + "target": "tests_test_bot_client_async_client_that_raises" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_get_members_returns_empty_on_http_error", + "target": "tests_test_bot_client_async_client_that_raises" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_get_member_raises_on_connection_error", + "target": "tests_test_bot_client_async_client_that_raises" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_25", + "target": "tests_test_bot_client_async_client_that_raises" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_notify_returns_true_on_success", + "target": "tests_test_bot_client_async_client_that_returns" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_get_member_returns_not_member", + "target": "tests_test_bot_client_async_client_that_returns" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_test_get_member_raises_on_503", + "target": "tests_test_bot_client_async_client_that_returns" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_25", + "target": "tests_test_bot_client_async_client_that_returns" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_51", + "target": "tests_test_bot_client_test_notify_returns_false_on_http_error" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_60", + "target": "tests_test_bot_client_test_post_message_returns_false_on_http_error" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_69", + "target": "tests_test_bot_client_test_post_image_returns_none_on_http_error" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_78", + "target": "tests_test_bot_client_test_get_members_returns_empty_on_http_error" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_87", + "target": "tests_test_bot_client_test_notify_returns_true_on_success" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_102", + "target": "tests_test_bot_client_test_get_member_returns_not_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_113", + "target": "tests_test_bot_client_test_get_member_returns_not_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L124", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_124", + "target": "tests_test_bot_client_test_get_member_raises_on_connection_error" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_bot_client.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_bot_client_rationale_133", + "target": "tests_test_bot_client_test_get_member_raises_on_503" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_posts_make_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_make_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_make_post_priority_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_scalars_all" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_scalars_first" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_scalar_one_or_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_test_update_building_unbreak_restores_groups" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L172", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_test_update_building_unbreak_restores_last_slot_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L247", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L392", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_buildings_py", + "target": "tests_test_buildings_test_add_building_post_uses_priority_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_1", + "target": "backend_tests_test_buildings_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip", + "target": "tests_test_buildings_make_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L404", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_add_building_post_uses_priority_config", + "target": "tests_test_buildings_make_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_buildings_make_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L979", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_default_configs", + "target": "tests_test_buildings_make_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L401", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_add_building_post_uses_priority_config", + "target": "tests_test_buildings_make_post_priority_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L162", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_buildings_make_post_priority_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L227", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority", + "target": "tests_test_buildings_make_post_priority_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_64", + "target": "tests_test_buildings_scalars_all" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_71", + "target": "tests_test_buildings_scalars_first" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_78", + "target": "tests_test_buildings_scalar_one_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_groups", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_groups", + "target": "tests_test_posts_make_building" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_95", + "target": "tests_test_buildings_test_update_building_unbreak_restores_groups" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_buildings.py", + "source_location": "L161", + "weight": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_groups", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_last_slot_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_unbreak_restores_last_slot_count", + "target": "tests_test_posts_make_building" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L173", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_173", + "target": "tests_test_buildings_test_update_building_unbreak_restores_last_slot_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L257", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L258", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip", + "target": "tests_test_posts_make_building" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L248", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_248", + "target": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_buildings.py", + "source_location": "L313", + "weight": 1.0, + "source": "tests_test_buildings_test_update_building_break_then_unbreak_roundtrip", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L399", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_test_add_building_post_uses_priority_config", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_buildings.py", + "source_location": "L393", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_buildings_rationale_393", + "target": "tests_test_buildings_test_add_building_post_uses_priority_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L81", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_changelog_test_get_status_fresh_user_returns_null" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_changelog_test_mark_seen_then_get_status_returns_timestamp" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_changelog_test_mark_seen_twice_is_idempotent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L193", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_changelog_test_get_status_no_auth_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_changelog_test_post_mark_seen_no_auth_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L243", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_changelog_py", + "target": "tests_test_changelog_test_get_status_service_token_returns_400" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_1", + "target": "backend_tests_test_changelog_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_82", + "target": "tests_test_changelog_test_get_status_fresh_user_returns_null" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_114", + "target": "tests_test_changelog_test_mark_seen_then_get_status_returns_timestamp" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_155", + "target": "tests_test_changelog_test_mark_seen_twice_is_idempotent" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L194", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_194", + "target": "tests_test_changelog_test_get_status_no_auth_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L219", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_219", + "target": "tests_test_changelog_test_post_mark_seen_no_auth_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_changelog.py", + "source_location": "L244", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_changelog_rationale_244", + "target": "tests_test_changelog_test_get_status_service_token_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_compare_returns_404_when_no_completed_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_compare_with_specific_endpoint_200" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L124", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_build_siege_assignments" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_compare_added_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L185", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_compare_removed_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L221", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_compare_unchanged_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L251", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_compare_reserve_positions_excluded" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_inactive_member_excluded_from_comparison" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L307", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_inactive_member_rows_absent_from_comparison_result" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L364", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_comparison_py", + "target": "tests_test_comparison_test_get_most_recent_completed_returns_none" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_1", + "target": "backend_tests_test_comparison_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_test_compare_returns_404_when_no_completed_siege", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_test_compare_added_positions", + "target": "tests_test_comparison_build_siege_assignments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L187", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_test_compare_removed_positions", + "target": "tests_test_comparison_build_siege_assignments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L223", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_test_compare_unchanged_positions", + "target": "tests_test_comparison_build_siege_assignments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L314", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_test_inactive_member_rows_absent_from_comparison_result", + "target": "tests_test_comparison_build_siege_assignments" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_125", + "target": "tests_test_comparison_build_siege_assignments" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_143", + "target": "tests_test_comparison_test_compare_added_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_comparison.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_test_comparison_test_compare_added_positions", + "target": "api_sieges_comparesieges" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L186", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_186", + "target": "tests_test_comparison_test_compare_removed_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_comparison.py", + "source_location": "L214", + "weight": 1.0, + "source": "tests_test_comparison_test_compare_removed_positions", + "target": "api_sieges_comparesieges" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L222", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_222", + "target": "tests_test_comparison_test_compare_unchanged_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_comparison.py", + "source_location": "L243", + "weight": 1.0, + "source": "tests_test_comparison_test_compare_unchanged_positions", + "target": "api_sieges_comparesieges" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L252", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_252", + "target": "tests_test_comparison_test_compare_reserve_positions_excluded" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_comparison.py", + "source_location": "L271", + "weight": 1.0, + "source": "tests_test_comparison_test_compare_reserve_positions_excluded", + "target": "api_sieges_comparesieges" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L277", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_277", + "target": "tests_test_comparison_test_inactive_member_excluded_from_comparison" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L308", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_308", + "target": "tests_test_comparison_test_inactive_member_rows_absent_from_comparison_result" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_comparison.py", + "source_location": "L340", + "weight": 1.0, + "source": "tests_test_comparison_test_inactive_member_rows_absent_from_comparison_result", + "target": "api_sieges_comparesieges" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L366", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_test_get_most_recent_completed_returns_none", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L349", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_349", + "target": "tests_test_comparison_test_get_most_recent_completed_returns_none" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_comparison.py", + "source_location": "L365", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_comparison_rationale_365", + "target": "tests_test_comparison_test_get_most_recent_completed_returns_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_py", + "target": "tests_test_config_testsettingsdefaults" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L99", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_py", + "target": "tests_test_config_testenvironmentrequired" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L126", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_py", + "target": "tests_test_config_testlifespanauthguard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_py", + "target": "tests_test_config_test_auth_disabled_allowed_in_development" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L162", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_py", + "target": "tests_test_config_test_auth_disabled_rejected_in_production" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L186", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_py", + "target": "tests_test_config_test_auth_disabled_rejected_in_test_environment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L208", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_py", + "target": "tests_test_config_test_auth_not_disabled_allowed_in_any_environment" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_rationale_1", + "target": "backend_tests_test_config_py" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_discord_client_id_defaults_to_empty" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_discord_client_secret_defaults_to_empty" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_discord_redirect_uri_defaults_to_empty" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_session_secret_defaults_to_empty" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_bot_service_token_defaults_to_empty" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_auth_disabled_defaults_to_false" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_discord_required_role_defaults_to_clan_deputies" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_discord_required_role_accepts_override" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_allowed_origins_defaults_to_localhost" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_allowed_origins_accepts_override" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_allowed_origins_accepts_comma_separated_values" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults", + "target": "tests_test_config_testsettingsdefaults_test_new_fields_accept_provided_values" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_rationale_24", + "target": "tests_test_config_testsettingsdefaults" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_discord_client_id_defaults_to_empty", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_discord_client_secret_defaults_to_empty", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_discord_redirect_uri_defaults_to_empty", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_session_secret_defaults_to_empty", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_bot_service_token_defaults_to_empty", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_auth_disabled_defaults_to_false", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_discord_required_role_defaults_to_clan_deputies", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_discord_required_role_accepts_override", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_allowed_origins_defaults_to_localhost", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_allowed_origins_accepts_override", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_allowed_origins_accepts_comma_separated_values", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testsettingsdefaults_test_new_fields_accept_provided_values", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_rationale_27", + "target": "tests_test_config_testsettingsdefaults_make_settings" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_testenvironmentrequired", + "target": "tests_test_config_testenvironmentrequired_test_missing_environment_raises_validation_error" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_rationale_100", + "target": "tests_test_config_testenvironmentrequired" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_rationale_127", + "target": "tests_test_config_testlifespanauthguard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_health_mock_db" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_override_db" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_test_config_returns_auth_disabled_true" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_test_config_endpoint_is_public" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_teststartupsessionsecretguard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_test_missing_session_secret_raises_at_startup" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_test_changeme_placeholder_raises_at_startup" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L173", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_test_changeme_uppercase_raises_at_startup" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_config_endpoint_py", + "target": "tests_test_config_endpoint_test_present_session_secret_does_not_raise" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_endpoint_rationale_1", + "target": "backend_tests_test_config_endpoint_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_endpoint_rationale_37", + "target": "backend_tests_test_config_endpoint_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_config_endpoint.py", + "source_location": "L124", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_config_endpoint_rationale_124", + "target": "tests_test_config_endpoint_teststartupsessionsecretguard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_cors_py", + "target": "tests_test_cors_make_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_cors_py", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_cors_py", + "target": "tests_test_cors_testallowedoriginsparsingintegration" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_cors_py", + "target": "tests_test_cors_testallowedoriginreceivescorsheaders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_cors_py", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_cors_py", + "target": "tests_test_cors_testpreflightrequest" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_1", + "target": "backend_tests_test_cors_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_single_origin_is_allowed", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L73", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_first_of_two_origins_is_allowed", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_second_of_two_origins_is_allowed", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_around_origins_is_stripped", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_trailing_comma_is_ignored", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_leading_comma_is_ignored", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_only_entries_are_excluded", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L122", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders_test_allowed_origin_acao_matches_request_origin", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L134", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders_test_localhost_dev_origin_allowed_by_default_config", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L148", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_disallowed_origin_has_no_acao_header", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_subdomain_not_allowed_when_only_apex_configured", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L160", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_http_disallowed_when_only_https_configured", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L166", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_wrong_port_disallowed", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L180", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testpreflightrequest_test_preflight_allowed_origin_returns_200", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testpreflightrequest_test_preflight_disallowed_origin_has_no_acao", + "target": "tests_test_cors_make_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_27", + "target": "tests_test_cors_make_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_single_origin_is_allowed", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_first_of_two_origins_is_allowed", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_second_of_two_origins_is_allowed", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_around_origins_is_stripped", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_trailing_comma_is_ignored", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_leading_comma_is_ignored", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L103", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_only_entries_are_excluded", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L129", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders_test_allowed_origin_acao_matches_request_origin", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders_test_localhost_dev_origin_allowed_by_default_config", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_disallowed_origin_has_no_acao_header", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_subdomain_not_allowed_when_only_apex_configured", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L161", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_http_disallowed_when_only_https_configured", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_wrong_port_disallowed", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_53", + "target": "tests_test_cors_cors_headers" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_single_origin_is_allowed" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_first_of_two_origins_is_allowed" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_second_of_two_origins_is_allowed" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_around_origins_is_stripped" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_trailing_comma_is_ignored" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_leading_comma_is_ignored" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginsparsingintegration", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_only_entries_are_excluded" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_65", + "target": "tests_test_cors_testallowedoriginsparsingintegration" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_83", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_around_origins_is_stripped" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_89", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_trailing_comma_is_ignored" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_95", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_leading_comma_is_ignored" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_101", + "target": "tests_test_cors_testallowedoriginsparsingintegration_test_whitespace_only_entries_are_excluded" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders", + "target": "tests_test_cors_testallowedoriginreceivescorsheaders_test_allowed_origin_acao_matches_request_origin" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L132", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testallowedoriginreceivescorsheaders", + "target": "tests_test_cors_testallowedoriginreceivescorsheaders_test_localhost_dev_origin_allowed_by_default_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_113", + "target": "tests_test_cors_testallowedoriginreceivescorsheaders" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_127", + "target": "tests_test_cors_testallowedoriginreceivescorsheaders" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_121", + "target": "tests_test_cors_testallowedoriginreceivescorsheaders_test_allowed_origin_acao_matches_request_origin" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_133", + "target": "tests_test_cors_testallowedoriginreceivescorsheaders_test_localhost_dev_origin_allowed_by_default_config" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L147", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_disallowed_origin_has_no_acao_header" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_subdomain_not_allowed_when_only_apex_configured" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_http_disallowed_when_only_https_configured" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L164", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_wrong_port_disallowed" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_145", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_153", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_subdomain_not_allowed_when_only_apex_configured" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_159", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_http_disallowed_when_only_https_configured" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L165", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_165", + "target": "tests_test_cors_testdisallowedoriginreceivesnocorsheaders_test_wrong_port_disallowed" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L179", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testpreflightrequest", + "target": "tests_test_cors_testpreflightrequest_test_preflight_allowed_origin_returns_200" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L191", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_testpreflightrequest", + "target": "tests_test_cors_testpreflightrequest_test_preflight_disallowed_origin_has_no_acao" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_cors.py", + "source_location": "L177", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_cors_rationale_177", + "target": "tests_test_cors_testpreflightrequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_make_sync_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_preview_returns_exact_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_preview_returns_suggested_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_preview_returns_ambiguous_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_preview_reports_unmatched_clan_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L160", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_apply_updates_matched_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L181", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_apply_with_empty_list_returns_zero" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_apply_with_unknown_member_id_skips_gracefully" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L262", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_service_preview_exact_discord_id_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_service_preview_suggested_name_username_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L368", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_service_preview_ambiguous_multiple_guild_matches" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L406", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_service_preview_unmatched_guild_and_clan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L442", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_service_apply_updates_discord_fields" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L474", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_service_apply_unknown_member_id_skipped" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L498", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_discord_sync_py", + "target": "tests_test_discord_sync_test_service_apply_empty_list_returns_zero" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_1", + "target": "backend_tests_test_discord_sync_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_test_preview_returns_exact_match", + "target": "tests_test_discord_sync_make_sync_match" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_test_preview_returns_suggested_match", + "target": "tests_test_discord_sync_make_sync_match" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_test_preview_returns_ambiguous_match", + "target": "tests_test_discord_sync_make_sync_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_51", + "target": "tests_test_discord_sync_test_preview_returns_exact_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_76", + "target": "tests_test_discord_sync_test_preview_returns_suggested_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_96", + "target": "tests_test_discord_sync_test_preview_returns_ambiguous_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_116", + "target": "tests_test_discord_sync_test_preview_reports_unmatched_clan_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L136", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_136", + "target": "tests_test_discord_sync_test_preview_reports_unmatched_clan_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L161", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_161", + "target": "tests_test_discord_sync_test_apply_updates_matched_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_182", + "target": "tests_test_discord_sync_test_apply_with_empty_list_returns_zero" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_197", + "target": "tests_test_discord_sync_test_apply_with_unknown_member_id_skips_gracefully" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L224", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_224", + "target": "tests_test_discord_sync_test_service_preview_exact_discord_id_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L263", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_263", + "target": "tests_test_discord_sync_test_service_preview_exact_discord_id_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L298", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_298", + "target": "tests_test_discord_sync_test_service_preview_suggested_name_username_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L333", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_333", + "target": "tests_test_discord_sync_test_service_preview_suggested_name_username_match" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L369", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_369", + "target": "tests_test_discord_sync_test_service_preview_ambiguous_multiple_guild_matches" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L407", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_407", + "target": "tests_test_discord_sync_test_service_preview_unmatched_guild_and_clan" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L443", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_443", + "target": "tests_test_discord_sync_test_service_apply_updates_discord_fields" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L475", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_475", + "target": "tests_test_discord_sync_test_service_apply_unknown_member_id_skipped" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_discord_sync.py", + "source_location": "L499", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_sync_rationale_499", + "target": "tests_test_discord_sync_test_service_apply_empty_list_returns_zero" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_enums.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_enums_py", + "target": "tests_test_enums_test_building_type_labels_covers_all_values" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_enums.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_enums_py", + "target": "tests_test_enums_test_building_type_labels_are_friendly_strings" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_enums.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_enums_rationale_1", + "target": "backend_tests_test_enums_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_enums.py", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_enums_rationale_7", + "target": "tests_test_enums_test_building_type_labels_covers_all_values" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_enums.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_enums_rationale_17", + "target": "tests_test_enums_test_building_type_labels_are_friendly_strings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_health.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_health_py", + "target": "tests_test_health_mock_db" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_health.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_health_py", + "target": "tests_test_health_test_health_returns_healthy" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_health.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_health_rationale_19", + "target": "tests_test_health_test_health_returns_healthy" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "pages_boardpage_test_makeboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_contains_title" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_contains_building_type" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L105", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_reserve_cell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_disabled_cell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_empty_board" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_all_building_types_colored" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_reserves_html_contains_title" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_reserves_html_contains_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_reserves_html_day1_color" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L174", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_reserves_html_no_role_column" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L194", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_generate_assignments_image_calls_render" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L211", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_generate_reserves_image_calls_render" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L231", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_group_header_present" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_group_header_before_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L254", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_single_row_per_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L281", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_buildings_side_by_side" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L315", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_heavy_hitter_color" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L328", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_no_role_map_fallback" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L339", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_role_color_on_span_not_background" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L363", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_reserves_html_novice_color" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L371", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_reserves_html_fallback_color" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L405", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_role_colors_match_ui" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L430", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_reserves_html_role_colors_match_ui" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L443", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_no_level_in_header" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L456", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_broken_building_no_level" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L468", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_building_number_in_thead" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L482", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_post_flat_table" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L516", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_image_gen_py", + "target": "tests_test_image_gen_test_build_assignments_html_post_reserve_and_disabled" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_1", + "target": "backend_tests_test_image_gen_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_contains_building_type", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_reserve_cell", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_disabled_cell", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L132", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_all_building_types_colored", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L235", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_present", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L246", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_before_members", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L263", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_single_row_per_group", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L290", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_buildings_side_by_side", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L319", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_heavy_hitter_color", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_role_map_fallback", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L343", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_color_on_span_not_background", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L414", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_colors_match_ui", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L446", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_level_in_header", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L459", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_broken_building_no_level", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L471", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_building_number_in_thead", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L484", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_flat_table", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L518", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_reserve_and_disabled", + "target": "tests_test_image_gen_make_building_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_contains_building_type", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_reserve_cell", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_disabled_cell", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L233", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_present", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L244", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_group_header_before_members", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L262", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_single_row_per_group", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_buildings_side_by_side", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L318", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_heavy_hitter_color", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L331", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_role_map_fallback", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L342", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_color_on_span_not_background", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L413", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_role_colors_match_ui", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_no_level_in_header", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L458", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_broken_building_no_level", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L470", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_building_number_in_thead", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L488", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_flat_table", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L522", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_post_reserve_and_disabled", + "target": "tests_test_image_gen_make_group_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_contains_title", + "target": "pages_boardpage_test_makeboard" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L124", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_build_assignments_html_empty_board", + "target": "pages_boardpage_test_makeboard" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_356", + "target": "tests_test_image_gen_test_build_reserves_html_day1_color" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L175", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_175", + "target": "tests_test_image_gen_test_build_reserves_html_no_role_column" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L195", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_test_generate_assignments_image_calls_render", + "target": "pages_boardpage_test_makeboard" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L232", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_232", + "target": "tests_test_image_gen_test_build_assignments_html_group_header_present" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L243", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_243", + "target": "tests_test_image_gen_test_build_assignments_html_group_header_before_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L255", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_255", + "target": "tests_test_image_gen_test_build_assignments_html_single_row_per_group" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L282", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_282", + "target": "tests_test_image_gen_test_build_assignments_html_buildings_side_by_side" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L316", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_316", + "target": "tests_test_image_gen_test_build_assignments_html_heavy_hitter_color" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L329", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_329", + "target": "tests_test_image_gen_test_build_assignments_html_no_role_map_fallback" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L340", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_340", + "target": "tests_test_image_gen_test_build_assignments_html_role_color_on_span_not_background" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L364", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_364", + "target": "tests_test_image_gen_test_build_reserves_html_novice_color" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L372", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_372", + "target": "tests_test_image_gen_test_build_reserves_html_fallback_color" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L406", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_406", + "target": "tests_test_image_gen_test_build_assignments_html_role_colors_match_ui" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L431", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_431", + "target": "tests_test_image_gen_test_build_reserves_html_role_colors_match_ui" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L444", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_444", + "target": "tests_test_image_gen_test_build_assignments_html_no_level_in_header" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L457", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_457", + "target": "tests_test_image_gen_test_build_assignments_html_broken_building_no_level" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L469", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_469", + "target": "tests_test_image_gen_test_build_assignments_html_building_number_in_thead" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L483", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_483", + "target": "tests_test_image_gen_test_build_assignments_html_post_flat_table" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_image_gen.py", + "source_location": "L517", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_image_gen_rationale_517", + "target": "tests_test_image_gen_test_build_assignments_html_post_reserve_and_disabled" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_test_activate_planning_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_test_activate_already_active_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_test_complete_active_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_test_complete_planning_siege_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_test_clone_siege_returns_201" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_make_post_ns" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L166", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_make_src_position_ns" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_make_src_group_ns" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L184", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_make_src_building_ns" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_py", + "target": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_rationale_1", + "target": "backend_tests_test_lifecycle_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_activate_planning_siege", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_complete_active_siege", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_clone_siege_returns_201", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L205", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority", + "target": "tests_test_lifecycle_make_post_ns" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L209", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority", + "target": "tests_test_lifecycle_make_src_position_ns" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L206", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority", + "target": "tests_test_lifecycle_make_src_group_ns" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L211", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority", + "target": "tests_test_lifecycle_make_src_building_ns" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_rationale_197", + "target": "tests_test_lifecycle_test_clone_uses_post_priority_config_not_source_priority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_posts_make_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_validation_default_configs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_lifecycle_integration_build_valid_siege_graph" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_post_suggestions_make_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L215", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_lifecycle_integration_py", + "target": "tests_test_lifecycle_integration_test_full_siege_lifecycle" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_rationale_1", + "target": "backend_tests_test_lifecycle_integration_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_build_valid_siege_graph", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L171", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_build_valid_siege_graph", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L230", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_test_full_siege_lifecycle", + "target": "tests_test_lifecycle_integration_build_valid_siege_graph" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_rationale_113", + "target": "tests_test_lifecycle_integration_build_valid_siege_graph" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L219", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_test_full_siege_lifecycle", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L221", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_test_full_siege_lifecycle", + "target": "tests_test_post_suggestions_make_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L216", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_rationale_216", + "target": "tests_test_lifecycle_integration_test_full_siege_lifecycle" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_lifecycle_integration.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_lifecycle_integration_rationale_183", + "target": "tests_test_post_suggestions_make_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_members_py", + "target": "tests_test_members_test_list_members_returns_empty_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_members_py", + "target": "tests_test_members_test_create_member_returns_201" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_members_py", + "target": "tests_test_members_test_create_member_duplicate_name_returns_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_members_py", + "target": "tests_test_members_test_get_member_not_found_returns_404" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L124", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_members_py", + "target": "tests_test_members_test_delete_member_returns_204" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_members.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_rationale_1", + "target": "backend_tests_test_members_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_member_changelog_column_py", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_exists" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_member_changelog_column_py", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_is_nullable" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_member_changelog_column_py", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_has_no_server_default" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_member_changelog_column_py", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_type_is_datetime" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_member_changelog_column_py", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_accepts_none_at_python_level" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L103", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_member_changelog_column_py", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_accepts_datetime_at_python_level" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_member_changelog_column_rationale_1", + "target": "backend_tests_test_member_changelog_column_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_member_changelog_column_rationale_21", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_exists" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_member_changelog_column_rationale_33", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_is_nullable" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_member_changelog_column_rationale_51", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_has_no_server_default" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_member_changelog_column_rationale_69", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_column_type_is_datetime" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_member_changelog_column_rationale_90", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_accepts_none_at_python_level" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_member_changelog_column.py", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_member_changelog_column_rationale_104", + "target": "tests_test_member_changelog_column_test_last_seen_changelog_at_accepts_datetime_at_python_level" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_make_batch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_make_batch_result" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_make_db_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L151", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_returns_batch_id" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L221", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_siege_not_found" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L247", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_siege_complete_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L272", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_get_notification_batch_returns_results" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L324", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_get_notification_batch_not_found" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L354", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_post_to_channel_success" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L415", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_post_to_channel_posts_images_to_images_channel_and_summary_to_text_channel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L497", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_post_to_channel_image_failure_returns_failed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L556", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_skips_member_with_no_discord_username" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L620", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_skips_member_not_in_guild" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L679", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_eligible_member_gets_result_row_and_dm" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L745", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_skipped_count_reflects_all_skipped_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L809", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_blocked_when_siege_has_validation_errors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L855", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_passes_validation_guard_when_no_errors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L912", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_bot_unreachable_falls_back_to_username_filter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L979", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_send_dms_sets_completed_status_even_when_bot_raises" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1041", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_notify_no_date_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1068", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notifications_py", + "target": "tests_test_notifications_test_post_to_channel_no_date_returns_400" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_1", + "target": "backend_tests_test_notifications_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_returns_batch_id", + "target": "tests_test_notifications_make_batch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L273", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_get_notification_batch_returns_results", + "target": "tests_test_notifications_make_batch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L987", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_send_dms_sets_completed_status_even_when_bot_raises", + "target": "tests_test_notifications_make_batch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_get_notification_batch_returns_results", + "target": "tests_test_notifications_make_batch_result" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L988", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_send_dms_sets_completed_status_even_when_bot_raises", + "target": "tests_test_notifications_make_batch_result" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_113", + "target": "tests_test_notifications_make_db_session" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_returns_batch_id", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_returns_batch_id", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L248", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_siege_complete_returns_400", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_post_to_channel_success", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_post_to_channel_success", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L420", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_post_to_channel_posts_images_to_images_channel_and_summary_to_text_channel", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L421", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_post_to_channel_posts_images_to_images_channel_and_summary_to_text_channel", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L416", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_416", + "target": "tests_test_notifications_test_post_to_channel_posts_images_to_images_channel_and_summary_to_text_channel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L499", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_post_to_channel_image_failure_returns_failed", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L500", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_post_to_channel_image_failure_returns_failed", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L498", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_498", + "target": "tests_test_notifications_test_post_to_channel_image_failure_returns_failed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L558", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skips_member_with_no_discord_username", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L559", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skips_member_with_no_discord_username", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L557", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_557", + "target": "tests_test_notifications_test_notify_skips_member_with_no_discord_username" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L622", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skips_member_not_in_guild", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L623", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skips_member_not_in_guild", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L621", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_621", + "target": "tests_test_notifications_test_notify_skips_member_not_in_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L681", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_eligible_member_gets_result_row_and_dm", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L682", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_eligible_member_gets_result_row_and_dm", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L680", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_680", + "target": "tests_test_notifications_test_notify_eligible_member_gets_result_row_and_dm" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L747", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skipped_count_reflects_all_skipped_members", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L748", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_skipped_count_reflects_all_skipped_members", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L746", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_746", + "target": "tests_test_notifications_test_notify_skipped_count_reflects_all_skipped_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L813", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_blocked_when_siege_has_validation_errors", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L810", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_810", + "target": "tests_test_notifications_test_notify_blocked_when_siege_has_validation_errors" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L859", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_passes_validation_guard_when_no_errors", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L860", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_passes_validation_guard_when_no_errors", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L856", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_856", + "target": "tests_test_notifications_test_notify_passes_validation_guard_when_no_errors" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L918", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_bot_unreachable_falls_back_to_username_filter", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L919", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_bot_unreachable_falls_back_to_username_filter", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L913", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_913", + "target": "tests_test_notifications_test_notify_bot_unreachable_falls_back_to_username_filter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L980", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_980", + "target": "tests_test_notifications_test_send_dms_sets_completed_status_even_when_bot_raises" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1043", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_notify_no_date_returns_400", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1042", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_1042", + "target": "tests_test_notifications_test_notify_no_date_returns_400" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1070", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_test_post_to_channel_no_date_returns_400", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notifications.py", + "source_location": "L1069", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notifications_rationale_1069", + "target": "tests_test_notifications_test_post_to_channel_no_date_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_defense_tower_pos" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_no_previous_siege_all_current_in_set_at" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_empty_sections_omitted_all_no_change" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L105", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_full_diff_three_sections" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_header_contains_siege_date_and_member_settings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_none_fields_display_as_unknown" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_false_reserve_set_displays_no" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L201", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_single_building_type_omits_building_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L222", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_multiple_building_type_includes_building_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_post_always_uses_short_format" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L257", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_post_with_single_count_still_uses_short_format" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_section_order_no_change_then_remove_then_set_at" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L303", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_positions_sorted_within_section" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L336", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_no_change_section_has_header_and_plain_position_lines" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L361", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_remove_from_section_has_header_and_plain_position_lines" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L385", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_set_at_section_has_header_and_plain_position_lines" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L414", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_blank_line_between_no_change_and_remove_from" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L431", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_blank_line_between_remove_from_and_set_at" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L447", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_no_blank_line_when_only_one_section" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L464", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_blank_line_count_with_all_three_sections" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L488", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_all_three_section_headers_exact_format" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L508", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_notification_message_py", + "target": "tests_test_notification_message_test_header_line_not_a_position_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_1", + "target": "backend_tests_test_notification_message_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_no_previous_siege_all_current_in_set_at", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_empty_sections_omitted_all_no_change", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_full_diff_three_sections", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_single_building_type_omits_building_number", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L278", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_section_order_no_change_then_remove_then_set_at", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L306", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_positions_sorted_within_section", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L342", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_no_change_section_has_header_and_plain_position_lines", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L416", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_blank_line_between_no_change_and_remove_from", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L467", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_blank_line_count_with_all_three_sections", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L490", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_all_three_section_headers_exact_format", + "target": "tests_test_notification_message_stronghold_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L224", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_multiple_building_type_includes_building_number", + "target": "tests_test_notification_message_defense_tower_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L279", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_section_order_no_change_then_remove_then_set_at", + "target": "tests_test_notification_message_defense_tower_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_no_previous_siege_all_current_in_set_at", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_empty_sections_omitted_all_no_change", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_full_diff_three_sections", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L243", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_post_always_uses_short_format", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L259", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_post_with_single_count_still_uses_short_format", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L280", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_section_order_no_change_then_remove_then_set_at", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L307", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_positions_sorted_within_section", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L342", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_no_change_section_has_header_and_plain_position_lines", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L372", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_remove_from_section_has_header_and_plain_position_lines", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L395", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_set_at_section_has_header_and_plain_position_lines", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L417", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_blank_line_between_no_change_and_remove_from", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L433", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_blank_line_between_remove_from_and_set_at", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L453", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_no_blank_line_when_only_one_section", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L468", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_blank_line_count_with_all_three_sections", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L491", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_all_three_section_headers_exact_format", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L514", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_test_header_line_not_a_position_line", + "target": "tests_test_notification_message_post_pos" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_64", + "target": "tests_test_notification_message_test_no_previous_siege_all_current_in_set_at" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_85", + "target": "tests_test_notification_message_test_empty_sections_omitted_all_no_change" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_106", + "target": "tests_test_notification_message_test_full_diff_three_sections" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_150", + "target": "tests_test_notification_message_test_header_contains_siege_date_and_member_settings" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L170", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_170", + "target": "tests_test_notification_message_test_none_fields_display_as_unknown" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L184", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_184", + "target": "tests_test_notification_message_test_false_reserve_set_displays_no" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L202", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_202", + "target": "tests_test_notification_message_test_single_building_type_omits_building_number" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L223", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_202", + "target": "tests_test_notification_message_test_multiple_building_type_includes_building_number" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_242", + "target": "tests_test_notification_message_test_post_always_uses_short_format" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L258", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_258", + "target": "tests_test_notification_message_test_post_with_single_count_still_uses_short_format" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L277", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_277", + "target": "tests_test_notification_message_test_section_order_no_change_then_remove_then_set_at" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L304", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_304", + "target": "tests_test_notification_message_test_positions_sorted_within_section" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L337", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_337", + "target": "tests_test_notification_message_test_no_change_section_has_header_and_plain_position_lines" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L362", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_362", + "target": "tests_test_notification_message_test_remove_from_section_has_header_and_plain_position_lines" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L386", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_386", + "target": "tests_test_notification_message_test_set_at_section_has_header_and_plain_position_lines" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L415", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_415", + "target": "tests_test_notification_message_test_blank_line_between_no_change_and_remove_from" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L432", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_432", + "target": "tests_test_notification_message_test_blank_line_between_remove_from_and_set_at" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L448", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_448", + "target": "tests_test_notification_message_test_no_blank_line_when_only_one_section" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L465", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_465", + "target": "tests_test_notification_message_test_blank_line_count_with_all_three_sections" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L489", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_489", + "target": "tests_test_notification_message_test_all_three_section_headers_exact_format" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_notification_message.py", + "source_location": "L509", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_notification_message_rationale_509", + "target": "tests_test_notification_message_test_header_line_not_a_position_line" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_posts_py", + "target": "tests_test_posts_make_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_posts_py", + "target": "tests_test_posts_make_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_posts_py", + "target": "tests_test_posts_test_list_posts_returns_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_posts_py", + "target": "tests_test_posts_test_update_post_priority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_posts_py", + "target": "tests_test_posts_test_set_post_conditions_too_many_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_posts_py", + "target": "tests_test_posts_test_list_posts_sorted_by_building_number" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_posts_rationale_1", + "target": "backend_tests_test_posts_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_posts_make_post", + "target": "tests_test_posts_make_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L216", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L245", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L270", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L289", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L318", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L344", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L371", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L419", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L454", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L488", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L516", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L540", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L572", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L621", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L669", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L718", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L771", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L791", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L821", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_posts_make_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L221", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_inactive_member_error", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_active_member_no_error", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L270", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L308", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L348", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_exceeds_scroll_count", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L370", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_within_scroll_count", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L408", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule3_valid_building_number", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L425", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_invalid_group_number", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L442", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_valid_group_number", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L459", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_position_number_exceeds_slot_count", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L476", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_valid_position_number", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L516", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_multiple_groups", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L538", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_exactly_one_group", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L558", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_disabled_with_member", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L576", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_reserve_with_member", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L594", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_valid_state", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L631", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule9_correct_building_count", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L648", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_empty_unresolved_slot", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L667", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_message_uses_position_name", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L692", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_no_warning_when_disabled", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L713", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L740", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L765", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_missing_attack_day_assigned_member", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L801", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_attack_day_set", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L851", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_no_reserve", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L871", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_advanced_no_reserve", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L891", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_reserve_configured", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L911", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L930", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_fewer_than_3_conditions", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L957", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_has_3_conditions", + "target": "tests_test_posts_make_building" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L56", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_posts_test_list_posts_returns_list", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_posts_test_update_post_priority", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_posts_test_list_posts_sorted_by_building_number", + "target": "tests_test_posts_make_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L217", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L246", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L271", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L290", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L320", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L345", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L372", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L420", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L456", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L489", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L517", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L541", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L573", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L622", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L670", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L720", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L772", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L792", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L822", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_posts_make_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L711", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L738", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L928", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_fewer_than_3_conditions", + "target": "tests_test_posts_make_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L955", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_has_3_conditions", + "target": "tests_test_posts_make_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "tests_test_posts_make_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "tests_test_posts_make_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "tests_test_posts_make_post" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_posts.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_posts_rationale_115", + "target": "tests_test_posts_test_list_posts_sorted_by_building_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_make_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L195", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_raises_400_on_completed_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L209", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_single_post_single_member_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L263", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L282", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L306", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L400", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L444", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L478", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L506", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L527", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L564", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L591", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L660", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L685", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L763", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L783", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L808", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_empty_siege_returns_empty_assignments" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L816", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L883", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L926", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L931", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L955", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_expired_preview_raises_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L969", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_missing_preview_raises_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L978", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L994", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1011", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_null_member_entries_are_skipped" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1025", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1054", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1072", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1090", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_member_changed_returns_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_apply_completed_siege_raises_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_py", + "target": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1", + "target": "backend_tests_test_post_suggestions_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_preview", + "target": "tests_test_post_suggestions_make_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L141", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_141", + "target": "tests_test_post_suggestions_make_session" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L199", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_raises_400_on_completed_siege", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L220", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L249", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L293", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L323", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L348", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L385", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L429", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L465", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L493", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L520", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L554", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L580", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L626", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L673", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L728", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L775", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L795", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L811", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_empty_siege_returns_empty_assignments", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L825", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1206", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_156", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L665", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L200", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "tests_test_post_suggestions_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_test_post_suggestions_preview", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_raises_400_on_completed_siege", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_196", + "target": "tests_test_post_suggestions_test_preview_raises_400_on_completed_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L211", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_single_post_single_member_match", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L210", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_210", + "target": "tests_test_post_suggestions_test_preview_single_post_single_member_match" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L239", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L247", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L238", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_238", + "target": "tests_test_post_suggestions_test_preview_no_match_produces_skip_reason_no_match" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L265", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L267", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L272", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L264", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_264", + "target": "tests_test_post_suggestions_test_preview_reserve_position_produces_skip_reason_reserve" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L284", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L286", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L291", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L283", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_283", + "target": "tests_test_post_suggestions_test_preview_disabled_position_produces_skip_reason_disabled" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L314", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L315", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L321", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L307", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_307", + "target": "tests_test_post_suggestions_test_preview_post_with_no_active_conditions_produces_skip_reason_no_conditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L338", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L346", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L333", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_333", + "target": "tests_test_post_suggestions_test_preview_post_with_conditions_but_no_matching_member_still_no_match" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L364", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L367", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L384", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L357", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_357", + "target": "tests_test_post_suggestions_test_preview_mixed_no_conditions_no_match_and_assigned_in_one_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L411", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L414", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L427", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L401", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_401", + "target": "tests_test_post_suggestions_test_preview_higher_priority_post_gets_member_first" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L446", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L450", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L464", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_445", + "target": "tests_test_post_suggestions_test_preview_second_post_prefers_different_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L480", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L483", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L491", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L479", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_479", + "target": "tests_test_post_suggestions_test_preview_prefers_less_loaded_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L508", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L511", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L519", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L507", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_507", + "target": "tests_test_post_suggestions_test_preview_name_tiebreak_picks_alphabetically_lower" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L530", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L535", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L553", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L528", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_528", + "target": "tests_test_post_suggestions_test_preview_duplicate_penalty_beats_assignment_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L566", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L575", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L577", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L565", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_565", + "target": "tests_test_post_suggestions_test_preview_determinism_same_output_on_repeat" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L611", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L614", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L623", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L592", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_592", + "target": "tests_test_post_suggestions_test_preview_current_member_preferred_when_equally_qualified" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L662", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L665", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L671", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L661", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_661", + "target": "tests_test_post_suggestions_test_preview_lowest_condition_id_picked_as_tiebreak" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L706", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L713", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L727", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L686", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_686", + "target": "tests_test_post_suggestions_test_preview_suboptimality_invariants_hold" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L765", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L767", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L773", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L764", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_764", + "target": "tests_test_post_suggestions_test_preview_matches_current_true_when_same_assignment" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L785", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L788", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L793", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L784", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_784", + "target": "tests_test_post_suggestions_test_preview_matches_current_false_for_null_suggestion" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L810", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_empty_siege_returns_empty_assignments", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L809", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_809", + "target": "tests_test_post_suggestions_test_preview_empty_siege_returns_empty_assignments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L818", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L823", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L817", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_817", + "target": "tests_test_post_suggestions_test_preview_no_members_all_skip_no_match" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L963", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_expired_preview_raises_409", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L973", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_missing_preview_raises_409", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L989", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1006", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1020", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_null_member_entries_are_skipped", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1041", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1065", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1083", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_member_changed_returns_409", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L889", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_889", + "target": "tests_test_post_suggestions_apply" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L959", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_expired_preview_raises_409", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L981", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L997", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1014", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_null_member_entries_are_skipped", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1032", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1058", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1076", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1094", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_member_changed_returns_409", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1134", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1161", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_completed_siege_raises_400", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L927", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_927", + "target": "tests_test_post_suggestions_preview_data" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L982", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L998", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1015", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_null_member_entries_are_skipped", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1028", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1056", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1074", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1092", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_member_changed_returns_409", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409", + "target": "tests_test_post_suggestions_entry_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L958", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_expired_preview_raises_409", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L956", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_956", + "target": "tests_test_post_suggestions_test_apply_expired_preview_raises_409" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L971", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_missing_preview_raises_409", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L970", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_970", + "target": "tests_test_post_suggestions_test_apply_missing_preview_raises_409" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L980", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L979", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_979", + "target": "tests_test_post_suggestions_test_apply_empty_position_ids_is_noop" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L996", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L995", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_995", + "target": "tests_test_post_suggestions_test_apply_unknown_position_ids_silently_ignored" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1013", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_null_member_entries_are_skipped", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1012", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1012", + "target": "tests_test_post_suggestions_test_apply_null_member_entries_are_skipped" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1031", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1026", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1026", + "target": "tests_test_post_suggestions_test_apply_subset_only_writes_checked_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1057", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1055", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1055", + "target": "tests_test_post_suggestions_test_apply_stale_position_disabled_returns_409" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1075", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1073", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1073", + "target": "tests_test_post_suggestions_test_apply_stale_position_reserve_returns_409" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1093", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1091", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1091", + "target": "tests_test_post_suggestions_test_apply_stale_member_inactive_returns_409" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_member_changed_returns_409", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1109", + "target": "tests_test_post_suggestions_test_apply_member_changed_returns_409" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1128", + "target": "tests_test_post_suggestions_test_apply_multiple_stale_all_surfaced_in_single_409" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_apply_completed_siege_raises_400", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1158", + "target": "tests_test_post_suggestions_test_apply_completed_siege_raises_400" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1205", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions.py", + "source_location": "L1183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1183", + "target": "tests_test_post_suggestions_test_preview_skips_post_when_only_candidate_has_used_condition" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L284", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_rationale_1026", + "target": "tests_test_post_suggestions_integration_test_apply_subset_leaves_unselected_positions_unchanged" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_schema_enable_sqlite_fk" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_post_suggestions_integration_engine" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_seed_demo_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_post_suggestions_integration_session_factory" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_post_suggestions_integration_test_preview_loads_m2m_relations_without_greenlet_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L215", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_post_suggestions_integration_test_preview_overwrite_stores_second_preview_in_db" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L254", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_post_suggestions_integration_test_apply_persists_matched_condition_id_to_db" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L283", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_post_suggestions_integration_test_apply_subset_leaves_unselected_positions_unchanged" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L313", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_post_suggestions_integration_py", + "target": "tests_test_post_suggestions_integration_test_member_changed_stale_reason_on_concurrent_apply" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_1", + "target": "backend_tests_test_post_suggestions_integration_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_61", + "target": "tests_test_post_suggestions_integration_engine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L228", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_preview_overwrite_stores_second_preview_in_db", + "target": "tests_test_post_suggestions_integration_session_factory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L271", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_apply_persists_matched_condition_id_to_db", + "target": "tests_test_post_suggestions_integration_session_factory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L299", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_apply_subset_leaves_unselected_positions_unchanged", + "target": "tests_test_post_suggestions_integration_session_factory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L327", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_member_changed_stale_reason_on_concurrent_apply", + "target": "tests_test_post_suggestions_integration_session_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_80", + "target": "tests_test_post_suggestions_integration_session_factory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_preview_loads_m2m_relations_without_greenlet_error", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L191", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_191", + "target": "tests_test_post_suggestions_integration_test_preview_loads_m2m_relations_without_greenlet_error" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L222", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_preview_overwrite_stores_second_preview_in_db", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L216", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_216", + "target": "tests_test_post_suggestions_integration_test_preview_overwrite_stores_second_preview_in_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L260", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_apply_persists_matched_condition_id_to_db", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L255", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_255", + "target": "tests_test_post_suggestions_integration_test_apply_persists_matched_condition_id_to_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L285", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_apply_subset_leaves_unselected_positions_unchanged", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L328", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_test_member_changed_stale_reason_on_concurrent_apply", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L314", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_314", + "target": "tests_test_post_suggestions_integration_test_member_changed_stale_reason_on_concurrent_apply" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_53", + "target": "tests_test_schema_enable_sqlite_fk" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_72", + "target": "tests_test_seed_demo_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_post_suggestions_integration.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_post_suggestions_integration_rationale_90", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_reference.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_reference_py", + "target": "tests_test_reference_make_post_condition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_reference.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_reference_py", + "target": "tests_test_reference_test_get_post_conditions_returns_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_reference.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_reference_py", + "target": "tests_test_reference_test_get_building_types_returns_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_reference.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_reference_py", + "target": "tests_test_reference_test_get_member_roles_returns_four_roles" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_reference.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_reference_rationale_1", + "target": "backend_tests_test_reference_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_reference.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_reference_test_get_post_conditions_returns_list", + "target": "tests_test_reference_make_post_condition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_enable_sqlite_fk" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_db_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_test_member_name_unique" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_test_position_reserve_and_member_constraint_defined" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_test_building_group_slot_count_bounds" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_test_post_condition_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_test_building_type_config_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L119", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_schema_py", + "target": "tests_test_schema_test_siege_member_pk" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_1", + "target": "backend_tests_test_schema_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_22", + "target": "tests_test_schema_enable_sqlite_fk" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_schema_enable_sqlite_fk" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_schema_db_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_51", + "target": "tests_test_schema_test_member_name_unique" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_66", + "target": "tests_test_schema_test_position_reserve_and_member_constraint_defined" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_79", + "target": "tests_test_schema_test_building_group_slot_count_bounds" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_90", + "target": "tests_test_schema_test_post_condition_count" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L105", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_105", + "target": "tests_test_schema_test_building_type_config_count" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_schema.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_schema_rationale_120", + "target": "tests_test_schema_test_siege_member_pk" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_demo_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_testcanonicalseedpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_seeds_36_post_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_idempotent_post_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_testcanonicalseedbuildingtypeconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_seeds_building_type_configs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_idempotent_building_type_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_testcanonicalseedpostpriorityconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_seeds_18_post_priority_configs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L137", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_priority_configs_cover_posts_1_through_18" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_priority_configs_default_priority_is_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_canonical_py", + "target": "tests_test_seed_canonical_test_idempotent_post_priority_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_rationale_1", + "target": "backend_tests_test_seed_canonical_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_seeds_36_post_conditions", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_idempotent_post_conditions", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_seeds_building_type_configs", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_idempotent_building_type_config", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_seeds_18_post_priority_configs", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L139", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_priority_configs_cover_posts_1_through_18", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L147", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_priority_configs_default_priority_is_2", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_test_idempotent_post_priority_config", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_rationale_58", + "target": "tests_test_seed_canonical_run_canonical_seed" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_rationale_72", + "target": "tests_test_seed_canonical_testcanonicalseedpostconditions" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L28", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostconditions", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L29", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostconditions", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_rationale_95", + "target": "tests_test_seed_canonical_testcanonicalseedbuildingtypeconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L28", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedbuildingtypeconfig", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L29", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedbuildingtypeconfig", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_canonical_rationale_121", + "target": "tests_test_seed_canonical_testcanonicalseedpostpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L28", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostpriorityconfig", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L29", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_canonical_testcanonicalseedpostpriorityconfig", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/tests/test_seed_canonical.py", + "source_location": "L142", + "weight": 1.0, + "source": "tests_test_seed_canonical_test_priority_configs_cover_posts_1_through_18", + "target": "components_landingpage_test_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_testseeddemomembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_creates_25_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_members_have_demo_names" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_idempotent_member_creation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_testseeddemosiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_creates_one_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_siege_has_active_status" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_idempotent_siege_creation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L141", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_testseeddemobuildingsandpositions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_creates_buildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L151", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_creates_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_some_positions_have_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L168", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_idempotent_position_creation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L181", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_testseeddemosiegemembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L185", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_enrolls_all_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L191", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_members_have_attack_days" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L199", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_seed_demo_py", + "target": "tests_test_seed_demo_test_idempotent_siege_member_enrollment" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_rationale_1", + "target": "backend_tests_test_seed_demo_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_rationale_42", + "target": "tests_test_seed_demo_session" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_creates_25_members", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_members_have_demo_names", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_idempotent_member_creation", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L122", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_creates_one_siege", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_siege_has_active_status", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_idempotent_siege_creation", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_creates_buildings", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_creates_positions", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_some_positions_have_members", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L170", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_idempotent_position_creation", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L186", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_enrolls_all_members", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_members_have_attack_days", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L201", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_test_idempotent_siege_member_enrollment", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_rationale_60", + "target": "tests_test_seed_demo_run_seed" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_rationale_92", + "target": "tests_test_seed_demo_testseeddemomembers" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L26", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemomembers", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L27", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemomembers", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L28", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemomembers", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L30", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemomembers", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L31", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemomembers", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L26", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiege", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L27", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiege", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L28", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiege", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L30", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiege", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L31", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiege", + "target": "api_types_siegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_rationale_142", + "target": "tests_test_seed_demo_testseeddemobuildingsandpositions" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L26", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemobuildingsandpositions", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L27", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemobuildingsandpositions", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L28", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemobuildingsandpositions", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L30", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemobuildingsandpositions", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L31", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemobuildingsandpositions", + "target": "api_types_siegemember" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_seed_demo_rationale_182", + "target": "tests_test_seed_demo_testseeddemosiegemembers" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L26", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiegemembers", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L27", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiegemembers", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L28", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiegemembers", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L30", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiegemembers", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/tests/test_seed_demo.py", + "source_location": "L31", + "weight": 0.8, + "confidence_score": 0.5, + "source": "tests_test_seed_demo_testseeddemosiegemembers", + "target": "api_types_siegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_list_sieges_returns_empty_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_create_siege_returns_201" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_get_siege_not_found_returns_404" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_delete_planning_siege_returns_204" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_delete_active_siege_returns_400" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L168", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L205", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_compute_scroll_count_sums_theoretical_capacity" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L229", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_compute_scroll_count_broken_building_unchanged" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L262", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_compute_scroll_count_level_change_updates_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L292", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_sieges_py", + "target": "tests_test_sieges_test_compute_scroll_count_post_buildings_contribute_one" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_rationale_1", + "target": "backend_tests_test_sieges_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_test_create_siege_returns_201", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L181", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_validate_endpoint_returns_result", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L223", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_inactive_member_error", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L243", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_active_member_no_error", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L322", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L350", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_exceeds_scroll_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L372", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_within_scroll_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L410", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule3_valid_building_number", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L427", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_invalid_group_number", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L444", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_valid_group_number", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L461", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_position_number_exceeds_slot_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L478", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_valid_position_number", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L504", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule6_valid_attack_day", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L522", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_multiple_groups", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L542", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_exactly_one_group", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L560", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_disabled_with_member", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L578", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_reserve_with_member", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L596", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_valid_state", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L608", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule9_wrong_building_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L620", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule9_correct_building_count", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L650", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_empty_unresolved_slot", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L669", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_message_uses_position_name", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L694", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_no_warning_when_disabled", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L720", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L747", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L783", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_missing_attack_day_assigned_member", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L803", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_attack_day_set", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L817", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule14_fewer_than_10_day2", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L832", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule14_ten_or_more_day2", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L853", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_no_reserve", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L873", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_advanced_no_reserve", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L893", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_reserve_configured", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L913", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L936", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_fewer_than_3_conditions", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L963", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_has_3_conditions", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "tests_test_sieges_make_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_sums_theoretical_capacity", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_broken_building_unchanged", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L269", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_level_change_updates_count", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L297", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_test_compute_scroll_count_post_buildings_contribute_one", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_rationale_169", + "target": "tests_test_sieges_seed_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L206", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_rationale_206", + "target": "tests_test_sieges_test_compute_scroll_count_sums_theoretical_capacity" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L230", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_rationale_230", + "target": "tests_test_sieges_test_compute_scroll_count_broken_building_unchanged" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L263", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_rationale_263", + "target": "tests_test_sieges_test_compute_scroll_count_level_change_updates_count" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_sieges.py", + "source_location": "L293", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_sieges_rationale_293", + "target": "tests_test_sieges_test_compute_scroll_count_post_buildings_contribute_one" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_telemetry_py", + "target": "tests_test_telemetry_testconfiguretelemetrynoop" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrynoop", + "target": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_missing" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrynoop", + "target": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_empty_string" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrynoop", + "target": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_whitespace_only" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrynoop", + "target": "tests_test_telemetry_testconfiguretelemetryactive_test_calls_configure_azure_monitor_when_env_var_set" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L122", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrynoop", + "target": "tests_test_telemetry_testconfiguretelemetryactive_test_sdk_exception_does_not_propagate" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_18", + "target": "tests_test_telemetry_testconfiguretelemetrynoop" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_82", + "target": "tests_test_telemetry_testconfiguretelemetrynoop" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_91", + "target": "tests_test_telemetry_testconfiguretelemetrynoop" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_21", + "target": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_43", + "target": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_empty_string" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_62", + "target": "tests_test_telemetry_testconfiguretelemetrynoop_test_noop_when_env_var_whitespace_only" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_93", + "target": "tests_test_telemetry_testconfiguretelemetryactive_test_calls_configure_azure_monitor_when_env_var_set" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_112", + "target": "tests_test_telemetry_testconfiguretelemetryactive_test_sdk_exception_does_not_propagate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_telemetry_py", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_instrument_app_called_when_connection_string_and_service_name_set" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L199", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_configure_azure_monitor_called_when_both_env_vars_set" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_instrument_app_not_called_when_app_is_none" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_131", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_144", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_144", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_instrument_app_called_when_connection_string_and_service_name_set" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L200", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_183", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_configure_azure_monitor_called_when_both_env_vars_set" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L238", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_219", + "target": "tests_test_telemetry_testconfiguretelemetryfastapiinstrumentation_test_instrument_app_not_called_when_app_is_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L258", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_telemetry_py", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L273", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_called_with_sync_engine" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L315", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_not_called_when_engine_is_none" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L353", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_not_called_when_telemetry_unconfigured" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L259", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_259", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_274", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_called_with_sync_engine" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L316", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_316", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_not_called_when_engine_is_none" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L354", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_354", + "target": "tests_test_telemetry_testconfiguretelemetrysqlalchemyinstrumentation_test_sqlalchemy_instrument_not_called_when_telemetry_unconfigured" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L391", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_telemetry_py", + "target": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L405", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation_test_asyncpg_instrument_called_when_telemetry_configured" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L443", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation", + "target": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation_test_asyncpg_instrument_not_called_when_telemetry_unconfigured" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L392", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_392", + "target": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L406", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_406", + "target": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation_test_asyncpg_instrument_called_when_telemetry_configured" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_telemetry.py", + "source_location": "L444", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_444", + "target": "tests_test_telemetry_testconfiguretelemetryasyncpginstrumentation_test_asyncpg_instrument_not_called_when_telemetry_unconfigured" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_telemetry.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_telemetry_rationale_1", + "target": "bot_tests_test_telemetry_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L126", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L148", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_validate_endpoint_404" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L172", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_validate_endpoint_returns_result" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L215", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule1_inactive_member_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L235", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule1_active_member_no_error" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L255", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L293", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L340", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule2_exceeds_scroll_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L364", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule2_within_scroll_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L406", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule3_valid_building_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L420", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule4_invalid_group_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L437", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule4_valid_group_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L454", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule5_position_number_exceeds_slot_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L471", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule5_valid_position_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L501", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule6_valid_attack_day" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L514", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule7_post_has_multiple_groups" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L536", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule7_post_has_exactly_one_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L552", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule8_disabled_with_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L570", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule8_reserve_with_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L588", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule8_valid_state" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L606", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule9_wrong_building_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L618", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule9_correct_building_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L643", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule10_empty_unresolved_slot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L660", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule10_message_uses_position_name" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L687", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule10_no_warning_when_disabled" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L704", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule11_member_pref_no_match" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L732", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule11_no_warning_when_no_preferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L779", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule13_missing_attack_day_assigned_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L795", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule13_attack_day_set" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L815", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule14_fewer_than_10_day2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L830", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule14_ten_or_more_day2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L845", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule15_hh_no_reserve" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L865", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule15_advanced_no_reserve" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L885", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule15_hh_reserve_configured" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L905", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L925", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule16_post_fewer_than_3_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L952", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_test_rule16_post_has_3_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L977", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_default_configs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L987", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_validation_py", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_1", + "target": "backend_tests_test_validation_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L706", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L734", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L927", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_fewer_than_3_conditions", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L954", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_has_3_conditions", + "target": "tests_test_validation_make_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L225", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_inactive_member_error", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L228", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_inactive_member_error", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L216", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_216", + "target": "tests_test_validation_test_rule1_inactive_member_error" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L245", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_active_member_no_error", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L248", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule1_active_member_no_error", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L236", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_236", + "target": "tests_test_validation_test_rule1_active_member_no_error" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L281", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L256", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_256", + "target": "tests_test_validation_test_rule2_broken_building_assignment_counts_toward_scroll_limit" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L324", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L329", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L294", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_294", + "target": "tests_test_validation_test_rule2_broken_and_healthy_both_count_toward_scroll_limit" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L352", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_exceeds_scroll_count", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L357", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_exceeds_scroll_count", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_341", + "target": "tests_test_validation_test_rule2_exceeds_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L374", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_within_scroll_count", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L377", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule2_within_scroll_count", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L365", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_365", + "target": "tests_test_validation_test_rule2_within_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L413", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule3_valid_building_number", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L385", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_385", + "target": "tests_test_validation_test_rule3_valid_building_number" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L407", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_407", + "target": "tests_test_validation_test_rule3_valid_building_number" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L430", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_invalid_group_number", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L421", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_421", + "target": "tests_test_validation_test_rule4_invalid_group_number" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L447", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule4_valid_group_number", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L438", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_438", + "target": "tests_test_validation_test_rule4_valid_group_number" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L464", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_position_number_exceeds_slot_count", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L455", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_455", + "target": "tests_test_validation_test_rule5_position_number_exceeds_slot_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L481", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule5_valid_position_number", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L472", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_472", + "target": "tests_test_validation_test_rule5_valid_position_number" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L503", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule6_valid_attack_day", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L507", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule6_valid_attack_day", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L489", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_489", + "target": "tests_test_validation_test_rule6_valid_attack_day" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L502", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_502", + "target": "tests_test_validation_test_rule6_valid_attack_day" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L525", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_multiple_groups", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L515", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_515", + "target": "tests_test_validation_test_rule7_post_has_multiple_groups" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L545", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule7_post_has_exactly_one_group", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L537", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_537", + "target": "tests_test_validation_test_rule7_post_has_exactly_one_group" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L563", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_disabled_with_member", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L553", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_553", + "target": "tests_test_validation_test_rule8_disabled_with_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L581", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_reserve_with_member", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L571", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_571", + "target": "tests_test_validation_test_rule8_reserve_with_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L599", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule8_valid_state", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L589", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_589", + "target": "tests_test_validation_test_rule8_valid_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L611", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule9_wrong_building_count", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L607", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_607", + "target": "tests_test_validation_test_rule9_wrong_building_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L636", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule9_correct_building_count", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L619", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_619", + "target": "tests_test_validation_test_rule9_correct_building_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L653", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_empty_unresolved_slot", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L644", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_644", + "target": "tests_test_validation_test_rule10_empty_unresolved_slot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L672", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_message_uses_position_name", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L661", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_661", + "target": "tests_test_validation_test_rule10_message_uses_position_name" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L697", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule10_no_warning_when_disabled", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L688", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_688", + "target": "tests_test_validation_test_rule10_no_warning_when_disabled" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L722", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L725", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_member_pref_no_match", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L705", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_705", + "target": "tests_test_validation_test_rule11_member_pref_no_match" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L749", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L752", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule11_no_warning_when_no_preferences", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L733", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_733", + "target": "tests_test_validation_test_rule11_no_warning_when_no_preferences" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L785", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_missing_attack_day_assigned_member", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L788", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_missing_attack_day_assigned_member", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L760", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_760", + "target": "tests_test_validation_test_rule13_missing_attack_day_assigned_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L780", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_780", + "target": "tests_test_validation_test_rule13_missing_attack_day_assigned_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L805", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_attack_day_set", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L808", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule13_attack_day_set", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L796", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_796", + "target": "tests_test_validation_test_rule13_attack_day_set" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L820", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule14_fewer_than_10_day2", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L823", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule14_fewer_than_10_day2", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L816", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_816", + "target": "tests_test_validation_test_rule14_fewer_than_10_day2" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L835", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule14_ten_or_more_day2", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L838", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule14_ten_or_more_day2", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L831", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_831", + "target": "tests_test_validation_test_rule14_ten_or_more_day2" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L855", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_no_reserve", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L858", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_no_reserve", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L846", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_846", + "target": "tests_test_validation_test_rule15_hh_no_reserve" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L875", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_advanced_no_reserve", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L878", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_advanced_no_reserve", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L866", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_866", + "target": "tests_test_validation_test_rule15_advanced_no_reserve" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L895", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_reserve_configured", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L898", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_hh_reserve_configured", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L886", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_886", + "target": "tests_test_validation_test_rule15_hh_reserve_configured" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L915", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L918", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L906", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_906", + "target": "tests_test_validation_test_rule15_non_hh_no_reserve_no_warning" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L939", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_fewer_than_3_conditions", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L926", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_926", + "target": "tests_test_validation_test_rule16_post_fewer_than_3_conditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L966", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_test_rule16_post_has_3_conditions", + "target": "tests_test_validation_session_with_siege_and_configs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_validation.py", + "source_location": "L953", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_validation_rationale_953", + "target": "tests_test_validation_test_rule16_post_has_3_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_reload_version_module" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_read_backend_version_semver_only" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_read_backend_version_with_build_info" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_read_backend_version_missing_version_file" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_read_backend_version_build_info_with_missing_file" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_get_version_returns_200_with_expected_keys" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_get_version_backend_version_has_build_suffix" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_get_version_backend_version_clean_in_local_dev" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_get_version_git_sha_field_preserved" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L175", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_tests_test_version_py", + "target": "tests_test_version_test_get_version_bot_unreachable_returns_none" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_1", + "target": "backend_tests_test_version_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_17", + "target": "tests_test_version_reload_version_module" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_30", + "target": "tests_test_version_test_read_backend_version_semver_only" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_43", + "target": "tests_test_version_test_read_backend_version_semver_only" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_54", + "target": "tests_test_version_test_read_backend_version_with_build_info" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_71", + "target": "tests_test_version_test_read_backend_version_missing_version_file" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_88", + "target": "tests_test_version_test_read_backend_version_build_info_with_missing_file" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_110", + "target": "tests_test_version_test_get_version_returns_200_with_expected_keys" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L129", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_129", + "target": "tests_test_version_test_get_version_backend_version_has_build_suffix" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_145", + "target": "tests_test_version_test_get_version_backend_version_clean_in_local_dev" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L160", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_160", + "target": "tests_test_version_test_get_version_git_sha_field_preserved" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/tests/test_version.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_version_rationale_176", + "target": "tests_test_version_test_get_version_bot_unreachable_returns_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_discord_client_py", + "target": "app_discord_client_siegebot" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "tests_conftest_fakeclient_init" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_discord_client_siegebot_on_ready" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_http_api_post_message" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_http_api_post_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_7", + "target": "app_discord_client_siegebot" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "bot/app/http_api.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "app_http_api_notifyrequest", + "target": "app_discord_client_siegebot" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "bot/app/http_api.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "app_http_api_postmessagerequest", + "target": "app_discord_client_siegebot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "bot/app/main.py", + "source_location": "L40", + "weight": 1.0, + "source": "app_main_main", + "target": "app_discord_client_siegebot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_message", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_image", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_34", + "target": "app_http_api_post_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_47", + "target": "app_http_api_post_image" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_set_bot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_get_bot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_verify_api_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_notifyrequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_postmessagerequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_version" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_notify" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_post_message" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_post_image" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L136", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_get_guild_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "bot/app/main.py", + "source_location": "L41", + "weight": 1.0, + "source": "app_main_main", + "target": "app_http_api_set_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_notify", + "target": "app_http_api_get_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_message", + "target": "app_http_api_get_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_image", + "target": "app_http_api_get_bot" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_37", + "target": "app_http_api_verify_api_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_getversion" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_58", + "target": "app_http_api_version" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_types_versioninfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_useversion" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "app_http_api_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_87", + "target": "app_http_api_notify" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_101", + "target": "app_http_api_post_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_116", + "target": "app_http_api_post_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_140", + "target": "app_http_api_get_guild_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_run_http_server" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_run_discord_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_main" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "app_main_run_http_server" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_19", + "target": "app_main_run_http_server" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "app_main_run_discord_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_31", + "target": "app_main_run_discord_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_37", + "target": "app_main_main" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "app_main_main" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1162", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "app_main_main" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "excel_import_import_excel_collect_xlsm_files" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1200", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_conftest_py", + "target": "tests_conftest_fakeclient" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_conftest_py", + "target": "tests_conftest_faketextchannel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_conftest_py", + "target": "tests_conftest_fakehttpexception" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_conftest_py", + "target": "tests_conftest_fakenotfound" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_conftest_py", + "target": "tests_conftest_find" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_conftest_fakeclient", + "target": "tests_conftest_fakeclient_init" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_conftest_fakehttpexception", + "target": "exception" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/tests/conftest.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_conftest_fakenotfound", + "target": "tests_conftest_fakehttpexception" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_make_text_channel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_test_send_dm_finds_member_and_sends" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_test_send_dm_case_insensitive" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L81", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_test_send_dm_raises_value_error_if_member_not_found" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_test_post_message_finds_channel_and_sends" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_test_post_message_raises_value_error_if_channel_not_found" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_test_post_image_returns_cdn_url" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_discord_client_py", + "target": "tests_test_discord_client_test_get_members_returns_correct_dict_format" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_rationale_1", + "target": "bot_tests_test_discord_client_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_finds_member_and_sends", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L73", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_case_insensitive", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_raises_value_error_if_member_not_found", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_message_finds_channel_and_sends", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_message_raises_value_error_if_channel_not_found", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L132", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_image_returns_cdn_url", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_get_members_returns_correct_dict_format", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_rationale_12", + "target": "tests_test_discord_client_make_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_message_finds_channel_and_sends", + "target": "tests_test_discord_client_make_text_channel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L126", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_image_returns_cdn_url", + "target": "tests_test_discord_client_make_text_channel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_finds_member_and_sends", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_case_insensitive", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_send_dm_raises_value_error_if_member_not_found", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_message_finds_channel_and_sends", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_message_raises_value_error_if_channel_not_found", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_post_image_returns_cdn_url", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_discord_client.py", + "source_location": "L148", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_discord_client_test_get_members_returns_correct_dict_format", + "target": "tests_test_discord_client_make_guild" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_http_api_patch_api_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_patch_guild_id" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_make_mock_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_found_returns_200_with_member_data" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L119", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_roles_exclude_everyone" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_not_found_returns_200_is_member_false" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L166", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_discord_http_exception_returns_503" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L188", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_guild_none_returns_503" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L202", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_bot_none_returns_503" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_no_auth_returns_403" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L228", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_get_guild_member_py", + "target": "tests_test_get_guild_member_test_get_guild_member_wrong_api_key_returns_401" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_1", + "target": "bot_tests_test_get_guild_member_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_31", + "target": "tests_test_get_guild_member_patch_guild_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_found_returns_200_with_member_data", + "target": "tests_test_get_guild_member_make_mock_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_roles_exclude_everyone", + "target": "tests_test_get_guild_member_make_mock_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L230", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_wrong_api_key_returns_401", + "target": "tests_test_get_guild_member_make_mock_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_46", + "target": "tests_test_get_guild_member_make_mock_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_found_returns_200_with_member_data", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_roles_exclude_everyone", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_not_found_returns_200_is_member_false", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L171", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_discord_http_exception_returns_503", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_guild_none_returns_503", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L233", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_test_get_guild_member_wrong_api_key_returns_401", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_76", + "target": "tests_test_get_guild_member_make_mock_bot_with_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_90", + "target": "tests_test_get_guild_member_test_get_guild_member_found_returns_200_with_member_data" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_120", + "target": "tests_test_get_guild_member_test_get_guild_member_roles_exclude_everyone" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_145", + "target": "tests_test_get_guild_member_test_get_guild_member_not_found_returns_200_is_member_false" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_167", + "target": "tests_test_get_guild_member_test_get_guild_member_discord_http_exception_returns_503" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L189", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_189", + "target": "tests_test_get_guild_member_test_get_guild_member_guild_none_returns_503" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_203", + "target": "tests_test_get_guild_member_test_get_guild_member_bot_none_returns_503" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L219", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_219", + "target": "tests_test_get_guild_member_test_get_guild_member_no_auth_returns_403" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_get_guild_member.py", + "source_location": "L229", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_get_guild_member_rationale_229", + "target": "tests_test_get_guild_member_test_get_guild_member_wrong_api_key_returns_401" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_patch_api_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_make_mock_bot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_version_returns_200" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_version_bare_semver_in_local_dev" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_version_includes_build_suffix_when_env_vars_set" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_version_unknown_when_version_file_missing" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_version_bare_semver_when_env_vars_are_unknown_literal" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L137", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_health_no_bot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L148", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_health_with_bot_connected" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L163", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_notify_success" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L179", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_notify_bot_not_ready_returns_503" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L191", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_notify_member_not_found_returns_404" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_post_message_success" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L228", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_post_message_bot_not_ready_returns_503" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L245", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_post_image_success" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L264", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_post_image_bot_not_ready_returns_503" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L281", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_get_members_returns_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L299", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_tests_test_http_api_py", + "target": "tests_test_http_api_test_get_members_bot_not_ready_returns_503" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_rationale_1", + "target": "bot_tests_test_http_api_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_rationale_19", + "target": "tests_test_http_api_patch_api_key" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_test_health_with_bot_connected", + "target": "tests_test_http_api_make_mock_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L164", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_test_notify_success", + "target": "tests_test_http_api_make_mock_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_test_notify_member_not_found_returns_404", + "target": "tests_test_http_api_make_mock_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_test_post_message_success", + "target": "tests_test_http_api_make_mock_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L246", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_test_post_image_success", + "target": "tests_test_http_api_make_mock_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L286", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_test_get_members_returns_list", + "target": "tests_test_http_api_make_mock_bot" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_rationale_45", + "target": "tests_test_http_api_test_version_returns_200" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_rationale_55", + "target": "tests_test_http_api_test_version_bare_semver_in_local_dev" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_rationale_75", + "target": "tests_test_http_api_test_version_includes_build_suffix_when_env_vars_set" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_rationale_95", + "target": "tests_test_http_api_test_version_unknown_when_version_file_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/tests/test_http_api.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_http_api_rationale_113", + "target": "tests_test_http_api_test_version_bare_semver_when_env_vars_are_unknown_literal" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/tailwind.config.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_tailwind_config_ts", + "target": "frontend_src_api_config_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/vitest.config.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_vitest_config_ts", + "target": "frontend_vite_config_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_apicreatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_apiaddbuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_apicreatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "api_types_siegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_buildingstab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_poststab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L179", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_search" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_roleselect" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L273", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_firstpositionspan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_positioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_chevron" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L367", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_autofillbtn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_board_spec_apicreatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_board_spec_apiaddbuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_board_spec_apicreatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L613", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "e2e_board_spec_buildingstab" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_posts_getposts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_sieges_getsiegememberpreferences" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_board_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_posts_updatepost" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_types_buildingresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_types_siegemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_types_postcondition" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_components_postsuggestionsmodal_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_lib_post_priority_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "lib_post_priority_prioritylabel" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "lib_post_priority_prioritybadgecolor" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_role_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_role_priority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_role_badge_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_power_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_memberwithmatches" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_duplicateconditionmap" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_buildduplicateconditionmap" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_findpostposition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_memberassignrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L302", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_postspage_postrow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "e2e_board_spec_poststab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "e2e_board_spec_positioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L251", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "e2e_board_spec_chevron" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "e2e_members_spec_ensurememberslotsavailable" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "e2e_members_spec_activecheckbox" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "e2e_members_spec_editlinks" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "api_types_siegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_dateinput" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_url" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L181", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_tabstrip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_boardlink" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L369", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "pages_boardpage_test_memberrows" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L382", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_activebadge" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L383", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_errorbadge" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "e2e_siege_lifecycle_spec_boardlink" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_components_layout_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_components_requireauth_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_components_siegelayout_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_loginpage_loginpage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_landingpage_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_landingpage_landingorsieges" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_memberspage_memberspage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_memberdetailpage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_siegespage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_siegecreatepage_siegecreatepage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_siegesettingspage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_boardpage_boardpage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_postspage_postspage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "api_types_siegemember" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_comparisonpage_comparisonpage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_postprioritiespage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_systempage_systempage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "src_app_app" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "frontend_src_app_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "context_authcontext_authprovider" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "src_main_queryclient" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_types_boardresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_types_positionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_board_getboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_posts_updatepost" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_board_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_board_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_board_getboard" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_board_getboard" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "api_changelog_changelogstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "api_changelog_fetchchangelogstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "frontend_src_api_changelog_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "api_changelog_fetchchangelogstatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/client.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_client_ts", + "target": "api_client_apiclient" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/config.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_config_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/config.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_config_ts", + "target": "api_config_appconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/config.ts", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_config_ts", + "target": "api_config_fetchconfig" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_api_config_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "api_config_fetchconfig" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_postcondition" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_memberroleinfo" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_syncpreviewresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_syncapplyitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_createmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_updatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_deletemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getmemberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_updatememberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getmemberroles" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_applydiscordsync" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_getmember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_createmember" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_members_updatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_members_updatemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_updatemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_getmemberpreferences" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/members.py", + "source_location": "L148", + "weight": 1.0, + "source": "api_members_getmemberpreferences", + "target": "components_landingpage_test_list" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_updatememberpreferences" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_getpostconditions" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "api_members_getpostconditions" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_members_getpostconditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/reference.py", + "source_location": "L15", + "weight": 1.0, + "source": "api_members_getpostconditions", + "target": "components_landingpage_test_list" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L27", + "weight": 1.0, + "source": "api_members_previewdiscordsync", + "target": "components_landingpage_test_list" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_members_applydiscordsync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "api_types_notifyresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_notifications_notifysiegemembers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L255", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_getnotificationbatch", + "target": "api_types_notificationresultitem" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L354", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_getnotificationbatch", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_notifications_getnotificationbatch" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_notifications_posttochannel" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_types_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_getpostpriorities" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_updatepostpriority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_getposts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_updatepost" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_setpostconditions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_postpriorityconfig", + "target": "api_posts_updatepostpriority" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_posts_getpostpriorities" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "api_posts_getpostpriorities" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "api_posts_updatepostpriority" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_posts_getposts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_posts_updatepost" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_posts_setpostconditions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_siege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_siegestatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_building" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_buildingtype" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_buildingtypeinfo" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_validationresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_autofillapplyresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_attackdayapplyresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_comparisonresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_createsiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_updatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_deletesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_activatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_completesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_clonesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_reopensiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_validatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_createbuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_updatebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_deletebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsiegememberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L165", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_previewautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L174", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_applyautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_previewattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_applyattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L201", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_comparesieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L210", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_comparesiegesspecific" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L220", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L229", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_sieges_getsieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "api_sieges_getsieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "api_sieges_getsieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "api_sieges_createsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_updatesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_deletesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_activatesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_completesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "api_sieges_clonesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_clonesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_reopensiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_validatesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_validatesiege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L284", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatebuilding", + "target": "api_sieges_getbuildings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_deletebuilding", + "target": "api_sieges_getbuildings" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_getbuildings" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_updatebuilding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L298", + "weight": 1.0, + "source": "api_sieges_updatebuilding", + "target": "components_landingpage_test_list" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/siege_members.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_getsiegememberpreferences" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/siege_members.py", + "source_location": "L22", + "weight": 1.0, + "source": "api_sieges_getsiegememberpreferences", + "target": "components_landingpage_test_list" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_previewautofill" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/autofill.py", + "source_location": "L70", + "weight": 1.0, + "source": "api_sieges_previewautofill", + "target": "components_landingpage_test_list" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_applyautofill" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_previewattackday" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_applyattackday" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_sieges_comparesieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_sieges_comparesiegesspecific" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L411", + "weight": 1.0, + "source": "api_sieges_applypostsuggestions", + "target": "components_landingpage_test_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberrole" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_siegestatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_syncmatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_syncpreviewresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_syncapplyitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postcondition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_positionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildinggroupresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildingresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L105", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_boardresponse" + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L22", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L129", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_validationissue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_validationresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_autofillassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L163", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_autofillapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L168", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_attackdayassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L173", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L178", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_attackdayapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_positionkey" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberdiff" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_comparisonresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L205", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_notificationresultitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L214", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L220", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_notifyresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L227", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L233", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_versioninfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildingtypeinfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L249", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberroleinfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L256", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionskipreason" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L262", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionentry" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L279", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L284", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionstalereason" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L291", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionstaleentry" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L298", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/MembersPage.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/handlers.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_handlers_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_types_memberrole" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L12", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/member.py", + "source_location": "L8", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_member", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_syncmatch", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_syncpreviewresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_memberrole" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L8", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_siegestatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "api_types_buildingtype" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/handlers.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_handlers_ts", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_building", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_boardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_positionresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_buildinggroupresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_buildingresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L540", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "api_types_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/MembersPage.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L334", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L334", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L334", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_condition.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_postcondition", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege_member.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siegemember", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_types_syncmatch" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_types_syncapplyitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "api_types_postcondition" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "api_types_postcondition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/postConditionTypes.test.ts", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postcondition", + "target": "lib_postconditiontypes_test_ids" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/postConditionTypes.test.ts", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postcondition", + "target": "lib_postconditiontypes_test_unique" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/postConditionTypes.test.ts", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postcondition", + "target": "lib_postconditiontypes_test_count" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_condition.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_postcondition", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_postcondition" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "api_types_siege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "api_types_siege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "api_types_siege" + }, + { + "relation": "uses", + "context": "import", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege_member.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siegemember", + "target": "api_types_siege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_siege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L19", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L19", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L12", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "api_types_positionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "api_types_buildinggroupresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "api_types_buildingresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_post", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_positionresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "api_types_positionresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "api_types_positionresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_buildinggroupresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_buildingresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_types_buildingresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "api_types_boardresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "api_types_boardresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "api_types_boardresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L382", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_boardresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L382", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_boardresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L382", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_boardresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_siegemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablerow" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_attackdayselect" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "api_types_siegemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "api_types_siegemember" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "test_server_server" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_makepreview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_registerhandlers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_renderpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_openpreviewdialog" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L195", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_boardpage_test_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L139", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_allcells" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_namecells" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L188", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_day2header" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_systempage_datarow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L184", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_test_day1names" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L20", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L20", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L20", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_siegemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_types_post" + }, + { + "relation": "contains", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L793", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "api_types_post" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_post" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_validationissue" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_validationresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_validationresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_types_positionkey" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_types_memberdiff" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_notificationresultitem" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L16", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L16", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_notifyresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/handlers.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_handlers_ts", + "target": "api_types_buildingtypeinfo" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "api_types_postsuggestionentry" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "api_types_postsuggestionstaleentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "api_version_useversion" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_carouselslide" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_carousel_carouselslide" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_carouselprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "pages_landingpage_colors" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_carousel_carousel" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "pages_landingpage_slides" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_test_rendercarousel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_test_track" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_test_dot0" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_test_viewport" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "frontend_src_components_ui_dropdown_menu_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "ui_dropdown_menu_dropdownmenucontent" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L103", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "components_changelogdropdown_hasunread" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_components_changelogdropdown_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_changelogdropdown_test_tsx", + "target": "frontend_src_components_changelogdropdown_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "components_groupbytoggle_props" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "components_discordsyncmodal_confidencevariant" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "components_discordsyncmodal_confidence_label" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_discordsyncmodal_tsx" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "components_groupbytoggle_props" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_groupbytoggle_props" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "components_groupbytoggle_groupbytoggle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "components_groupbytoggle_groupbytoggle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "components_groupbytoggle_groupbytoggle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByToggle.test.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbytoggle_test_tsx", + "target": "components_groupbytoggle_groupbytoggle" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Layout.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "components_layout_navlinkclass" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "components_layout_layout" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Layout.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Layout.test.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Layout.test.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "test_server_server" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/Layout.test.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "components_layout_test_renderlayout" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "components_layout_navlinkclass", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "components_layout_layout", + "target": "context_authcontext_useauth" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L329", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postrow", + "target": "components_poststab_findpostposition" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L755", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_outcomefilter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_classification" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_priority_meta" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_getprioritymeta" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_skip_reason_label" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_stale_reason_label" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_tileconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_classify" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_pill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_changecell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L248", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_skipicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L259", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_conditioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L290", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_summarytile" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L345", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_stateloading" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_stateempty" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L379", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_statestaleconflict" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L476", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_expirycountdown" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L554", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_useexpirycountdown" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "pages_siegememberspage_test_makepreview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_rendermodal" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L442", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_rows" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "pages_systempage_datarow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_twosuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L581", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L654", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_poststab_test_applybtn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L493", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_onclose" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L360", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_regeneratebtns" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L390", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_skippedtile" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L400", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_alltile" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L411", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_optimalpreview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L516", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_tworows" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L598", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_applyremainingbtn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L639", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_expiresat" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L631", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_subtitle" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L724", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_slidersicons" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L725", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_postsuggestionsmodal_tsx", + "target": "components_postsuggestionsmodal_test_infoicons" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_postsuggestionsmodal_changecell", + "target": "components_postsuggestionsmodal_classify" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L185", + "weight": 1.0, + "source": "components_postsuggestionsmodal_pill", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L308", + "weight": 1.0, + "source": "components_postsuggestionsmodal_summarytile", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_requireauth_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_requireauth_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_requireauth_tsx", + "target": "components_requireauth_requireauth" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "components_requireauth_requireauth", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "components_siegelayout_siegelayout" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "test_server_server" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "components_layout_test_renderlayout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "components_siegelayout_test_postslink" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/SiegeLayout.test.tsx", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "components_siegelayout_test_settingslink" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "ui_badge_badgevariants" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "ui_badge_badgeprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ui_badge_badge", + "target": "ui_badge_badgevariants" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L36", + "weight": 1.0, + "source": "ui_badge_badge", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "ui_button_buttonvariants" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "ui_button_buttonprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/checkbox.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ui_checkbox_checkbox", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/checkbox.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ui_checkbox_checkbox", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogoverlay" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L56", + "weight": 1.0, + "source": "ui_dialog_dialogheader", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L72", + "weight": 1.0, + "source": "ui_dialog_dialogfooter", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenusubtrigger" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenusubcontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenucontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenuitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenucheckboxitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenuradioitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenulabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenuseparator" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L170", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenushortcut" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L176", + "weight": 1.0, + "source": "ui_dropdown_menu_dropdownmenushortcut", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "ui_input_inputprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_label_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_label_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_label_tsx", + "target": "ui_label_label" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_label_label" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selecttrigger" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectscrollupbutton" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectscrolldownbutton" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectcontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectlabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectseparator" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_select_selectitem" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_table" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablefooter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablecaption" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablerow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "ui_textarea_textareaprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "ui_textarea_textarea" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authuser" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authcontextvalue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authcontext" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authprovider" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L6", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_test_testconsumer" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/utils.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_utils_ts", + "target": "context_authcontext_authprovider" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "pages_landingpage_landingorsieges", + "target": "context_authcontext_useauth" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/context/AuthContext.test.tsx", + "source_location": "L13", + "weight": 1.0, + "source": "context_authcontext_test_testconsumer", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "lib_buildingcolors_buildingcolorclass" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "lib_buildingcolors_building_labels" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_lib_buildingcolors_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_lib_buildingcolors_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "lib_buildingcolors_building_labels" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "lib_buildingcolors_building_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_conditiongroup" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L46", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_groupbylevel" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L48", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_groupbytype" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_usegroupbypreference_ts", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L304", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_makecond" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_mixed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_groups" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_levels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L105", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_descriptions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_l1only" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_types" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_headings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_factions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/lib/groupPostConditions.test.ts", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_test_unknown" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L103", + "weight": 1.0, + "source": "pages_postspage_postrow", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_usegroupbypreference_ts", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_post_priority_ts", + "target": "lib_post_priority_prioritylabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_post_priority_ts", + "target": "lib_post_priority_prioritybadgecolor" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "lib_post_priority_prioritylabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_usegroupbypreference_ts", + "target": "lib_usegroupbypreference_valid_modes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L278", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L57", + "weight": 1.0, + "source": "pages_postspage_postrow", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/utils.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_utils_ts", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/utils.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_utils_ts", + "target": "test_utils_testrenderoptions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/utils.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_utils_ts", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_changelogdropdown_test_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/LoginPage.test.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/MembersPage.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L501", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L29", + "weight": 1.0, + "source": "pages_comparisonpage_positiontag", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L27", + "weight": 1.0, + "source": "pages_systempage_sectionpanel", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L67", + "weight": 1.0, + "source": "pages_systempage_datarow", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_boardpage_role_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_priority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_badge_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_chip_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_power_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_boardpage_power_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L103", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_building_type_order" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L254", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_draggablememberrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L322", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_memberdragoverlay" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L347", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_rolefilter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L349", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_filter_options" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L357", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_memberbucket" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L457", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_buildingtablerow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L553", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_buildingtypesection" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L679", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_conditionaldndcontext" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L711", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_activetab" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "pages_boardpage_boardpage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_boardpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "pages_comparisonpage_formatposition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_positiontag", + "target": "pages_comparisonpage_formatposition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "pages_comparisonpage_positiontag" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "pages_comparisonpage_memberpositionscell" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L8", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_landingorsieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_slides" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_shieldicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_githubicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_checkicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_externallinkicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_landingpage" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "test_server_server" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_landingpage_test_renderlanding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_landingpage_test_signin" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_landingpage_test_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_landingpage_test_bullets" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_landingpage_test_ghlink" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L191", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_landingpage_test_scrollintoviewmock" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "pages_loginpage_error_messages" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "pages_loginpage_membership_errors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "pages_loginpage_mobilebanner" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/LoginPage.test.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/LoginPage.test.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/LoginPage.test.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/LoginPage.test.tsx", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "pages_loginpage_test_link" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "pages_memberdetailpage_role_options" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "frontend_src_pages_memberdetailpage_tsx" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_memberspage_rolebadgevariant" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_memberspage_role_variants" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/MembersPage.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/MembersPage.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/MembersPage.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/MembersPage.test.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_boardpage_test_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "pages_postprioritiespage_descriptioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "pages_postprioritiespage_tab" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "frontend_src_pages_postprioritiespage_tsx" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "pages_postspage_postrow" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_postspage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "pages_postspage_test_renderpostspage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "pages_postspage_test_posts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "pages_postspage_test_postheadings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "pages_siegecreatepage_nexttuesdayfrom" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_suggestnextsiegedate", + "target": "pages_siegecreatepage_nexttuesdayfrom" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "pages_siegecreatepage_formatdatelocal" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_suggestnextsiegedate", + "target": "pages_siegecreatepage_formatdatelocal" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L60", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "pages_siegecreatepage_suggestnextsiegedate" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "test_server_server" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_makenotifyresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_makeresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_makebatchresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_emptyvalidation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegememberspage_test_renderpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L151", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_waitforpageload" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L720", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L731", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_dialog" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L284", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_notifybtn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegeSettingsPage.test.tsx", + "source_location": "L630", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "pages_siegesettingspage_test_statusel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_statusbadgevariant" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_status_variants" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_status_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_siegespage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "frontend_src_pages_siegespage_tsx" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_ui_libraries" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_sectionpanel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_datarow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_libraryrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/handlers.ts", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_handlers_ts", + "target": "test_handlers_handlers" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/server.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_server_ts", + "target": "frontend_src_test_handlers_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/server.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_server_ts", + "target": "test_handlers_handlers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/server.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_server_ts", + "target": "test_server_server" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_changelogdropdown_test_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "frontend_src_test_server_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_changelogdropdown_test_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "test_server_server" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_changelogdropdown_test_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/components/Carousel.test.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "components_carousel_test_rendercarousel", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L59", + "weight": 1.0, + "source": "components_changelogdropdown_test_renderdropdown", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L131", + "weight": 1.0, + "source": "components_groupbyconditions_test_openconditionstab", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L241", + "weight": 1.0, + "source": "components_groupbyconditions_test_rendermemberdetail", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/components/LandingPage.test.tsx", + "source_location": "L19", + "weight": 1.0, + "source": "components_landingpage_test_renderlanding", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/components/Layout.test.tsx", + "source_location": "L14", + "weight": 1.0, + "source": "components_layout_test_renderlayout", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L121", + "weight": 1.0, + "source": "pages_boardpage_test_renderboard", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/components/PostSuggestionsModal.test.tsx", + "source_location": "L96", + "weight": 1.0, + "source": "components_postsuggestionsmodal_test_rendermodal", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/pages/PostsPage.test.tsx", + "source_location": "L42", + "weight": 1.0, + "source": "pages_postspage_test_renderpostspage", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/test/pages/SiegeMembersPage.test.tsx", + "source_location": "L94", + "weight": 1.0, + "source": "pages_siegememberspage_test_renderpage", + "target": "test_utils_renderwithproviders" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_changelogdropdown_test_tsx", + "target": "components_changelogdropdown_test_renderdropdown" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/ChangelogDropdown.test.tsx", + "source_location": "L320", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_changelogdropdown_test_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "pages_postspage_groupby_test_sample_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "components_groupbyconditions_test_setupconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "components_groupbyconditions_test_setupmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "components_groupbyconditions_test_openconditionstab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L285", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L303", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "lib_grouppostconditions_test_headings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L184", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "components_groupbyconditions_test_elements" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L240", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "components_groupbyconditions_test_rendermemberdetail" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L249", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "components_groupbyconditions_test_waitforpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByConditions.test.tsx", + "source_location": "L304", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbyconditions_test_tsx", + "target": "components_groupbyconditions_test_headingtexts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByToggle.test.tsx", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbytoggle_test_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/GroupByToggle.test.tsx", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_groupbytoggle_test_tsx", + "target": "components_groupbytoggle_test_onchange" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L358", + "weight": 1.0, + "source": "excel_import_import_excel_parse_assignments_sheet", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1157", + "weight": 1.0, + "source": "excel_import_import_excel_collect_xlsm_files", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L246", + "weight": 1.0, + "source": "tests_test_import_excel_make_assignments_worksheet", + "target": "components_landingpage_test_list" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L833", + "weight": 1.0, + "source": "tests_test_import_excel_make_workbook_mock", + "target": "components_landingpage_test_list" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_makepostboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_setuphandlers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "pages_boardpage_test_renderboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_navigatetopoststab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L783", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L299", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_maketwopostboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L524", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_board" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L525", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_post1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L532", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_post2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L391", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_postrefs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L512", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L604", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_btn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L611", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_makepostpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L621", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_makeoptimalassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L640", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_makesuggestionassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L715", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_chip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L762", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_suggestbtn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/components/PostsTab.test.tsx", + "source_location": "L773", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_components_poststab_test_tsx", + "target": "components_poststab_test_applybtn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "components_poststab_test_setuphandlers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_makeboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_makesiegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_setupdefaulthandlers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_renderboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L174", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_ones" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L217", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_disabledel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L656", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_disabledspan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L362", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_cell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L382", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L436", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_searchinput" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L508", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_memberrows" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/BoardPage.test.tsx", + "source_location": "L510", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_boardpage_test_tsx", + "target": "pages_boardpage_test_bucketrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L350", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_boardpage_test_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_groupby_test_sample_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_groupby_test_two_posts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_test_renderpostspage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_groupby_test_expandfirstpost" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_groupby_test_expandallposts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L226", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_groupby_test_rowtoggle" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L339", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_groupby_test_mastergroup" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/PostsPage.groupBy.test.tsx", + "source_location": "L299", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_postspage_groupby_test_tsx", + "target": "pages_postspage_groupby_test_rowgroups" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/test/pages/SiegesPage.test.tsx", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_test_pages_siegespage_test_tsx", + "target": "pages_siegespage_test_sieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/types/changelog.d.ts", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_types_changelog_d_ts", + "target": "types_changelog_d_changelogentry" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L160", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L178", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedreserve" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L185", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedpostconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_importstats" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L224", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_filename_date" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L236", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_map_building_alias" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L265", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_members_sheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L337", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L489", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L534", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L570", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_build_group_structure" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L592", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_compute_building_group_structure" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L677", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_infer_building_level" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L719", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1069", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_collect_xlsm_files" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_1", + "target": "scripts_excel_import_import_excel_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L326", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_members_sheet", + "target": "excel_import_import_excel_parsedmember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L433", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_assignments_sheet", + "target": "excel_import_import_excel_parsedassignment" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L480", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_reserves_sheet", + "target": "excel_import_import_excel_parsedreserve" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L525", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_posts_sheet_config", + "target": "excel_import_import_excel_parsedpostconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L557", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_posts_sheet_conditions", + "target": "excel_import_import_excel_parsedpostconditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L784", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_importstats" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L787", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_filename_date" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L225", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_225", + "target": "excel_import_import_excel_parse_filename_date" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L843", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_237", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L402", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_assignments_sheet", + "target": "excel_import_import_excel_map_building_alias" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_242", + "target": "excel_import_import_excel_map_building_alias" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L814", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_members_sheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_266", + "target": "excel_import_import_excel_parse_members_sheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L815", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L338", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_338", + "target": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L816", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L446", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_446", + "target": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L823", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L490", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_490", + "target": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L824", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L535", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_535", + "target": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L571", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_571", + "target": "excel_import_import_excel_build_group_structure" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L929", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_compute_building_group_structure" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L597", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_597", + "target": "excel_import_import_excel_compute_building_group_structure" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L934", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_infer_building_level" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L678", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_678", + "target": "excel_import_import_excel_infer_building_level" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L935", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L727", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_727", + "target": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L781", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_781", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1073", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_1073", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1147", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_1147", + "target": "excel_import_import_excel_collect_xlsm_files" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_filename" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_filename_with_path_prefix" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_filename_invalid_random" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_filename_invalid_impossible_date" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_role_mapping_heavy_hitter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_role_mapping_advanced" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_role_mapping_medium" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_role_mapping_novice" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_role_mapping_unknown_returns_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_stronghold" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_mana_shrine_full" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_mana_short" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_magic_short" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_defense_tower_full" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_defense_short" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_building_alias_unknown_returns_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L134", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L141", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_members_sheet_basic" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_members_sheet_skips_empty_rows" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_members_sheet_strips_whitespace" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L211", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_members_sheet_post_preferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_make_assignments_worksheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L252", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_assignments_sheet_member_assignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_assignments_sheet_skips_unknown_building_type" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L303", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_assignments_sheet_skips_incomplete_rows" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L315", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_assignments_sheet_empty_value_is_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L331", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_reserves_sheet_basic" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L354", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_reserves_sheet_skips_empty_rows" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L366", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_reserves_sheet_invalid_attack_day_ignored" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L372", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_reserves_sheet_case_insensitive_yes_no" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L389", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_build_group_structure_stronghold" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L395", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_build_group_structure_mana_shrine" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L401", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_build_group_structure_magic_tower" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L407", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_build_group_structure_defense_tower" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L413", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_build_group_structure_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L592", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_compute_building_group_structure_basic" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L575", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_compute_building_group_structure_magic_tower_level3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L472", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_compute_building_group_structure_post_no_inflation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L485", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_compute_building_group_structure_filters_by_building_number" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L557", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_compute_building_group_structure_mana_shrine_level2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L629", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_infer_building_level_stronghold_level1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L635", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_infer_building_level_mana_shrine_level2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L641", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_infer_building_level_magic_tower_level1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L647", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_infer_building_level_defense_tower_level4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L653", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_infer_building_level_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L659", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_infer_building_level_fallback" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L665", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_infer_building_level_unknown_building_type_fallback" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L676", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_make_posts_config_worksheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L689", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_posts_sheet_config_basic" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L708", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_posts_sheet_config_default_priority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L720", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_posts_sheet_config_multiple_sections" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L745", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_make_posts_conditions_worksheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L757", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_posts_sheet_conditions_basic" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L777", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_parse_posts_sheet_conditions_skips_empty" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L796", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_make_empty_worksheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L803", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_make_workbook_mock" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L839", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_make_session_mock" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L861", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_import_file_section3c_skipped_when_not_most_recent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L880", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_tests_test_import_excel_py", + "target": "tests_test_import_excel_test_import_file_section3c_runs_when_most_recent_but_finds_nothing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_1", + "target": "scripts_excel_import_tests_test_import_excel_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_29", + "target": "tests_test_import_excel_test_parse_filename" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_35", + "target": "tests_test_import_excel_test_parse_filename_with_path_prefix" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_46", + "target": "tests_test_import_excel_test_parse_filename_invalid_random" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_52", + "target": "tests_test_import_excel_test_parse_filename_invalid_random" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_58", + "target": "tests_test_import_excel_test_parse_filename_invalid_impossible_date" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_members_sheet_basic", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L170", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_members_sheet_skips_empty_rows", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L184", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_members_sheet_strips_whitespace", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_members_sheet_post_preferences", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_reserves_sheet_basic", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_reserves_sheet_skips_empty_rows", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L367", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_reserves_sheet_invalid_attack_day_ignored", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L373", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_reserves_sheet_case_insensitive_yes_no", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_135", + "target": "tests_test_import_excel_make_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_142", + "target": "tests_test_import_excel_test_parse_members_sheet_basic" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L199", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_199", + "target": "tests_test_import_excel_test_parse_members_sheet_post_preferences" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_212", + "target": "tests_test_import_excel_test_parse_members_sheet_post_preferences" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L253", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_assignments_sheet_member_assignment", + "target": "tests_test_import_excel_make_assignments_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L289", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_assignments_sheet_skips_unknown_building_type", + "target": "tests_test_import_excel_make_assignments_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L305", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_assignments_sheet_skips_incomplete_rows", + "target": "tests_test_import_excel_make_assignments_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L317", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_assignments_sheet_empty_value_is_none", + "target": "tests_test_import_excel_make_assignments_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L238", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_238", + "target": "tests_test_import_excel_make_assignments_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L304", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_304", + "target": "tests_test_import_excel_test_parse_assignments_sheet_skips_incomplete_rows" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L316", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_316", + "target": "tests_test_import_excel_test_parse_assignments_sheet_empty_value_is_none" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L390", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_390", + "target": "tests_test_import_excel_test_build_group_structure_stronghold" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L396", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_396", + "target": "tests_test_import_excel_test_build_group_structure_mana_shrine" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L402", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_402", + "target": "tests_test_import_excel_test_build_group_structure_magic_tower" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L408", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_408", + "target": "tests_test_import_excel_test_build_group_structure_defense_tower" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L414", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_414", + "target": "tests_test_import_excel_test_build_group_structure_post" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L425", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_425", + "target": "tests_test_import_excel_test_compute_building_group_structure_basic" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L503", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_503", + "target": "tests_test_import_excel_test_compute_building_group_structure_basic" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L524", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_524", + "target": "tests_test_import_excel_test_compute_building_group_structure_basic" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L593", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_593", + "target": "tests_test_import_excel_test_compute_building_group_structure_basic" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L473", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_473", + "target": "tests_test_import_excel_test_compute_building_group_structure_post_no_inflation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L486", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_486", + "target": "tests_test_import_excel_test_compute_building_group_structure_filters_by_building_number" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L541", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_541", + "target": "tests_test_import_excel_test_compute_building_group_structure_mana_shrine_level2" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L558", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_558", + "target": "tests_test_import_excel_test_compute_building_group_structure_mana_shrine_level2" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_445", + "target": "tests_test_import_excel_test_compute_building_group_structure_magic_tower_level3" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L459", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_459", + "target": "tests_test_import_excel_test_compute_building_group_structure_magic_tower_level3" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L576", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_576", + "target": "tests_test_import_excel_test_compute_building_group_structure_magic_tower_level3" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L630", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_616", + "target": "tests_test_import_excel_test_infer_building_level_stronghold_level1" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L636", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_636", + "target": "tests_test_import_excel_test_infer_building_level_mana_shrine_level2" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L642", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_642", + "target": "tests_test_import_excel_test_infer_building_level_magic_tower_level1" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L648", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_648", + "target": "tests_test_import_excel_test_infer_building_level_defense_tower_level4" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L654", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_654", + "target": "tests_test_import_excel_test_infer_building_level_post" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L660", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_660", + "target": "tests_test_import_excel_test_infer_building_level_fallback" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L666", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_666", + "target": "tests_test_import_excel_test_infer_building_level_unknown_building_type_fallback" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L691", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_posts_sheet_config_basic", + "target": "tests_test_import_excel_make_posts_config_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L710", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_posts_sheet_config_default_priority", + "target": "tests_test_import_excel_make_posts_config_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L722", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_posts_sheet_config_multiple_sections", + "target": "tests_test_import_excel_make_posts_config_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L677", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_677", + "target": "tests_test_import_excel_make_posts_config_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L690", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_690", + "target": "tests_test_import_excel_test_parse_posts_sheet_config_basic" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L709", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_709", + "target": "tests_test_import_excel_test_parse_posts_sheet_config_default_priority" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L721", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_721", + "target": "tests_test_import_excel_test_parse_posts_sheet_config_multiple_sections" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L759", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_posts_sheet_conditions_basic", + "target": "tests_test_import_excel_make_posts_conditions_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L779", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_parse_posts_sheet_conditions_skips_empty", + "target": "tests_test_import_excel_make_posts_conditions_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L746", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_746", + "target": "tests_test_import_excel_make_posts_conditions_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L758", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_758", + "target": "tests_test_import_excel_test_parse_posts_sheet_conditions_basic" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L778", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_778", + "target": "tests_test_import_excel_test_parse_posts_sheet_conditions_skips_empty" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L811", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_make_workbook_mock", + "target": "tests_test_import_excel_make_empty_worksheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L797", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_797", + "target": "tests_test_import_excel_make_empty_worksheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L866", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_import_file_section3c_skipped_when_not_most_recent", + "target": "tests_test_import_excel_make_workbook_mock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L886", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_import_file_section3c_runs_when_most_recent_but_finds_nothing", + "target": "tests_test_import_excel_make_workbook_mock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L804", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_804", + "target": "tests_test_import_excel_make_workbook_mock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L867", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_import_file_section3c_skipped_when_not_most_recent", + "target": "tests_test_import_excel_make_session_mock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L887", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_test_import_file_section3c_runs_when_most_recent_but_finds_nothing", + "target": "tests_test_import_excel_make_session_mock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L840", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_840", + "target": "tests_test_import_excel_make_session_mock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L862", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_862", + "target": "tests_test_import_excel_test_import_file_section3c_skipped_when_not_most_recent" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/tests/test_import_excel.py", + "source_location": "L881", + "weight": 1.0, + "confidence_score": 1.0, + "source": "tests_test_import_excel_rationale_881", + "target": "tests_test_import_excel_test_import_file_section3c_runs_when_most_recent_but_finds_nothing" + } + ], + "hyperedges": [], + "built_at_commit": "6085fd660692d0eade02696128e186f03f2c8f5e" +} \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/manifest.json b/evaluations/rsl-siege-manager/graphify-out-with-tests/manifest.json new file mode 100644 index 00000000..11d3b3d9 --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out-with-tests/manifest.json @@ -0,0 +1,1174 @@ +{ + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\env.py": { + "mtime": 1778710280.615952, + "hash": "731374a0c60b7a3d7ab4fe969af77cdc" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0001_initial_schema.py": { + "mtime": 1778710280.6174564, + "hash": "89da22558cc25f69a85fdb95c5226094" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0002_add_preview_columns.py": { + "mtime": 1778710280.6174564, + "hash": "7272088a42b67a8e4808eb3c9b7dd696" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0003_make_siege_date_nullable.py": { + "mtime": 1778710280.6174564, + "hash": "2e9c3427061e4be701fe13af654dff62" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0004_add_post_priority_config.py": { + "mtime": 1778710280.6174564, + "hash": "6dfb516e649bc98b4af75c6d72217b55" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0005_add_description_to_post_priority_config.py": { + "mtime": 1778710280.6184616, + "hash": "610068cb10304ae4dbcc7bc71a32e78c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0006_power_level_and_drop_sort_value.py": { + "mtime": 1778710280.6184616, + "hash": "8182ba42f31e35ef28f5c4d9dabfde1c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0007_fix_group_number_max.py": { + "mtime": 1778710280.6184616, + "hash": "4b47bdeebb46156e514a5b067df94235" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0008_add_matched_condition_id_to_position.py": { + "mtime": 1778710280.6184616, + "hash": "c954ca95fdadd4a7ef20ffa633d12fed" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0009_add_discord_id_to_member.py": { + "mtime": 1778710280.6194618, + "hash": "dcf300cf8ed80c1b8b3825bcca67e245" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0010_add_last_seen_changelog_at_to_member.py": { + "mtime": 1778710280.6194618, + "hash": "611bcc51cacb45fa38a397483251978e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0011_add_post_suggest_preview.py": { + "mtime": 1778710280.6194618, + "hash": "c2911c522068032d232ebdda418ae402" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\config.py": { + "mtime": 1778710280.6260061, + "hash": "af7166f36bc6603c51a31821b4169166" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\main.py": { + "mtime": 1778710280.6275196, + "hash": "ef3a111d022f595379cdfc5e4949daf0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\middleware.py": { + "mtime": 1778710280.6275196, + "hash": "4f8742627daa35dd41d30076e24f6215" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\rate_limit.py": { + "mtime": 1778710280.631044, + "hash": "d19e5a629177df85c43e3c14f4dc0d46" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\telemetry.py": { + "mtime": 1778710280.639125, + "hash": "0c58ed46b46a65c553da095108b27bfd" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\__init__.py": { + "mtime": 1778710280.6194618, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\attack_day.py": { + "mtime": 1778710280.6204622, + "hash": "03d01cbf514354d406ed91fbc65b35a1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\auth.py": { + "mtime": 1778710280.6204622, + "hash": "a5f33d846d98152318daec3a46d0d248" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\autofill.py": { + "mtime": 1778710280.6204622, + "hash": "a09d58b4a1d3c5af8f5c8a3ba6a7029e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\board.py": { + "mtime": 1778710280.621461, + "hash": "aaeb8712e563ba3dec103df4a3fc04ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\buildings.py": { + "mtime": 1778710280.621461, + "hash": "ffdd155eb162bceae062773746e4a736" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\changelog.py": { + "mtime": 1778710280.621461, + "hash": "46c813936a455f15a7b9c81d21193278" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\comparison.py": { + "mtime": 1778710280.621461, + "hash": "ddca1ab6be65dc3372ad48159b99f019" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\config.py": { + "mtime": 1778710280.6224627, + "hash": "4cfef35cbf17cda161b15128a218884a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\discord_sync.py": { + "mtime": 1778710280.6224627, + "hash": "4af25fe7f78cdd7ed0a19b43a6c0d944" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\health.py": { + "mtime": 1778710280.6224627, + "hash": "7e3eb64485f05fe2e50e5681ca1f0932" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\images.py": { + "mtime": 1778710280.6224627, + "hash": "bdbf492718a5d11dd6b98c1d639931ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\lifecycle.py": { + "mtime": 1778710280.6234608, + "hash": "224fbb28b68c1d85ac358d96f4d8d307" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\members.py": { + "mtime": 1778710280.6234608, + "hash": "fade885c4c9b9ac20cccbc9b1022ea02" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\notifications.py": { + "mtime": 1778710280.6234608, + "hash": "ff2badd250e6e4abd60f76c17bf197a9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\posts.py": { + "mtime": 1778710280.6234608, + "hash": "8f342e23f193f2ba528ee0f2ea924710" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\post_priority_config.py": { + "mtime": 1778710280.6234608, + "hash": "6cbb8addbb8fbbf729b2938cd64e4077" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\post_suggestions.py": { + "mtime": 1778710280.6234608, + "hash": "57ba4074cf0d1413e5604e6c20c458ba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\reference.py": { + "mtime": 1778710280.6249774, + "hash": "e723050f84384dc9adcdb7796fd5a105" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\sieges.py": { + "mtime": 1778710280.6249774, + "hash": "e2f544c55968478ef4b80943fcda6ccc" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\siege_members.py": { + "mtime": 1778710280.6249774, + "hash": "f2eb1fd29b959b826008f6a627da9c0d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\validation.py": { + "mtime": 1778710280.6249774, + "hash": "05d95e278dfb5f2da15598253b2ec32e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\version.py": { + "mtime": 1778710280.6249774, + "hash": "72b877fef624fbab48f6170475e4482b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\__init__.py": { + "mtime": 1778710280.6204622, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\base.py": { + "mtime": 1778710280.6260061, + "hash": "16deb2759f7de2cf86f328dce6b2d38b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\seeds.py": { + "mtime": 1778710280.6260061, + "hash": "c1238d95afe54852c9f8e4946bcd1184" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\session.py": { + "mtime": 1778710280.6260061, + "hash": "d83e8d560833942da095e4e77ef715a0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\__init__.py": { + "mtime": 1778710280.6260061, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\dependencies\\auth.py": { + "mtime": 1778710280.6260061, + "hash": "1e13ad83f41440240858e379bc350e32" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\dependencies\\__init__.py": { + "mtime": 1778710280.6260061, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building.py": { + "mtime": 1778710280.6275196, + "hash": "264dd9c1b5b9af8261e39ef40bb56d0d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building_group.py": { + "mtime": 1778710280.6285377, + "hash": "9e4fe949454ac06e8919c54d17cd053f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building_type_config.py": { + "mtime": 1778710280.6285377, + "hash": "8d46f6dce4eefc61342e1a5084563f76" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\enums.py": { + "mtime": 1778710280.6285377, + "hash": "bbcd730b23b6ae966f00a7b209dfa1ba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\member.py": { + "mtime": 1778710280.6285377, + "hash": "00c8c2af6e5087bcdf9b485d8f32afab" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\member_post_preference.py": { + "mtime": 1778710280.6295295, + "hash": "9b9b1f5de349977ad8897398d6698ef8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\notification_batch.py": { + "mtime": 1778710280.6295295, + "hash": "3ad5726f0ca19a456eb02ac12dbb4f89" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\notification_batch_result.py": { + "mtime": 1778710280.6295295, + "hash": "c4fd788d9d88b1b994a35cf770b7d875" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\position.py": { + "mtime": 1778710280.6300344, + "hash": "d1bafc8772229db93351d7e179c15ea3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post.py": { + "mtime": 1778710280.6300344, + "hash": "6d62df6899ba21737f61bb917210dad0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_active_condition.py": { + "mtime": 1778710280.6300344, + "hash": "ab9b5ba959ad8c87635a5565cc7a6857" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_condition.py": { + "mtime": 1778710280.6300344, + "hash": "9fc05e2a8819db37bc7bd224f8c2db67" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_priority_config.py": { + "mtime": 1778710280.6300344, + "hash": "21b1c5860d8e42fef07463b5bf52ceab" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\siege.py": { + "mtime": 1778710280.631044, + "hash": "ac548c74c451dca2c84d9d039de46b6a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\siege_member.py": { + "mtime": 1778710280.631044, + "hash": "24f74c67df2a8375175a818e2ef592be" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\__init__.py": { + "mtime": 1778710280.6275196, + "hash": "002c14a2213747661b77b5a30b8d3110" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\attack_day.py": { + "mtime": 1778710280.631044, + "hash": "6636af44aa1f3f3079f864b3c8bb9cac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\autofill.py": { + "mtime": 1778710280.6320436, + "hash": "261012c1a7cdae9c401576016a1e0535" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\board.py": { + "mtime": 1778710280.6320436, + "hash": "c69579e0609dceba1fafa087eda2405e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\building.py": { + "mtime": 1778710280.6320436, + "hash": "17a76e00a22acfa311063cf3bf0aceb1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\changelog.py": { + "mtime": 1778710280.6320436, + "hash": "f86a9e09fe755643a15a7f7b06a4f7e7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\common.py": { + "mtime": 1778710280.6320436, + "hash": "011d46dc2203c3ed97184cec370ac179" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\comparison.py": { + "mtime": 1778710280.6320436, + "hash": "48ffa2ab0f4f95040236b6611ed375d0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\member.py": { + "mtime": 1778710280.6320436, + "hash": "726dad9ff8c7a8bffd365ddcfd543645" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post.py": { + "mtime": 1778710280.6335557, + "hash": "ff0149eb24572e4ba21fa191a73c762f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post_condition.py": { + "mtime": 1778710280.6335557, + "hash": "6fec8cfb3b2eea536953026b0116b4af" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post_suggestions.py": { + "mtime": 1778710280.6335557, + "hash": "7db30a2f2f5a9232d8a783a85ee2df6a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\siege.py": { + "mtime": 1778710280.6335557, + "hash": "1178a2cb1bc13ec3defa148e36991683" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\siege_member.py": { + "mtime": 1778710280.6335557, + "hash": "45b79b07f1d489b2daef9b719a0a0929" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\validation.py": { + "mtime": 1778710280.6335557, + "hash": "0221b358c7f777442cde715c227ac6ca" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\version.py": { + "mtime": 1778710280.6335557, + "hash": "b2fbcf0d416ddb9f1997acd6cb62bcf3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\__init__.py": { + "mtime": 1778710280.631044, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\attack_day.py": { + "mtime": 1778710280.6350994, + "hash": "997ffc05e8c23b0a544979ae0ed8dc7a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\autofill.py": { + "mtime": 1778710280.6350994, + "hash": "e9ce9ddf48273c0d9932f75ea8e8b0be" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\board.py": { + "mtime": 1778710280.6350994, + "hash": "7222c72b83f1091828c689f490ebcfe6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\bot_client.py": { + "mtime": 1778710280.6350994, + "hash": "b699c8adf0b08521c02f3e6a4072c1ef" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\buildings.py": { + "mtime": 1778710280.6361103, + "hash": "22d3b48b747d63585084db712f7526ff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\building_capacity.py": { + "mtime": 1778710280.6361103, + "hash": "5b463b5af305f54cd34e75e568756db9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\comparison.py": { + "mtime": 1778710280.6361103, + "hash": "17d8b0f29ef13d8a469dcbe79e5e0b18" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\discord_sync.py": { + "mtime": 1778710280.6361103, + "hash": "0fdbe1441877c11241501e6f37e6874a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\image_gen.py": { + "mtime": 1778710280.6361103, + "hash": "42d66ff5cc72422b6cffdce18e7b88e9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\lifecycle.py": { + "mtime": 1778710280.6376143, + "hash": "c6850f4b0ee921550d23553aa50db9ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\members.py": { + "mtime": 1778710280.6376143, + "hash": "1586e16427694996d81ce4d54812c5f0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\notification_message.py": { + "mtime": 1778710280.6376143, + "hash": "514ad0558f51c114a96e8316cd4392bf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\posts.py": { + "mtime": 1778710280.63862, + "hash": "56792826d430eaa6cdd86796ddb43c10" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\post_suggestions.py": { + "mtime": 1778710280.63862, + "hash": "4a62a36d881bf55a4f73b623b95738bf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\reference.py": { + "mtime": 1778710280.639125, + "hash": "e86f9864edb3e0eaa1a5e00cd2b903a9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\sieges.py": { + "mtime": 1778710280.639125, + "hash": "4f43c0760d92d03cc1062ba4b7610dba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\siege_members.py": { + "mtime": 1778710280.639125, + "hash": "444d8aba42f567d23a8b1a5a12e51200" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\validation.py": { + "mtime": 1778710280.639125, + "hash": "bf8431f5d8b0c8dc793ed927f6de075f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\__init__.py": { + "mtime": 1778710280.6335557, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\scripts\\seed.py": { + "mtime": 1778710280.640529, + "hash": "08609621e397256df55a763eb98530c3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\scripts\\seed_demo.py": { + "mtime": 1778710280.6415303, + "hash": "ef5c21e671c3184b5cbb2240979c0690" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\conftest.py": { + "mtime": 1778710280.6415303, + "hash": "f554d4679bb3e3dfb254292c14208f95" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_attack_day.py": { + "mtime": 1778710280.6415303, + "hash": "0977e2c92215d438097727789b5fcabe" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_auth.py": { + "mtime": 1778710280.642529, + "hash": "e7977b5f5003d94228fde1a79f93f538" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_auth_rate_limit.py": { + "mtime": 1778710280.642529, + "hash": "fc3c01fc3933c4256bd2766086c14b77" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_autofill.py": { + "mtime": 1778710280.642529, + "hash": "b3d820ab0a12548a132248c15dfed9fd" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_board.py": { + "mtime": 1778710280.6435287, + "hash": "9f22d0b8e9e80221bde4732c7ffa6d9c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_bot_client.py": { + "mtime": 1778710280.6435287, + "hash": "c488817462a865f424d203c5763303c4" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_buildings.py": { + "mtime": 1778710280.6435287, + "hash": "0c3b166757efe22f6c6d1cdc6ca49b3f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_changelog.py": { + "mtime": 1778710280.6435287, + "hash": "3312abb2cde111c3f7213c915d7d599d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_comparison.py": { + "mtime": 1778710280.6435287, + "hash": "afd7a89a6c4be122e1872bddacfd9109" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_config.py": { + "mtime": 1778710280.6435287, + "hash": "507a31b2e18b33afd0765a1ad402cfdb" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_config_endpoint.py": { + "mtime": 1778710280.6435287, + "hash": "ac1338657f7dde5172a8175cceb1fa7b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_cors.py": { + "mtime": 1778710280.6450343, + "hash": "daf9c3edb71d1b6ad13bd0f8db04be01" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_discord_sync.py": { + "mtime": 1778710280.6450343, + "hash": "ce0682700593adee9ed2ed864da5e013" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_enums.py": { + "mtime": 1778710280.6450343, + "hash": "20c403a02992b2d378fb4ae18f721e9c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_health.py": { + "mtime": 1778710280.6450343, + "hash": "4ed39ff6a50be298eef1a9802d977439" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_image_gen.py": { + "mtime": 1778710280.6460407, + "hash": "9791fcb55b4af13cc334389a61559a99" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_lifecycle.py": { + "mtime": 1778710280.6460407, + "hash": "fd05826746be292aed3292dbe90445ab" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_lifecycle_integration.py": { + "mtime": 1778710280.6460407, + "hash": "2e1b940b00e9f311b97a22efb99f4122" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_members.py": { + "mtime": 1778710280.6460407, + "hash": "b20dc80db77e6525f5a29be8b11f7a59" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_member_changelog_column.py": { + "mtime": 1778710280.6460407, + "hash": "f954c9533daeea082379c61835f892ab" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_notifications.py": { + "mtime": 1778710280.6470416, + "hash": "7fe4ae6c6aa8507660739b2a6b310e4f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_notification_message.py": { + "mtime": 1778710280.6470416, + "hash": "6a5503b79277ae98d36178ff8e708e15" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_posts.py": { + "mtime": 1778710280.6470416, + "hash": "81d1e413b611bc937cd7543cdc4b800d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_post_suggestions.py": { + "mtime": 1778710280.6470416, + "hash": "e376b0c4f37573431cb0e9d8280f949a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_post_suggestions_integration.py": { + "mtime": 1778710280.6470416, + "hash": "04b488d8def3668e0014304c1b8f147e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_reference.py": { + "mtime": 1778710280.6470416, + "hash": "940e02363b5ff046de3153a797f4faf5" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_schema.py": { + "mtime": 1778710280.6485467, + "hash": "636ad7d430b456534e8ac7289d42db20" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_seed_canonical.py": { + "mtime": 1778710280.6485467, + "hash": "8ed890f220e06153703da2aec3c9cece" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_seed_demo.py": { + "mtime": 1778710280.6491084, + "hash": "8c2e7a81046b0216979f21daac69b17c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_sieges.py": { + "mtime": 1778710280.6491084, + "hash": "05b7fe8eba119695e8d8b2ad51299642" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_telemetry.py": { + "mtime": 1778710280.6491084, + "hash": "24e9bdc43f3b5a2bf63cad36a2671295" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_validation.py": { + "mtime": 1778710280.649632, + "hash": "d6e213c1e29301b6adc8a129295c4c17" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\test_version.py": { + "mtime": 1778710280.650155, + "hash": "ec29042c155d2dfe090ae87d79d9f54e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\tests\\__init__.py": { + "mtime": 1778710280.6415303, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\config.py": { + "mtime": 1778710280.65144, + "hash": "b80130299a391da986cfd02386e5dea7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\discord_client.py": { + "mtime": 1778710280.65144, + "hash": "99db4ab6cf0ecc3d30602e2b8db66a70" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\http_api.py": { + "mtime": 1778710280.65144, + "hash": "936ed9c6f1e4443f5035d0de3340329e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\main.py": { + "mtime": 1778710280.6519608, + "hash": "e05678b35f14c576d1cd2ee7f0ee86b0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\telemetry.py": { + "mtime": 1778710280.6519608, + "hash": "a42e02bf2fddd81cca77baa570cdc1ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\__init__.py": { + "mtime": 1778710280.650921, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\tests\\conftest.py": { + "mtime": 1778710280.6535122, + "hash": "53970b9a543ea0e4b170b7e31f5e022c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\tests\\test_discord_client.py": { + "mtime": 1778710280.6535122, + "hash": "9e6d6a163d5dc0dbca534bd14269b408" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\tests\\test_get_guild_member.py": { + "mtime": 1778710280.6540315, + "hash": "44b5b3bb1ad92953f9d39972a779ddb7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\tests\\test_http_api.py": { + "mtime": 1778710280.6540315, + "hash": "6f5d0c7f52ce8e017dc50b4bab6b3d62" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\tests\\test_telemetry.py": { + "mtime": 1778710280.6545522, + "hash": "938f4338b7342c0d1c39f468c3c31e0a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\tests\\__init__.py": { + "mtime": 1778710280.6530018, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\eslint.config.js": { + "mtime": 1778710280.6638145, + "hash": "820d67ddf4af94ab7a60b247ef568493" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\playwright.config.ts": { + "mtime": 1778710280.6663249, + "hash": "c0c6f46da1f83e4dad062bf96a1645ce" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\postcss.config.js": { + "mtime": 1778710280.6663249, + "hash": "33fad9c02cb0ec6d6030369ef6347d57" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\tailwind.config.ts": { + "mtime": 1778710280.6950474, + "hash": "ab2458852a94f3918fc4dc8eec8ee34a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\vite.config.ts": { + "mtime": 1778710280.6955535, + "hash": "f0b8bf87fac76c40d6423f702e2a122d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\vitest.config.ts": { + "mtime": 1778710280.6955535, + "hash": "e102be79d7bf6fd8b83320963d3d4d00" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\board.spec.ts": { + "mtime": 1778710280.6618135, + "hash": "2e1ab122df18ca111301f5244c1b4903" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\members.spec.ts": { + "mtime": 1778710280.6618135, + "hash": "012b10ee19afe7952752bdb34d947596" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\siege-lifecycle.spec.ts": { + "mtime": 1778710280.6638145, + "hash": "d3c27ac7e90b3bb5f190694f8d692f6c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\smoke.spec.ts": { + "mtime": 1778710280.6638145, + "hash": "7ffc073a7b7ce29603e7b1dda85b101b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\App.tsx": { + "mtime": 1778710280.6731784, + "hash": "dc94be0210c5307affde3c5e0e5412b7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\main.tsx": { + "mtime": 1778710280.6834679, + "hash": "5310a6bf9e3bdf98dc615af3ceff1537" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\vite-env.d.ts": { + "mtime": 1778710280.6950474, + "hash": "0352474ba2918efe13895edbc3780d94" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\board.ts": { + "mtime": 1778710280.6731784, + "hash": "997fae78645cd70b5c2fc3476313e4c1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\changelog.ts": { + "mtime": 1778710280.6731784, + "hash": "9baa9e3d2be3e4bb566ba86923829a17" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\client.ts": { + "mtime": 1778710280.6746829, + "hash": "10a76391bc7690246d448e867cf7af57" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\config.ts": { + "mtime": 1778710280.6746829, + "hash": "3715d4f6dd51e505949f4b0f7ec9b309" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\members.ts": { + "mtime": 1778710280.6752062, + "hash": "385a652bab3624eb1a556666b369c7be" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\notifications.ts": { + "mtime": 1778710280.6752062, + "hash": "b202ca64e4f5445d309fa8cede22ff0c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\posts.ts": { + "mtime": 1778710280.6752062, + "hash": "42847a5a2b91ef16e25b1be64c9c5955" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\sieges.ts": { + "mtime": 1778710280.6752062, + "hash": "f1014577b76ed9125141f290e8fb7578" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\types.ts": { + "mtime": 1778710280.6752062, + "hash": "f83637e41fcfc597e14c140b81e74a63" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\version.ts": { + "mtime": 1778710280.6762116, + "hash": "3c320e1ae650ccfaf0fcc58db6f0ad8c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\Carousel.tsx": { + "mtime": 1778710280.6772118, + "hash": "9c1e5964f8b5e400f963606ee0cd4eb9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ChangelogDropdown.tsx": { + "mtime": 1778710280.6772118, + "hash": "32af80944e867e66ec8cf25f6391e233" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\DiscordSyncModal.tsx": { + "mtime": 1778710280.6772118, + "hash": "52ea2cf5bf019ad4e9c376a447e87eaa" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\GroupByToggle.tsx": { + "mtime": 1778710280.6772118, + "hash": "78856592b8aaeb706087c4ef1e6c843b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\Layout.tsx": { + "mtime": 1778710280.6772118, + "hash": "e813042f31449a0de61f906090164004" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\PostsTab.tsx": { + "mtime": 1778710280.678212, + "hash": "3f11fa6d290cff08dffcc9262a092b3a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\PostSuggestionsModal.tsx": { + "mtime": 1778710280.678212, + "hash": "9c16b7f40b7352b2f423f7ce46a68b11" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\RequireAuth.tsx": { + "mtime": 1778710280.678212, + "hash": "cd2b2e1cd2d319fc3f3977f7589f291e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\SiegeLayout.tsx": { + "mtime": 1778710280.679212, + "hash": "5dc89034188b6823763f9c6852f5f03a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\badge.tsx": { + "mtime": 1778710280.679212, + "hash": "639942830535b4f2bb8e21e8d3a674e4" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\button.tsx": { + "mtime": 1778710280.679212, + "hash": "99376e90207bb72645519879a6ad87aa" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\checkbox.tsx": { + "mtime": 1778710280.679212, + "hash": "596afb4c85e5b432c24e2606e9623bf8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\dialog.tsx": { + "mtime": 1778710280.679212, + "hash": "b917e9be88d5dc6b1b6d2660df3be9a0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\dropdown-menu.tsx": { + "mtime": 1778710280.6804683, + "hash": "8f8f3621f203e9d7d566ed3827ddb95c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\input.tsx": { + "mtime": 1778710280.6804683, + "hash": "4f418a1677a7fa837b7a5f16b05eabea" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\label.tsx": { + "mtime": 1778710280.6804683, + "hash": "ede7445a0bd4c9380bff1fb664d21763" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\select.tsx": { + "mtime": 1778710280.6804683, + "hash": "594f45397eb2ac6bd77df7b7e37d5644" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\table.tsx": { + "mtime": 1778710280.681468, + "hash": "0e1676ab2a771ea388b5fa63036cd502" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\textarea.tsx": { + "mtime": 1778710280.681468, + "hash": "4118508b3f819ceaee3b0d5f16bbb649" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\context\\AuthContext.tsx": { + "mtime": 1778710280.681468, + "hash": "44ab8c9079dffb96a8f0826540377cb3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\buildingColors.ts": { + "mtime": 1778710280.6824672, + "hash": "b348eff15681381b572787a373b909ce" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\groupPostConditions.ts": { + "mtime": 1778710280.6824672, + "hash": "788b0f8427b263370cdab41d8850cf41" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\post-priority.ts": { + "mtime": 1778710280.6824672, + "hash": "94e7a97549b23802f43bb3f6ac6c28cc" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\postConditionTypes.ts": { + "mtime": 1778710280.6834679, + "hash": "3b06353374f1df46ea8de1cfd4afd788" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\useGroupByPreference.ts": { + "mtime": 1778710280.6834679, + "hash": "bb6b5032d31d41e56bfa0c1462240482" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\utils.ts": { + "mtime": 1778710280.6834679, + "hash": "d9837f38cc05303254571985e3164050" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\BoardPage.tsx": { + "mtime": 1778710280.6834679, + "hash": "ca60bdc402bf7fc73d45bf4a9786efa2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\ComparisonPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "5f40cf11f1c285fcc713c66f6b70cc7e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\LandingPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "0592d360b4d150e643f2ed7d853cec37" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\LoginPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "a7f86666a5e860fa06370cd44d5b2009" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\MemberDetailPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "91d2961273fc9f2065dd82b95a4dd2e6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\MembersPage.tsx": { + "mtime": 1778710280.6860092, + "hash": "0e20169e021eddba33936ff03cb09ed6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\PostPrioritiesPage.tsx": { + "mtime": 1778710280.6860092, + "hash": "44ba6c946c49e4491f401a05ada7b0ce" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\PostsPage.tsx": { + "mtime": 1778710280.6860092, + "hash": "6299292c6d99e49321c62ebd458b5a3f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeCreatePage.tsx": { + "mtime": 1778710280.6860092, + "hash": "2889e8903df72e1ab56a1a1a13ef0519" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeMembersPage.tsx": { + "mtime": 1778710280.687007, + "hash": "864268a2bc137e9b39782eb85260adff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeSettingsPage.tsx": { + "mtime": 1778710280.687007, + "hash": "f594078ade4735208a55056c7cf4dd5f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegesPage.tsx": { + "mtime": 1778710280.687007, + "hash": "f93156052c5124138148122147b74acb" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SystemPage.tsx": { + "mtime": 1778710280.687007, + "hash": "9332c96da0f1502dbb14d6f1d7164aaa" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\handlers.ts": { + "mtime": 1778710280.691031, + "hash": "d0c5acbf5a8354801f75ff4caac5c5da" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\server.ts": { + "mtime": 1778710280.6940484, + "hash": "3feed449d732643517e6a64bdf673434" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\setup.ts": { + "mtime": 1778710280.6940484, + "hash": "3709e3aa95abf0544678f0f2d9b46702" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\utils.tsx": { + "mtime": 1778710280.6940484, + "hash": "e25ee1f900621ffc9bf8dfd2fb6b406f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\Carousel.test.tsx": { + "mtime": 1778710280.6880064, + "hash": "ed7af8eb32a9c3f4917d488280458771" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\ChangelogDropdown.test.tsx": { + "mtime": 1778710280.6890073, + "hash": "ca8589dc33b4a76b60f5734ce2c9912a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\GroupByConditions.test.tsx": { + "mtime": 1778710280.6890073, + "hash": "59ef06186d9d5c373c145cb620480dc6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\GroupByToggle.test.tsx": { + "mtime": 1778710280.6895123, + "hash": "8076603b108a6a9556290d3ca12842d0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\LandingPage.test.tsx": { + "mtime": 1778710280.6895123, + "hash": "6443aef7d8d30a4bae294ee781cd54f2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\Layout.test.tsx": { + "mtime": 1778710280.6895123, + "hash": "24143f8703e668987d9ffd297905e133" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\PostsTab.test.tsx": { + "mtime": 1778710280.6895123, + "hash": "a7924bc94e83d9e2d39cee817ee29eee" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\PostSuggestionsModal.test.tsx": { + "mtime": 1778710280.6895123, + "hash": "5fb779e8a5fc671e8998e4fd6d17300d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\components\\SiegeLayout.test.tsx": { + "mtime": 1778710280.6895123, + "hash": "132fbee1c6d3922eaf395460a7088214" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\context\\AuthContext.test.tsx": { + "mtime": 1778710280.691031, + "hash": "41be23493241923ee1e7bc2611f91e5f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\lib\\groupPostConditions.test.ts": { + "mtime": 1778710280.691031, + "hash": "8ee1bcf272b560a8bcbdcddfc70ffb10" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\lib\\postConditionTypes.test.ts": { + "mtime": 1778710280.691031, + "hash": "652ab758a5a1f6ff8f6a578446a2b9f7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\BoardPage.test.tsx": { + "mtime": 1778710280.692048, + "hash": "507ead176edb84f62dc6e010dbe2bec0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\LoginPage.test.tsx": { + "mtime": 1778710280.692048, + "hash": "9bef6b0eba107f34e9ad52539c2efe46" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\MembersPage.test.tsx": { + "mtime": 1778710280.692048, + "hash": "3f2ee2ccb6b854f90800deb228e7e151" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\PostsPage.groupBy.test.tsx": { + "mtime": 1778710280.692048, + "hash": "97bd6fcb6db233af92d7f3d033030a20" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\PostsPage.test.tsx": { + "mtime": 1778710280.6930473, + "hash": "21430b2fd1e9da0ed69bf51ecb38ca8a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\SiegeMembersPage.test.tsx": { + "mtime": 1778710280.6930473, + "hash": "2c9b39064fdfb13508b2a837e7f65831" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\SiegeSettingsPage.test.tsx": { + "mtime": 1778710280.6930473, + "hash": "8c34c10c18ff7a32ffeccd9630ed451b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\test\\pages\\SiegesPage.test.tsx": { + "mtime": 1778710280.6930473, + "hash": "f07ff3cf0ed4bb0696ecd6e2d5b5b821" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\types\\changelog.d.ts": { + "mtime": 1778710280.6940484, + "hash": "29f6e6e4d1a48ca3686c20d21c03dc3c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-db.ps1": { + "mtime": 1778710280.7000616, + "hash": "2963ef492dbaa1e8aed3c7d0b42cb2bf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-excel-import.ps1": { + "mtime": 1778710280.7010694, + "hash": "833c292e832a70a4d642e969418cec01" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-images.ps1": { + "mtime": 1778710280.701412, + "hash": "770e3450dec21a6498dd9380f2070049" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-keyvault.ps1": { + "mtime": 1778710280.701412, + "hash": "571c851084af0db873bdc82226b59797" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-reimport.ps1": { + "mtime": 1778710280.701412, + "hash": "39d7a16633e94d6cefeb8aca40862cff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\generate-origin-pfx.ps1": { + "mtime": 1778710280.7034204, + "hash": "b0900217644486cdf9adf852befa4fde" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\rebuild.ps1": { + "mtime": 1778710280.7034204, + "hash": "1b5123763516e1ee3dbc308f2638eb4f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\import_excel.py": { + "mtime": 1778710280.70243, + "hash": "4151fee1079d2b495340976e008542dd" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\tests\\test_import_excel.py": { + "mtime": 1778710280.70243, + "hash": "8fe8befd8dbcdc09c53f053fbb57ffc2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\tests\\__init__.py": { + "mtime": 1778710280.70243, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\experiments\\run-graphify-dry-run.ps1": { + "mtime": 1778715097.451517, + "hash": "8a66f56768d8c9b2b04c9d03452a8285" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CHANGELOG.md": { + "mtime": 1778710280.6144302, + "hash": "0c5a48d5f48933acad20d931797847b0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CLAUDE.md": { + "mtime": 1778710280.614946, + "hash": "efb936d1d3711ed3ca65b394f9d6b9b2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CODE_OF_CONDUCT.md": { + "mtime": 1778710280.614946, + "hash": "9b2d51a163a531cb2f62e72697b0ccc1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CONTRIBUTING.md": { + "mtime": 1778710280.614946, + "hash": "f1099f1c0582333df2fabef4dccad223" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docker-compose.prod.yml": { + "mtime": 1778710280.6545522, + "hash": "e55ffd8443f4dd9cf1acb386a7956bfb" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docker-compose.yml": { + "mtime": 1778710280.6550682, + "hash": "376b6eb4a3cfab39144103477cea42cf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\README.md": { + "mtime": 1778710280.615952, + "hash": "8b4ba27465aa3d5dfd16ed64c6cbf45f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\SUPPORT.md": { + "mtime": 1778710280.615952, + "hash": "64c8848cde6a11b59d25bcc9b621e546" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\requirements-dev.txt": { + "mtime": 1778710280.640529, + "hash": "61ce4838a8959c3c183db9bab83b737d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\requirements.txt": { + "mtime": 1778710280.640529, + "hash": "b06051b552c2ea4732940c0dbc2b9db0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\requirements-dev.txt": { + "mtime": 1778710280.6524813, + "hash": "cf6fc69a9af8b95f5758cac0a94bb9e6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\requirements.txt": { + "mtime": 1778710280.6524813, + "hash": "fbf3dc8cb3581931efa8dc526f44f7ef" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\IMPLEMENTATION_PLAN.md": { + "mtime": 1778710280.6550682, + "hash": "5e4f9f914ca2ce9d67d6705a5933b7ba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\RUNBOOK.md": { + "mtime": 1778710280.6555874, + "hash": "50fc656921246e9004108c9b114a09e5" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\siege_levels.md": { + "mtime": 1778710280.6587057, + "hash": "07d9f028f42a8b94ce3365a6f72bafc4" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\WEB_DESIGN_DOCUMENT.md": { + "mtime": 1778710280.656117, + "hash": "83b709cc8ac4aa14b027eda0a0c562b8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\design-refs\\post-suggestions\\README.md": { + "mtime": 1778710280.6566384, + "hash": "de10b175d0df9256e5daeca315f7b252" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\experiments\\graphify-dry-run.md": { + "mtime": 1778711028.4433894, + "hash": "496df0deb7da1e88640f0a8bcdcb7e3b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\mockup-landing.html": { + "mtime": 1778710280.6571586, + "hash": "0548e8204463ddf92a09c5ce6f97fe34" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\mockup-login.html": { + "mtime": 1778710280.6571586, + "hash": "7e1759c2d6a5fa6a3c4e5ed58777c289" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\README.md": { + "mtime": 1778710280.6566384, + "hash": "fe28480a5cc9c486f4dc5d6be6c5f368" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\plans\\public-launch-self-hostable-and-landing-page.md": { + "mtime": 1778710280.657677, + "hash": "afed648bab4d1590d9b833607a4f7502" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\self-host\\anywhere.md": { + "mtime": 1778710280.6581955, + "hash": "2efab5a64706d9964b8fa13de3037449" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\self-host\\azure.md": { + "mtime": 1778710280.6587057, + "hash": "c9ee5c5fc8721e7c0ca2bb54da0782c9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-04-08-discord-auth-implementation.md": { + "mtime": 1778710280.6592517, + "hash": "01ee8f99120035b952a2699b8a01eb6b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-05-08-component-versioning.md": { + "mtime": 1778710280.6597755, + "hash": "4eea9e7828ef6f2c88737f1f2feb1ee2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-05-09-post-suggestions.md": { + "mtime": 1778710280.6597755, + "hash": "3c89d2df41aebf5c5bc5add19cbd6281" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\discord-auth-plan.md": { + "mtime": 1778710280.6597755, + "hash": "bab1c00cda76f8ccaf26079a049ecf40" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\v1-release-plan.md": { + "mtime": 1778710280.6607814, + "hash": "f7ebc80091b9fc6eb0a5bf8661c0300e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\index.html": { + "mtime": 1778710280.6638145, + "hash": "dde055b245027a69a68049238ed823b3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\infra\\README.md": { + "mtime": 1778710280.696556, + "hash": "3e76fbd727bcceeb02eb75d416c64aff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\README.md": { + "mtime": 1778710280.701412, + "hash": "4a0e8a05091bd257fe417671858923a2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\requirements.txt": { + "mtime": 1778710280.70243, + "hash": "5e740ca3e2b112ec37fea64eae859ae0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\FAQ.md": { + "mtime": 1778710280.7034204, + "hash": "5e52ba23a226df064a14d75b1fd0d715" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Getting-Started.md": { + "mtime": 1778710280.7034204, + "hash": "f9dea57e10cfeada6f10255144249741" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Home.md": { + "mtime": 1778710280.7034204, + "hash": "32652bdc5aadfc11288cc5a4df5fe4a3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Self-Host-on-Any-VPS.md": { + "mtime": 1778710280.7034204, + "hash": "178c7e9323276c57b1ce23786431f634" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Self-Host-on-Azure.md": { + "mtime": 1778710280.7049341, + "hash": "170d3ef1fbc3b5d52c18a8b6470951f5" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\_Sidebar.md": { + "mtime": 1778710280.7049341, + "hash": "d92afc34965b5e470b581ce61e53b6ca" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\favicon.svg": { + "mtime": 1778710280.6663249, + "hash": "1544a9686a82728b10dd2d54a4c539b4" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-assignment-board.png": { + "mtime": 1778710280.6673253, + "hash": "138b785969e45c8eeec46b97c86dbfec" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-discord-image.png": { + "mtime": 1778710280.6673253, + "hash": "490ecc84ff80e40ca12651e2626bc424" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-member-management.png": { + "mtime": 1778710280.6688316, + "hash": "e87aa520a2aaecf3e9a1eea306182d0d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-post-assignments.png": { + "mtime": 1778710280.6698372, + "hash": "79bdc954a2b7803d178cc4b3f2d7fbd8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-siege-comparison.png": { + "mtime": 1778710280.6711512, + "hash": "913d494ae2e7465514441dec70f864c9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-validation-errors.png": { + "mtime": 1778710280.6721778, + "hash": "a6f43ec1ae7d66d5580b8b8d9d8c154e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\hero-board.png": { + "mtime": 1778710280.6721778, + "hash": "4640413678efc867d27bceed64b60ea9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\og-image.png": { + "mtime": 1778710280.6731784, + "hash": "4640413678efc867d27bceed64b60ea9" + } +} \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md b/evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md new file mode 100644 index 00000000..bbf1c312 --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,233 @@ +# Graph Report - . (2026-05-13) + +## Corpus Check +- cluster-only mode — file stats not available + +## Summary +- 833 nodes · 1758 edges · 52 communities (48 shown, 4 thin omitted) +- Extraction: 85% EXTRACTED · 15% INFERRED · 0% AMBIGUOUS · INFERRED: 266 edges (avg confidence: 0.59) +- Token cost: 0 input · 0 output + +## Graph Freshness +- Built from commit: `6085fd66` +- Run `git rev-parse HEAD` and compare to check if the graph is stale. +- Run `graphify update .` after code changes (no API cost). + +## Community Hubs (Navigation) +- [[_COMMUNITY_Community 0|Community 0]] +- [[_COMMUNITY_Community 1|Community 1]] +- [[_COMMUNITY_Community 2|Community 2]] +- [[_COMMUNITY_Community 3|Community 3]] +- [[_COMMUNITY_Community 4|Community 4]] +- [[_COMMUNITY_Community 5|Community 5]] +- [[_COMMUNITY_Community 6|Community 6]] +- [[_COMMUNITY_Community 7|Community 7]] +- [[_COMMUNITY_Community 8|Community 8]] +- [[_COMMUNITY_Community 9|Community 9]] +- [[_COMMUNITY_Community 10|Community 10]] +- [[_COMMUNITY_Community 11|Community 11]] +- [[_COMMUNITY_Community 12|Community 12]] +- [[_COMMUNITY_Community 13|Community 13]] +- [[_COMMUNITY_Community 14|Community 14]] +- [[_COMMUNITY_Community 15|Community 15]] +- [[_COMMUNITY_Community 16|Community 16]] +- [[_COMMUNITY_Community 17|Community 17]] +- [[_COMMUNITY_Community 18|Community 18]] +- [[_COMMUNITY_Community 19|Community 19]] +- [[_COMMUNITY_Community 20|Community 20]] +- [[_COMMUNITY_Community 21|Community 21]] +- [[_COMMUNITY_Community 22|Community 22]] +- [[_COMMUNITY_Community 23|Community 23]] +- [[_COMMUNITY_Community 24|Community 24]] +- [[_COMMUNITY_Community 25|Community 25]] +- [[_COMMUNITY_Community 26|Community 26]] +- [[_COMMUNITY_Community 27|Community 27]] +- [[_COMMUNITY_Community 28|Community 28]] +- [[_COMMUNITY_Community 29|Community 29]] +- [[_COMMUNITY_Community 30|Community 30]] +- [[_COMMUNITY_Community 31|Community 31]] +- [[_COMMUNITY_Community 32|Community 32]] +- [[_COMMUNITY_Community 33|Community 33]] +- [[_COMMUNITY_Community 34|Community 34]] +- [[_COMMUNITY_Community 37|Community 37]] + +## God Nodes (most connected - your core abstractions) +1. `SiegeMember` - 55 edges +2. `BoardPage()` - 53 edges +3. `Post Suggestions Modal Handoff` - 40 edges +4. `postsTab` - 29 edges +5. `cn()` - 29 edges +6. `PostsPage()` - 28 edges +7. `BuildingType` - 27 edges +8. `MembersPage()` - 27 edges +9. `MemberRole` - 25 edges +10. `Self-Host on Azure Wiki Page` - 23 edges + +## Surprising Connections (you probably didn't know these) +- `A single post assignment suggestion produced by the greedy algorithm. Attri` --rationale_for--> `PostSuggestionEntry Schema` [EXTRACTED] + backend/app/schemas/post_suggestions.py → docs/superpowers/plans/2026-05-09-post-suggestions.md +- `Post Suggestions Modal Handoff` --calls--> `cn()` [EXTRACTED] + docs/design-refs/post-suggestions/README.md → frontend/src/lib/utils.ts +- `Discord OAuth2 Authentication Spec` --semantically_similar_to--> `Discord OAuth2 Auth Flow` [INFERRED] [semantically similar] + docs/WEB_DESIGN_DOCUMENT.md → CLAUDE.md +- `AuthError` --uses--> `Member` [INFERRED] + backend/app/api/auth.py → frontend/src/api/types.ts +- `PostPriorityResponse` --uses--> `PostPriorityConfig` [INFERRED] + backend/app/api/post_priority_config.py → frontend/src/api/posts.ts + +## Communities (52 total, 4 thin omitted) + +### Community 0 - "Community 0" +Cohesion: 0.05 +Nodes (112): getBoard(), add_group(), generate_images(), Image generation endpoints., Generate PNG images for siege assignments and members list., getNotificationBatch(), notifySiegeMembers(), postToChannel() (+104 more) + +### Community 1 - "Community 1" +Cohesion: 0.06 +Nodes (67): getMember(), getMemberRoles(), getPostConditions(), updateMemberPreferences(), getSiege(), getSiegeMembers(), getSieges(), MemberRoleInfo (+59 more) + +### Community 2 - "Community 2" +Cohesion: 0.05 +Nodes (55): API router for the Suggest Post Assignments feature. Routes: POST /sieges/{, Generate a greedy post-assignment suggestion preview. Args: siege_i, Apply a caller-filtered subset of the stored preview atomically. Uses SELEC, activateSiege(), applyAttackDay(), applyAutofill(), applyPostSuggestions(), compareSiegesSpecific() (+47 more) + +### Community 3 - "Community 3" +Cohesion: 0.05 +Nodes (52): asyncpg, FastAPI, OpenTelemetry / Azure Monitor, Playwright (backend dep), PyJWT, Backend Requirements, slowapi, SQLAlchemy (+44 more) + +### Community 4 - "Community 4" +Cohesion: 0.06 +Nodes (41): PostSuggestionStaleEntry, ChangeCell(), Classification, classify(), ExpiryCountdown, OutcomeFilter, Pill(), PRIORITY_META (+33 more) + +### Community 5 - "Community 5" +Cohesion: 0.09 +Nodes (45): Application Insights, scripts/bootstrap-images.ps1, Caddy Reverse Proxy, .github/workflows/deploy.yml, Discord OAuth2, GitHub Actions CI/CD, .github/workflows/infra-deploy.yml, Azure Managed Identity (+37 more) + +### Community 6 - "Community 6" +Cohesion: 0.06 +Nodes (36): health(), createMember(), get_member(), getMemberPreferences(), updateMember(), Send DMs for each member and record results in a fresh DB session., _send_dms(), Find member by username in the guild, open DM, send message. (+28 more) + +### Community 7 - "Community 7" +Cohesion: 0.08 +Nodes (27): lifespan(), main(), FastAPI application factory and middleware wiring., Run the FastAPI/uvicorn HTTP sidecar on port 8001., Connect and run the Discord client., Start both the Discord client and HTTP server concurrently., Application lifespan — runs startup guards before serving requests., run_discord_client() (+19 more) + +### Community 8 - "Community 8" +Cohesion: 0.1 +Nodes (17): downgrade(), initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16, upgrade(), add autofill and attack day preview columns to siege Revision ID: 0002 Revises:, make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1, Add post_priority_config table, Add description to post_priority_config, Replace power with power_level, drop sort_value (+9 more) + +### Community 9 - "Community 9" +Cohesion: 0.1 +Nodes (24): AuthError, callback(), _check_guild_membership(), _error_redirect(), _exchange_code_for_token(), _get_discord_user(), login(), logout() (+16 more) + +### Community 10 - "Community 10" +Cohesion: 0.12 +Nodes (17): apiAddBuilding(), apiCreateMember(), apiCreateSiege(), autofillBtn, buildingsTab, chevron, firstPositionSpan, positionCell (+9 more) + +### Community 11 - "Community 11" +Cohesion: 0.17 +Nodes (14): add_building(), delete_group(), deleteBuilding(), getBuildings(), updateBuilding(), get_team_count(), Return the theoretical total team slots for a building type at a given level., _create_groups_and_positions() (+6 more) + +### Community 12 - "Community 12" +Cohesion: 0.16 +Nodes (15): VersionInfo, _fetch_bot_version(), getVersion(), Return a version string for the backend. When both BUILD_NUMBER and GIT_SHA, Call the bot sidecar's /version endpoint. Returns None if unreachable., Return version information for all components., _read_backend_version(), useVersion() (+7 more) + +### Community 13 - "Community 13" +Cohesion: 0.13 +Nodes (9): BUILDING_LABELS, BuildingColorClass, ActiveTab, BoardPage(), BUILDING_TYPE_ORDER, ROLE_CHIP_COLORS, ROLE_COLORS, ROLE_FILTER_OPTIONS (+1 more) + +### Community 14 - "Community 14" +Cohesion: 0.16 +Nodes (11): getSiegeMemberPreferences(), DuplicateConditionMap, findPostPosition(), MemberWithMatches, postsTab, priorityBadgeColor(), priorityLabel(), POWER_LABELS (+3 more) + +### Community 15 - "Community 15" +Cohesion: 0.19 +Nodes (13): build_member_notification_message(), _build_section(), _position_label(), _position_sort_key(), _positions_from_keys(), _positions_to_key_set(), Build rich per-member Discord DM messages for siege assignment notifications., Convert a list of PositionInfo objects to a set of comparable tuples. (+5 more) + +### Community 16 - "Community 16" +Cohesion: 0.26 +Nodes (12): list_posts(), Build a PostResponse-compatible dict, denormalizing building_number from the rel, _serialize_post(), setPostConditions(), updatePost(), Update a single position's assignment. Raises: 404 if position not, _validate_member_active(), _get_post_for_siege_or_404() (+4 more) + +### Community 17 - "Community 17" +Cohesion: 0.23 +Nodes (11): _build_assignments_html(), _build_reserves_html(), generate_assignments_image(), generate_reserves_image(), Image generation service — renders HTML/CSS to PNG via Playwright., Build the reserves/members list HTML string. Args: members: Siege m, Render an HTML string to PNG bytes using headless Chromium., Render the assignments board as a PNG. Returns raw PNG bytes. (+3 more) + +### Community 18 - "Community 18" +Cohesion: 0.25 +Nodes (10): get_changelog_status(), markChangelogSeen(), Changelog status and mark-seen endpoints. These endpoints let the frontend trac, Raise HTTP 400 if the caller is a service principal. Args: current_, Return the authenticated user's last-seen changelog timestamp. Args:, Set the authenticated user's last-seen changelog timestamp to now. Idempote, _require_member_session(), ChangelogStatusResponse (+2 more) + +### Community 19 - "Community 19" +Cohesion: 0.22 +Nodes (5): Carousel(), CarouselProps, CarouselSlide, COLORS, SLIDES + +### Community 20 - "Community 20" +Cohesion: 0.24 +Nodes (7): AppConfig, fetchConfig(), Layout(), navLinkClass(), RequireAuth(), useAuth(), LandingOrSieges() + +### Community 21 - "Community 21" +Cohesion: 0.22 +Nodes (7): compareSieges(), ComparisonResult, MemberDiff, PositionKey, _load_assignments(), _load_member_names(), Return {member_id: [PositionKey, ...]} for non-reserve, non-disabled assigned po + +### Community 22 - "Community 22" +Cohesion: 0.24 +Nodes (9): _get_client_ip(), _parse_retry_after_seconds(), rate_limit_exceeded_handler(), _rate_limit_key(), Rate-limiting utilities shared across the application. This module owns the sin, Composite key function that honours the AUTH_DISABLED bypass. When ``AUTH_D, Parse a slowapi rate-limit detail string into a window size in seconds. slo, Return a JSON 429 response with a ``Retry-After`` header. Replaces slowapi' (+1 more) + +### Community 23 - "Community 23" +Cohesion: 0.22 +Nodes (8): DropdownMenuCheckboxItem, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut(), DropdownMenuSubContent, DropdownMenuSubTrigger + +### Community 24 - "Community 24" +Cohesion: 0.22 +Nodes (8): Endpoints for Discord guild member ↔ clan member sync., Return proposed Discord ↔ clan member matches without writing to the DB., Apply accepted sync matches, updating discord_username and discord_id., applyDiscordSync(), previewDiscordSync(), Service logic for Discord guild member → clan member matching., Return proposed matches between Discord guild members and clan members. Mat, Apply accepted sync matches, writing discord_username and discord_id. Unkno + +### Community 25 - "Community 25" +Cohesion: 0.33 +Nodes (5): AuthContext, AuthContextValue, AuthProvider(), AuthUser, queryClient + +### Community 26 - "Community 26" +Cohesion: 0.4 +Nodes (3): ChangelogStatus, fetchChangelogStatus(), DropdownMenuContent + +### Community 27 - "Community 27" +Cohesion: 0.33 +Nodes (4): apiClient, ERROR_MESSAGES, LoginPage(), MEMBERSHIP_ERRORS + +### Community 28 - "Community 28" +Cohesion: 0.33 +Nodes (5): get_config(), Public config endpoint — exposes non-sensitive runtime flags to the frontend., Return public runtime configuration flags. This endpoint is intentionally u, Settings, BaseSettings + +### Community 31 - "Community 31" +Cohesion: 0.5 +Nodes (3): configure_telemetry(), Application Insights / OpenTelemetry initialisation for the backend. Call ``con, Initialise Azure Monitor OpenTelemetry and instrument the app. The ``azure- + +### Community 33 - "Community 33" +Cohesion: 0.5 +Nodes (3): getPostPriorities(), getPosts(), updatePostPriority() + +### Community 34 - "Community 34" +Cohesion: 0.5 +Nodes (4): bulk_update_positions(), Apply multiple position updates in a single transaction. Each update dict m, Validate the logical consistency of position flag combinations., _validate_position_state() + +## Ambiguous Edges - Review These +- `bootstrap-images.ps1` → `scripts/bootstrap-images.ps1` [AMBIGUOUS] + wiki/Self-Host-on-Azure.md · relation: semantically_similar_to + +## Knowledge Gaps +- **259 isolated node(s):** `initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, `add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, `make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1`, `Add post_priority_config table`, `Add description to post_priority_config` (+254 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **4 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **What is the exact relationship between `bootstrap-images.ps1` and `scripts/bootstrap-images.ps1`?** + _Edge tagged AMBIGUOUS (relation: semantically_similar_to) - confidence is low._ +- **Why does `Post Suggestions Modal Handoff` connect `Community 4` to `Community 0`, `Community 1`, `Community 2`, `Community 3`, `Community 14`?** + _High betweenness centrality (0.257) - this node is a cross-community bridge._ +- **Why does `Web Design Document` connect `Community 4` to `Community 3`?** + _High betweenness centrality (0.131) - this node is a cross-community bridge._ +- **Are the 13 inferred relationships involving `SiegeMember` (e.g. with `Base` and `Member`) actually correct?** + _`SiegeMember` has 13 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 3 inferred relationships involving `Post Suggestions Modal Handoff` (e.g. with `Suggest Post Assignments Feature` and `Post Data Model`) actually correct?** + _`Post Suggestions Modal Handoff` has 3 INFERRED edges - model-reasoned connections that need verification._ +- **What connects `initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, `add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, `make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1` to the rest of the system?** + _259 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `Community 0` be split into smaller, more focused modules?** + _Cohesion score 0.05 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out/graph.html b/evaluations/rsl-siege-manager/graphify-out/graph.html new file mode 100644 index 00000000..5c00b42e --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out/graph.html @@ -0,0 +1,305 @@ + + + + +graphify - graphify-out\graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out/graph.json b/evaluations/rsl-siege-manager/graphify-out/graph.json new file mode 100644 index 00000000..68208834 --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out/graph.json @@ -0,0 +1,26177 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": "env.py", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L1", + "community": 29, + "norm_label": "env.py", + "id": "backend_alembic_env_py" + }, + { + "label": "run_migrations_offline()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L24", + "community": 29, + "norm_label": "run_migrations_offline()", + "id": "alembic_env_run_migrations_offline" + }, + { + "label": "do_run_migrations()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L36", + "community": 29, + "norm_label": "do_run_migrations()", + "id": "alembic_env_do_run_migrations" + }, + { + "label": "run_async_migrations()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L42", + "community": 29, + "norm_label": "run_async_migrations()", + "id": "alembic_env_run_async_migrations" + }, + { + "label": "run_migrations_online()", + "file_type": "code", + "source_file": "backend/alembic/env.py", + "source_location": "L53", + "community": 29, + "norm_label": "run_migrations_online()", + "id": "alembic_env_run_migrations_online" + }, + { + "label": "0001_initial_schema.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L1", + "community": 8, + "norm_label": "0001_initial_schema.py", + "id": "backend_alembic_versions_0001_initial_schema_py" + }, + { + "label": "upgrade()", + "file_type": "code", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L19", + "community": 8, + "norm_label": "upgrade()", + "id": "versions_0001_initial_schema_upgrade" + }, + { + "label": "downgrade()", + "file_type": "code", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L273", + "community": 8, + "norm_label": "downgrade()", + "id": "versions_0001_initial_schema_downgrade" + }, + { + "label": "initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L1", + "community": 8, + "norm_label": "initial schema revision id: 0001 revises: create date: 2026-03-16", + "id": "versions_0001_initial_schema_rationale_1" + }, + { + "label": "0002_add_preview_columns.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L1", + "community": 8, + "norm_label": "0002_add_preview_columns.py", + "id": "backend_alembic_versions_0002_add_preview_columns_py" + }, + { + "label": "add autofill and attack day preview columns to siege Revision ID: 0002 Revises:", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L1", + "community": 8, + "norm_label": "add autofill and attack day preview columns to siege revision id: 0002 revises:", + "id": "versions_0002_add_preview_columns_rationale_1" + }, + { + "label": "0003_make_siege_date_nullable.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L1", + "community": 8, + "norm_label": "0003_make_siege_date_nullable.py", + "id": "backend_alembic_versions_0003_make_siege_date_nullable_py" + }, + { + "label": "make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L1", + "community": 8, + "norm_label": "make siege date nullable revision id: 0003 revises: 0002 create date: 2026-03-1", + "id": "versions_0003_make_siege_date_nullable_rationale_1" + }, + { + "label": "0004_add_post_priority_config.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L1", + "community": 8, + "norm_label": "0004_add_post_priority_config.py", + "id": "backend_alembic_versions_0004_add_post_priority_config_py" + }, + { + "label": "Add post_priority_config table", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L1", + "community": 8, + "norm_label": "add post_priority_config table", + "id": "versions_0004_add_post_priority_config_rationale_1" + }, + { + "label": "0005_add_description_to_post_priority_config.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L1", + "community": 8, + "norm_label": "0005_add_description_to_post_priority_config.py", + "id": "backend_alembic_versions_0005_add_description_to_post_priority_config_py" + }, + { + "label": "Add description to post_priority_config", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L1", + "community": 8, + "norm_label": "add description to post_priority_config", + "id": "versions_0005_add_description_to_post_priority_config_rationale_1" + }, + { + "label": "0006_power_level_and_drop_sort_value.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L1", + "community": 8, + "norm_label": "0006_power_level_and_drop_sort_value.py", + "id": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py" + }, + { + "label": "Replace power with power_level, drop sort_value", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L1", + "community": 8, + "norm_label": "replace power with power_level, drop sort_value", + "id": "versions_0006_power_level_and_drop_sort_value_rationale_1" + }, + { + "label": "0007_fix_group_number_max.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L1", + "community": 8, + "norm_label": "0007_fix_group_number_max.py", + "id": "backend_alembic_versions_0007_fix_group_number_max_py" + }, + { + "label": "Raise group_number_range constraint max from 9 to 10 Stronghold at level 6 requ", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L1", + "community": 8, + "norm_label": "raise group_number_range constraint max from 9 to 10 stronghold at level 6 requ", + "id": "versions_0007_fix_group_number_max_rationale_1" + }, + { + "label": "0008_add_matched_condition_id_to_position.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L1", + "community": 8, + "norm_label": "0008_add_matched_condition_id_to_position.py", + "id": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py" + }, + { + "label": "Add matched_condition_id to position Tracks which PostCondition a member was ma", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L1", + "community": 8, + "norm_label": "add matched_condition_id to position tracks which postcondition a member was ma", + "id": "versions_0008_add_matched_condition_id_to_position_rationale_1" + }, + { + "label": "0009_add_discord_id_to_member.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L1", + "community": 8, + "norm_label": "0009_add_discord_id_to_member.py", + "id": "backend_alembic_versions_0009_add_discord_id_to_member_py" + }, + { + "label": "Add discord_id to member Stores the Discord snowflake ID for each clan member,", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L1", + "community": 8, + "norm_label": "add discord_id to member stores the discord snowflake id for each clan member,", + "id": "versions_0009_add_discord_id_to_member_rationale_1" + }, + { + "label": "0010_add_last_seen_changelog_at_to_member.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L1", + "community": 8, + "norm_label": "0010_add_last_seen_changelog_at_to_member.py", + "id": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py" + }, + { + "label": "Add last_seen_changelog_at to member Tracks the timestamp of the last changelog", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L1", + "community": 8, + "norm_label": "add last_seen_changelog_at to member tracks the timestamp of the last changelog", + "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_1" + }, + { + "label": "Add nullable last_seen_changelog_at column to the member table.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L25", + "community": 8, + "norm_label": "add nullable last_seen_changelog_at column to the member table.", + "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_25" + }, + { + "label": "Remove last_seen_changelog_at column from the member table.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L33", + "community": 8, + "norm_label": "remove last_seen_changelog_at column from the member table.", + "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_33" + }, + { + "label": "0011_add_post_suggest_preview.py", + "file_type": "code", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L1", + "community": 8, + "norm_label": "0011_add_post_suggest_preview.py", + "id": "backend_alembic_versions_0011_add_post_suggest_preview_py" + }, + { + "label": "Add post_suggest_preview columns to siege table. Mirrors the autofill_preview /", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L1", + "community": 8, + "norm_label": "add post_suggest_preview columns to siege table. mirrors the autofill_preview /", + "id": "versions_0011_add_post_suggest_preview_rationale_1" + }, + { + "label": "Add post_suggest_preview and post_suggest_preview_expires_at columns.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L23", + "community": 8, + "norm_label": "add post_suggest_preview and post_suggest_preview_expires_at columns.", + "id": "versions_0011_add_post_suggest_preview_rationale_23" + }, + { + "label": "Drop post_suggest_preview and post_suggest_preview_expires_at columns.", + "file_type": "rationale", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L34", + "community": 8, + "norm_label": "drop post_suggest_preview and post_suggest_preview_expires_at columns.", + "id": "versions_0011_add_post_suggest_preview_rationale_34" + }, + { + "label": "Settings", + "file_type": "code", + "source_file": "backend/app/config.py", + "source_location": "L4", + "community": 28, + "norm_label": "settings", + "id": "app_config_settings" + }, + { + "label": "BaseSettings", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 28, + "norm_label": "basesettings", + "id": "basesettings" + }, + { + "label": "lifespan()", + "file_type": "code", + "source_file": "backend/app/main.py", + "source_location": "L47", + "community": 7, + "norm_label": "lifespan()", + "id": "app_main_lifespan" + }, + { + "label": "FastAPI application factory and middleware wiring.", + "file_type": "rationale", + "source_file": "backend/app/main.py", + "source_location": "L1", + "community": 7, + "norm_label": "fastapi application factory and middleware wiring.", + "id": "app_main_rationale_1" + }, + { + "label": "Application lifespan \u2014 runs startup guards before serving requests.", + "file_type": "rationale", + "source_file": "backend/app/main.py", + "source_location": "L48", + "community": 7, + "norm_label": "application lifespan \u2014 runs startup guards before serving requests.", + "id": "app_main_rationale_48" + }, + { + "label": "middleware.py", + "file_type": "code", + "source_file": "backend/app/middleware.py", + "source_location": "L1", + "community": 30, + "norm_label": "middleware.py", + "id": "backend_app_middleware_py" + }, + { + "label": "RequestLoggingMiddleware", + "file_type": "code", + "source_file": "backend/app/middleware.py", + "source_location": "L12", + "community": 30, + "norm_label": "requestloggingmiddleware", + "id": "app_middleware_requestloggingmiddleware" + }, + { + "label": "BaseHTTPMiddleware", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 30, + "norm_label": "basehttpmiddleware", + "id": "basehttpmiddleware" + }, + { + "label": ".dispatch()", + "file_type": "code", + "source_file": "backend/app/middleware.py", + "source_location": "L13", + "community": 30, + "norm_label": ".dispatch()", + "id": "app_middleware_requestloggingmiddleware_dispatch" + }, + { + "label": "rate_limit.py", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L1", + "community": 22, + "norm_label": "rate_limit.py", + "id": "backend_app_rate_limit_py" + }, + { + "label": "_get_client_ip()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L52", + "community": 22, + "norm_label": "_get_client_ip()", + "id": "app_rate_limit_get_client_ip" + }, + { + "label": "_rate_limit_key()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L154", + "community": 22, + "norm_label": "_rate_limit_key()", + "id": "app_rate_limit_rate_limit_key" + }, + { + "label": "_parse_retry_after_seconds()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L179", + "community": 22, + "norm_label": "_parse_retry_after_seconds()", + "id": "app_rate_limit_parse_retry_after_seconds" + }, + { + "label": "rate_limit_exceeded_handler()", + "file_type": "code", + "source_file": "backend/app/rate_limit.py", + "source_location": "L217", + "community": 22, + "norm_label": "rate_limit_exceeded_handler()", + "id": "app_rate_limit_rate_limit_exceeded_handler" + }, + { + "label": "Rate-limiting utilities shared across the application. This module owns the sin", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L1", + "community": 22, + "norm_label": "rate-limiting utilities shared across the application. this module owns the sin", + "id": "app_rate_limit_rationale_1" + }, + { + "label": "Extract the real client IP from X-Forwarded-For for rate bucketing. Reads t", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L53", + "community": 22, + "norm_label": "extract the real client ip from x-forwarded-for for rate bucketing. reads t", + "id": "app_rate_limit_rationale_53" + }, + { + "label": "Composite key function that honours the AUTH_DISABLED bypass. When ``AUTH_D", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L155", + "community": 22, + "norm_label": "composite key function that honours the auth_disabled bypass. when ``auth_d", + "id": "app_rate_limit_rationale_155" + }, + { + "label": "Parse a slowapi rate-limit detail string into a window size in seconds. slo", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L180", + "community": 22, + "norm_label": "parse a slowapi rate-limit detail string into a window size in seconds. slo", + "id": "app_rate_limit_rationale_180" + }, + { + "label": "Return a JSON 429 response with a ``Retry-After`` header. Replaces slowapi'", + "file_type": "rationale", + "source_file": "backend/app/rate_limit.py", + "source_location": "L218", + "community": 22, + "norm_label": "return a json 429 response with a ``retry-after`` header. replaces slowapi'", + "id": "app_rate_limit_rationale_218" + }, + { + "label": "configure_telemetry()", + "file_type": "code", + "source_file": "backend/app/telemetry.py", + "source_location": "L28", + "community": 31, + "norm_label": "configure_telemetry()", + "id": "app_telemetry_configure_telemetry" + }, + { + "label": "Application Insights / OpenTelemetry initialisation for the backend. Call ``con", + "file_type": "rationale", + "source_file": "backend/app/telemetry.py", + "source_location": "L1", + "community": 31, + "norm_label": "application insights / opentelemetry initialisation for the backend. call ``con", + "id": "app_telemetry_rationale_1" + }, + { + "label": "Initialise Azure Monitor OpenTelemetry and instrument the app. The ``azure-", + "file_type": "rationale", + "source_file": "backend/app/telemetry.py", + "source_location": "L32", + "community": 31, + "norm_label": "initialise azure monitor opentelemetry and instrument the app. the ``azure-", + "id": "app_telemetry_rationale_32" + }, + { + "label": "attack_day.py", + "file_type": "code", + "source_file": "backend/app/api/attack_day.py", + "source_location": "L1", + "community": 2, + "norm_label": "attack_day.py", + "id": "backend_app_api_attack_day_py" + }, + { + "label": "auth.py", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L1", + "community": 9, + "norm_label": "auth.py", + "id": "backend_app_api_auth_py" + }, + { + "label": "AuthError", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L27", + "community": 9, + "norm_label": "autherror", + "id": "api_auth_autherror" + }, + { + "label": "_exchange_code_for_token()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L41", + "community": 9, + "norm_label": "_exchange_code_for_token()", + "id": "api_auth_exchange_code_for_token" + }, + { + "label": "_get_discord_user()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L59", + "community": 9, + "norm_label": "_get_discord_user()", + "id": "api_auth_get_discord_user" + }, + { + "label": "_check_guild_membership()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L70", + "community": 9, + "norm_label": "_check_guild_membership()", + "id": "api_auth_check_guild_membership" + }, + { + "label": "login()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L77", + "community": 9, + "norm_label": "login()", + "id": "api_auth_login" + }, + { + "label": "callback()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L112", + "community": 9, + "norm_label": "callback()", + "id": "api_auth_callback" + }, + { + "label": "logout()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L203", + "community": 9, + "norm_label": "logout()", + "id": "api_auth_logout" + }, + { + "label": "me()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L210", + "community": 9, + "norm_label": "me()", + "id": "api_auth_me" + }, + { + "label": "_error_redirect()", + "file_type": "code", + "source_file": "backend/app/api/auth.py", + "source_location": "L222", + "community": 9, + "norm_label": "_error_redirect()", + "id": "api_auth_error_redirect" + }, + { + "label": "Discord OAuth2 authentication endpoints.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L1", + "community": 9, + "norm_label": "discord oauth2 authentication endpoints.", + "id": "api_auth_rationale_1" + }, + { + "label": "Error codes returned in login redirect query parameters.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L28", + "community": 9, + "norm_label": "error codes returned in login redirect query parameters.", + "id": "api_auth_rationale_28" + }, + { + "label": "Exchange an authorization code for a Discord access token.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L42", + "community": 9, + "norm_label": "exchange an authorization code for a discord access token.", + "id": "api_auth_rationale_42" + }, + { + "label": "Fetch the authenticated Discord user's profile (identify scope).", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L60", + "community": 9, + "norm_label": "fetch the authenticated discord user's profile (identify scope).", + "id": "api_auth_rationale_60" + }, + { + "label": "Check guild membership via the bot sidecar. Raises on connection failure.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L71", + "community": 9, + "norm_label": "check guild membership via the bot sidecar. raises on connection failure.", + "id": "api_auth_rationale_71" + }, + { + "label": "Initiate Discord OAuth2 flow. Generates a CSRF state token, stores it in a", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L78", + "community": 9, + "norm_label": "initiate discord oauth2 flow. generates a csrf state token, stores it in a", + "id": "api_auth_rationale_78" + }, + { + "label": "Handle Discord OAuth2 callback. Validates CSRF state, exchanges the authori", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L118", + "community": 9, + "norm_label": "handle discord oauth2 callback. validates csrf state, exchanges the authori", + "id": "api_auth_rationale_118" + }, + { + "label": "Clear the session cookie, ending the user's session.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L204", + "community": 9, + "norm_label": "clear the session cookie, ending the user's session.", + "id": "api_auth_rationale_204" + }, + { + "label": "Return identity information for the currently authenticated caller.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L213", + "community": 9, + "norm_label": "return identity information for the currently authenticated caller.", + "id": "api_auth_rationale_213" + }, + { + "label": "Return a redirect to the login page with an error query parameter.", + "file_type": "rationale", + "source_file": "backend/app/api/auth.py", + "source_location": "L223", + "community": 9, + "norm_label": "return a redirect to the login page with an error query parameter.", + "id": "api_auth_rationale_223" + }, + { + "label": "autofill.py", + "file_type": "code", + "source_file": "backend/app/api/autofill.py", + "source_location": "L1", + "community": 2, + "norm_label": "autofill.py", + "id": "backend_app_api_autofill_py" + }, + { + "label": "board.py", + "file_type": "code", + "source_file": "backend/app/api/board.py", + "source_location": "L1", + "community": 0, + "norm_label": "board.py", + "id": "backend_app_api_board_py" + }, + { + "label": "bulk_update_positions()", + "file_type": "code", + "source_file": "backend/app/api/board.py", + "source_location": "L38", + "community": 34, + "norm_label": "bulk_update_positions()", + "id": "api_board_bulk_update_positions" + }, + { + "label": "buildings.py", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L1", + "community": 11, + "norm_label": "buildings.py", + "id": "backend_app_api_buildings_py" + }, + { + "label": "list_buildings()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L18", + "community": 11, + "norm_label": "list_buildings()", + "id": "api_buildings_list_buildings" + }, + { + "label": "add_building()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L26", + "community": 11, + "norm_label": "add_building()", + "id": "api_buildings_add_building" + }, + { + "label": "add_group()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L59", + "community": 0, + "norm_label": "add_group()", + "id": "api_buildings_add_group" + }, + { + "label": "delete_group()", + "file_type": "code", + "source_file": "backend/app/api/buildings.py", + "source_location": "L69", + "community": 11, + "norm_label": "delete_group()", + "id": "api_buildings_delete_group" + }, + { + "label": "changelog.py", + "file_type": "code", + "source_file": "backend/app/api/changelog.py", + "source_location": "L1", + "community": 18, + "norm_label": "changelog.py", + "id": "backend_app_api_changelog_py" + }, + { + "label": "_require_member_session()", + "file_type": "code", + "source_file": "backend/app/api/changelog.py", + "source_location": "L24", + "community": 18, + "norm_label": "_require_member_session()", + "id": "api_changelog_require_member_session" + }, + { + "label": "get_changelog_status()", + "file_type": "code", + "source_file": "backend/app/api/changelog.py", + "source_location": "L43", + "community": 18, + "norm_label": "get_changelog_status()", + "id": "api_changelog_get_changelog_status" + }, + { + "label": "Changelog status and mark-seen endpoints. These endpoints let the frontend trac", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L1", + "community": 18, + "norm_label": "changelog status and mark-seen endpoints. these endpoints let the frontend trac", + "id": "api_changelog_rationale_1" + }, + { + "label": "Raise HTTP 400 if the caller is a service principal. Args: current_", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L25", + "community": 18, + "norm_label": "raise http 400 if the caller is a service principal. args: current_", + "id": "api_changelog_rationale_25" + }, + { + "label": "Return the authenticated user's last-seen changelog timestamp. Args:", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L47", + "community": 18, + "norm_label": "return the authenticated user's last-seen changelog timestamp. args:", + "id": "api_changelog_rationale_47" + }, + { + "label": "Set the authenticated user's last-seen changelog timestamp to now. Idempote", + "file_type": "rationale", + "source_file": "backend/app/api/changelog.py", + "source_location": "L73", + "community": 18, + "norm_label": "set the authenticated user's last-seen changelog timestamp to now. idempote", + "id": "api_changelog_rationale_73" + }, + { + "label": "comparison.py", + "file_type": "code", + "source_file": "backend/app/api/comparison.py", + "source_location": "L1", + "community": 21, + "norm_label": "comparison.py", + "id": "backend_app_api_comparison_py" + }, + { + "label": "compare_with_most_recent()", + "file_type": "code", + "source_file": "backend/app/api/comparison.py", + "source_location": "L14", + "community": 21, + "norm_label": "compare_with_most_recent()", + "id": "api_comparison_compare_with_most_recent" + }, + { + "label": "compare_with_specific()", + "file_type": "code", + "source_file": "backend/app/api/comparison.py", + "source_location": "L31", + "community": 21, + "norm_label": "compare_with_specific()", + "id": "api_comparison_compare_with_specific" + }, + { + "label": "get_config()", + "file_type": "code", + "source_file": "backend/app/api/config.py", + "source_location": "L11", + "community": 28, + "norm_label": "get_config()", + "id": "api_config_get_config" + }, + { + "label": "Public config endpoint \u2014 exposes non-sensitive runtime flags to the frontend.", + "file_type": "rationale", + "source_file": "backend/app/api/config.py", + "source_location": "L1", + "community": 28, + "norm_label": "public config endpoint \u2014 exposes non-sensitive runtime flags to the frontend.", + "id": "api_config_rationale_1" + }, + { + "label": "Return public runtime configuration flags. This endpoint is intentionally u", + "file_type": "rationale", + "source_file": "backend/app/api/config.py", + "source_location": "L12", + "community": 28, + "norm_label": "return public runtime configuration flags. this endpoint is intentionally u", + "id": "api_config_rationale_12" + }, + { + "label": "discord_sync.py", + "file_type": "code", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L1", + "community": 24, + "norm_label": "discord_sync.py", + "id": "backend_app_api_discord_sync_py" + }, + { + "label": "Endpoints for Discord guild member \u2194 clan member sync.", + "file_type": "rationale", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L1", + "community": 24, + "norm_label": "endpoints for discord guild member \u2194 clan member sync.", + "id": "api_discord_sync_rationale_1" + }, + { + "label": "Return proposed Discord \u2194 clan member matches without writing to the DB.", + "file_type": "rationale", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L17", + "community": 24, + "norm_label": "return proposed discord \u2194 clan member matches without writing to the db.", + "id": "api_discord_sync_rationale_17" + }, + { + "label": "Apply accepted sync matches, updating discord_username and discord_id.", + "file_type": "rationale", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L26", + "community": 24, + "norm_label": "apply accepted sync matches, updating discord_username and discord_id.", + "id": "api_discord_sync_rationale_26" + }, + { + "label": "health.py", + "file_type": "code", + "source_file": "backend/app/api/health.py", + "source_location": "L1", + "community": 6, + "norm_label": "health.py", + "id": "backend_app_api_health_py" + }, + { + "label": "health()", + "file_type": "code", + "source_file": "backend/app/api/health.py", + "source_location": "L11", + "community": 6, + "norm_label": "health()", + "id": "api_health_health" + }, + { + "label": "images.py", + "file_type": "code", + "source_file": "backend/app/api/images.py", + "source_location": "L1", + "community": 0, + "norm_label": "images.py", + "id": "backend_app_api_images_py" + }, + { + "label": "BaseModel", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 0, + "norm_label": "basemodel", + "id": "basemodel" + }, + { + "label": "generate_images()", + "file_type": "code", + "source_file": "backend/app/api/images.py", + "source_location": "L31", + "community": 0, + "norm_label": "generate_images()", + "id": "api_images_generate_images" + }, + { + "label": "Image generation endpoints.", + "file_type": "rationale", + "source_file": "backend/app/api/images.py", + "source_location": "L1", + "community": 0, + "norm_label": "image generation endpoints.", + "id": "api_images_rationale_1" + }, + { + "label": "Generate PNG images for siege assignments and members list.", + "file_type": "rationale", + "source_file": "backend/app/api/images.py", + "source_location": "L35", + "community": 0, + "norm_label": "generate png images for siege assignments and members list.", + "id": "api_images_rationale_35" + }, + { + "label": "lifecycle.py", + "file_type": "code", + "source_file": "backend/app/api/lifecycle.py", + "source_location": "L1", + "community": 2, + "norm_label": "lifecycle.py", + "id": "backend_app_api_lifecycle_py" + }, + { + "label": "members.py", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L1", + "community": 6, + "norm_label": "members.py", + "id": "backend_app_api_members_py" + }, + { + "label": "list_members()", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L18", + "community": 6, + "norm_label": "list_members()", + "id": "api_members_list_members" + }, + { + "label": "get_member()", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L34", + "community": 6, + "norm_label": "get_member()", + "id": "api_members_get_member" + }, + { + "label": "delete_member()", + "file_type": "code", + "source_file": "backend/app/api/members.py", + "source_location": "L51", + "community": 6, + "norm_label": "delete_member()", + "id": "api_members_delete_member" + }, + { + "label": "notifications.py", + "file_type": "code", + "source_file": "backend/app/api/notifications.py", + "source_location": "L1", + "community": 0, + "norm_label": "notifications.py", + "id": "backend_app_api_notifications_py" + }, + { + "label": "_send_dms()", + "file_type": "code", + "source_file": "backend/app/api/notifications.py", + "source_location": "L64", + "community": 6, + "norm_label": "_send_dms()", + "id": "api_notifications_send_dms" + }, + { + "label": "Notification endpoints \u2014 send DMs and post images to Discord.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L1", + "community": 0, + "norm_label": "notification endpoints \u2014 send dms and post images to discord.", + "id": "api_notifications_rationale_1" + }, + { + "label": "Send DMs for each member and record results in a fresh DB session.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L65", + "community": 6, + "norm_label": "send dms for each member and record results in a fresh db session.", + "id": "api_notifications_rationale_65" + }, + { + "label": "Send DM notifications to all siege members asynchronously.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L142", + "community": 0, + "norm_label": "send dm notifications to all siege members asynchronously.", + "id": "api_notifications_rationale_142" + }, + { + "label": "Get the status and results of a notification batch.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L310", + "community": 0, + "norm_label": "get the status and results of a notification batch.", + "id": "api_notifications_rationale_310" + }, + { + "label": "Generate images and post them + a summary message to Discord channels.", + "file_type": "rationale", + "source_file": "backend/app/api/notifications.py", + "source_location": "L371", + "community": 0, + "norm_label": "generate images and post them + a summary message to discord channels.", + "id": "api_notifications_rationale_371" + }, + { + "label": "posts.py", + "file_type": "code", + "source_file": "backend/app/api/posts.py", + "source_location": "L1", + "community": 16, + "norm_label": "posts.py", + "id": "backend_app_api_posts_py" + }, + { + "label": "_serialize_post()", + "file_type": "code", + "source_file": "backend/app/api/posts.py", + "source_location": "L12", + "community": 16, + "norm_label": "_serialize_post()", + "id": "api_posts_serialize_post" + }, + { + "label": "list_posts()", + "file_type": "code", + "source_file": "backend/app/api/posts.py", + "source_location": "L29", + "community": 16, + "norm_label": "list_posts()", + "id": "api_posts_list_posts" + }, + { + "label": "Build a PostResponse-compatible dict, denormalizing building_number from the rel", + "file_type": "rationale", + "source_file": "backend/app/api/posts.py", + "source_location": "L13", + "community": 16, + "norm_label": "build a postresponse-compatible dict, denormalizing building_number from the rel", + "id": "api_posts_rationale_13" + }, + { + "label": "PostPriorityResponse", + "file_type": "code", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L12", + "community": 0, + "norm_label": "postpriorityresponse", + "id": "api_post_priority_config_postpriorityresponse" + }, + { + "label": "PostPriorityUpdate", + "file_type": "code", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L20", + "community": 0, + "norm_label": "postpriorityupdate", + "id": "api_post_priority_config_postpriorityupdate" + }, + { + "label": "list_post_priorities()", + "file_type": "code", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L26", + "community": 0, + "norm_label": "list_post_priorities()", + "id": "api_post_priority_config_list_post_priorities" + }, + { + "label": "post_suggestions.py", + "file_type": "code", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L1", + "community": 2, + "norm_label": "post_suggestions.py", + "id": "backend_app_api_post_suggestions_py" + }, + { + "label": "API router for the Suggest Post Assignments feature. Routes: POST /sieges/{", + "file_type": "rationale", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L1", + "community": 2, + "norm_label": "api router for the suggest post assignments feature. routes: post /sieges/{", + "id": "api_post_suggestions_rationale_1" + }, + { + "label": "Generate a greedy post-assignment suggestion preview. Args: siege_i", + "file_type": "rationale", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L37", + "community": 2, + "norm_label": "generate a greedy post-assignment suggestion preview. args: siege_i", + "id": "api_post_suggestions_rationale_37" + }, + { + "label": "Apply a caller-filtered subset of the stored preview atomically. Uses SELEC", + "file_type": "rationale", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L62", + "community": 2, + "norm_label": "apply a caller-filtered subset of the stored preview atomically. uses selec", + "id": "api_post_suggestions_rationale_62" + }, + { + "label": "reference.py", + "file_type": "code", + "source_file": "backend/app/api/reference.py", + "source_location": "L1", + "community": 1, + "norm_label": "reference.py", + "id": "backend_app_api_reference_py" + }, + { + "label": "sieges.py", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L1", + "community": 2, + "norm_label": "sieges.py", + "id": "backend_app_api_sieges_py" + }, + { + "label": "list_sieges()", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L13", + "community": 2, + "norm_label": "list_sieges()", + "id": "api_sieges_list_sieges" + }, + { + "label": "get_siege()", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L40", + "community": 2, + "norm_label": "get_siege()", + "id": "api_sieges_get_siege" + }, + { + "label": "delete_siege()", + "file_type": "code", + "source_file": "backend/app/api/sieges.py", + "source_location": "L65", + "community": 2, + "norm_label": "delete_siege()", + "id": "api_sieges_delete_siege" + }, + { + "label": "SiegeMemberCreate", + "file_type": "code", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L12", + "community": 0, + "norm_label": "siegemembercreate", + "id": "api_siege_members_siegemembercreate" + }, + { + "label": "list_siege_members()", + "file_type": "code", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L28", + "community": 1, + "norm_label": "list_siege_members()", + "id": "api_siege_members_list_siege_members" + }, + { + "label": "validation.py", + "file_type": "code", + "source_file": "backend/app/api/validation.py", + "source_location": "L1", + "community": 2, + "norm_label": "validation.py", + "id": "backend_app_api_validation_py" + }, + { + "label": "_read_backend_version()", + "file_type": "code", + "source_file": "backend/app/api/version.py", + "source_location": "L19", + "community": 12, + "norm_label": "_read_backend_version()", + "id": "api_version_read_backend_version" + }, + { + "label": "_fetch_bot_version()", + "file_type": "code", + "source_file": "backend/app/api/version.py", + "source_location": "L42", + "community": 12, + "norm_label": "_fetch_bot_version()", + "id": "api_version_fetch_bot_version" + }, + { + "label": "Return a version string for the backend. When both BUILD_NUMBER and GIT_SHA", + "file_type": "rationale", + "source_file": "backend/app/api/version.py", + "source_location": "L20", + "community": 12, + "norm_label": "return a version string for the backend. when both build_number and git_sha", + "id": "api_version_rationale_20" + }, + { + "label": "Call the bot sidecar's /version endpoint. Returns None if unreachable.", + "file_type": "rationale", + "source_file": "backend/app/api/version.py", + "source_location": "L43", + "community": 12, + "norm_label": "call the bot sidecar's /version endpoint. returns none if unreachable.", + "id": "api_version_rationale_43" + }, + { + "label": "Return version information for all components.", + "file_type": "rationale", + "source_file": "backend/app/api/version.py", + "source_location": "L57", + "community": 12, + "norm_label": "return version information for all components.", + "id": "api_version_rationale_57" + }, + { + "label": "base.py", + "file_type": "code", + "source_file": "backend/app/db/base.py", + "source_location": "L1", + "community": 0, + "norm_label": "base.py", + "id": "backend_app_db_base_py" + }, + { + "label": "DeclarativeBase", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 0, + "norm_label": "declarativebase", + "id": "declarativebase" + }, + { + "label": "seeds.py", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L1", + "community": 7, + "norm_label": "seeds.py", + "id": "backend_app_db_seeds_py" + }, + { + "label": "seed_post_conditions()", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L7", + "community": 7, + "norm_label": "seed_post_conditions()", + "id": "db_seeds_seed_post_conditions" + }, + { + "label": "seed_building_type_config()", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L63", + "community": 7, + "norm_label": "seed_building_type_config()", + "id": "db_seeds_seed_building_type_config" + }, + { + "label": "seed_post_priority_config()", + "file_type": "code", + "source_file": "backend/app/db/seeds.py", + "source_location": "L91", + "community": 7, + "norm_label": "seed_post_priority_config()", + "id": "db_seeds_seed_post_priority_config" + }, + { + "label": "Seed functions for reference/static data tables.", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L1", + "community": 7, + "norm_label": "seed functions for reference/static data tables.", + "id": "db_seeds_rationale_1" + }, + { + "label": "Insert all 36 PostCondition rows. Safe to re-run (ON CONFLICT DO NOTHING).", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L8", + "community": 7, + "norm_label": "insert all 36 postcondition rows. safe to re-run (on conflict do nothing).", + "id": "db_seeds_rationale_8" + }, + { + "label": "Insert all 5 BuildingTypeConfig rows. Safe to re-run (ON CONFLICT DO NOTHING).", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L64", + "community": 7, + "norm_label": "insert all 5 buildingtypeconfig rows. safe to re-run (on conflict do nothing).", + "id": "db_seeds_rationale_64" + }, + { + "label": "Insert all 18 PostPriorityConfig rows with default priority=2. Safe to re-r", + "file_type": "rationale", + "source_file": "backend/app/db/seeds.py", + "source_location": "L92", + "community": 7, + "norm_label": "insert all 18 postpriorityconfig rows with default priority=2. safe to re-r", + "id": "db_seeds_rationale_92" + }, + { + "label": "session.py", + "file_type": "code", + "source_file": "backend/app/db/session.py", + "source_location": "L1", + "community": 35, + "norm_label": "session.py", + "id": "backend_app_db_session_py" + }, + { + "label": "get_db()", + "file_type": "code", + "source_file": "backend/app/db/session.py", + "source_location": "L12", + "community": 35, + "norm_label": "get_db()", + "id": "db_session_get_db" + }, + { + "label": "AuthenticatedUser", + "file_type": "code", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L23", + "community": 9, + "norm_label": "authenticateduser", + "id": "dependencies_auth_authenticateduser" + }, + { + "label": "get_current_user()", + "file_type": "code", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L33", + "community": 9, + "norm_label": "get_current_user()", + "id": "dependencies_auth_get_current_user" + }, + { + "label": "FastAPI dependency for request authentication. Checks three paths in order: 1.", + "file_type": "rationale", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L1", + "community": 9, + "norm_label": "fastapi dependency for request authentication. checks three paths in order: 1.", + "id": "dependencies_auth_rationale_1" + }, + { + "label": "Represents the currently authenticated user or service principal.", + "file_type": "rationale", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L24", + "community": 9, + "norm_label": "represents the currently authenticated user or service principal.", + "id": "dependencies_auth_rationale_24" + }, + { + "label": "Resolve the caller's identity from the incoming request. Tries three mechan", + "file_type": "rationale", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L37", + "community": 9, + "norm_label": "resolve the caller's identity from the incoming request. tries three mechan", + "id": "dependencies_auth_rationale_37" + }, + { + "label": "Base", + "file_type": "code", + "source_file": "", + "source_location": "", + "community": 0, + "norm_label": "base", + "id": "base" + }, + { + "label": "BuildingGroup", + "file_type": "code", + "source_file": "backend/app/models/building_group.py", + "source_location": "L13", + "community": 0, + "norm_label": "buildinggroup", + "id": "models_building_group_buildinggroup" + }, + { + "label": "building_type_config.py", + "file_type": "code", + "source_file": "backend/app/models/building_type_config.py", + "source_location": "L1", + "community": 0, + "norm_label": "building_type_config.py", + "id": "backend_app_models_building_type_config_py" + }, + { + "label": "enums.py", + "file_type": "code", + "source_file": "backend/app/models/enums.py", + "source_location": "L1", + "community": 0, + "norm_label": "enums.py", + "id": "backend_app_models_enums_py" + }, + { + "label": "PowerLevel", + "file_type": "code", + "source_file": "backend/app/models/enums.py", + "source_location": "L25", + "community": 0, + "norm_label": "powerlevel", + "id": "models_enums_powerlevel" + }, + { + "label": "NotificationBatchStatus", + "file_type": "code", + "source_file": "backend/app/models/enums.py", + "source_location": "L33", + "community": 0, + "norm_label": "notificationbatchstatus", + "id": "models_enums_notificationbatchstatus" + }, + { + "label": "member.py", + "file_type": "code", + "source_file": "backend/app/models/member.py", + "source_location": "L1", + "community": 0, + "norm_label": "member.py", + "id": "backend_app_models_member_py" + }, + { + "label": "member_post_preference.py", + "file_type": "code", + "source_file": "backend/app/models/member_post_preference.py", + "source_location": "L1", + "community": 38, + "norm_label": "member_post_preference.py", + "id": "backend_app_models_member_post_preference_py" + }, + { + "label": "notification_batch_result.py", + "file_type": "code", + "source_file": "backend/app/models/notification_batch_result.py", + "source_location": "L1", + "community": 0, + "norm_label": "notification_batch_result.py", + "id": "backend_app_models_notification_batch_result_py" + }, + { + "label": "position.py", + "file_type": "code", + "source_file": "backend/app/models/position.py", + "source_location": "L1", + "community": 0, + "norm_label": "position.py", + "id": "backend_app_models_position_py" + }, + { + "label": "Position", + "file_type": "code", + "source_file": "backend/app/models/position.py", + "source_location": "L14", + "community": 0, + "norm_label": "position", + "id": "models_position_position" + }, + { + "label": "post.py", + "file_type": "code", + "source_file": "backend/app/models/post.py", + "source_location": "L1", + "community": 0, + "norm_label": "post.py", + "id": "backend_app_models_post_py" + }, + { + "label": "post_active_condition.py", + "file_type": "code", + "source_file": "backend/app/models/post_active_condition.py", + "source_location": "L1", + "community": 39, + "norm_label": "post_active_condition.py", + "id": "backend_app_models_post_active_condition_py" + }, + { + "label": "siege.py", + "file_type": "code", + "source_file": "backend/app/models/siege.py", + "source_location": "L1", + "community": 0, + "norm_label": "siege.py", + "id": "backend_app_models_siege_py" + }, + { + "label": "PositionBoardResponse", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L6", + "community": 0, + "norm_label": "positionboardresponse", + "id": "schemas_board_positionboardresponse" + }, + { + "label": "GroupBoardResponse", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L17", + "community": 0, + "norm_label": "groupboardresponse", + "id": "schemas_board_groupboardresponse" + }, + { + "label": "BuildingBoardResponse", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L25", + "community": 0, + "norm_label": "buildingboardresponse", + "id": "schemas_board_buildingboardresponse" + }, + { + "label": "PositionUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L40", + "community": 0, + "norm_label": "positionupdate", + "id": "schemas_board_positionupdate" + }, + { + "label": "BulkPositionUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/board.py", + "source_location": "L47", + "community": 0, + "norm_label": "bulkpositionupdate", + "id": "schemas_board_bulkpositionupdate" + }, + { + "label": "BuildingCreate", + "file_type": "code", + "source_file": "backend/app/schemas/building.py", + "source_location": "L6", + "community": 0, + "norm_label": "buildingcreate", + "id": "schemas_building_buildingcreate" + }, + { + "label": "BuildingUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/building.py", + "source_location": "L12", + "community": 0, + "norm_label": "buildingupdate", + "id": "schemas_building_buildingupdate" + }, + { + "label": "GroupCreate", + "file_type": "code", + "source_file": "backend/app/schemas/building.py", + "source_location": "L43", + "community": 0, + "norm_label": "groupcreate", + "id": "schemas_building_groupcreate" + }, + { + "label": "ChangelogStatusResponse", + "file_type": "code", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L8", + "community": 18, + "norm_label": "changelogstatusresponse", + "id": "schemas_changelog_changelogstatusresponse" + }, + { + "label": "Response schemas for the changelog endpoints.", + "file_type": "rationale", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L1", + "community": 18, + "norm_label": "response schemas for the changelog endpoints.", + "id": "schemas_changelog_rationale_1" + }, + { + "label": "Response shape for both GET /changelog/status and POST /changelog/mark-seen.", + "file_type": "rationale", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L9", + "community": 18, + "norm_label": "response shape for both get /changelog/status and post /changelog/mark-seen.", + "id": "schemas_changelog_rationale_9" + }, + { + "label": "common.py", + "file_type": "code", + "source_file": "backend/app/schemas/common.py", + "source_location": "L1", + "community": 0, + "norm_label": "common.py", + "id": "backend_app_schemas_common_py" + }, + { + "label": "ErrorResponse", + "file_type": "code", + "source_file": "backend/app/schemas/common.py", + "source_location": "L4", + "community": 0, + "norm_label": "errorresponse", + "id": "schemas_common_errorresponse" + }, + { + "label": "MemberBase", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L8", + "community": 0, + "norm_label": "memberbase", + "id": "schemas_member_memberbase" + }, + { + "label": "MemberCreate", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L15", + "community": 0, + "norm_label": "membercreate", + "id": "schemas_member_membercreate" + }, + { + "label": "MemberUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L19", + "community": 0, + "norm_label": "memberupdate", + "id": "schemas_member_memberupdate" + }, + { + "label": "MemberResponse", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L27", + "community": 0, + "norm_label": "memberresponse", + "id": "schemas_member_memberresponse" + }, + { + "label": "MemberPreferencesUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L35", + "community": 0, + "norm_label": "memberpreferencesupdate", + "id": "schemas_member_memberpreferencesupdate" + }, + { + "label": "SyncApply", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L59", + "community": 0, + "norm_label": "syncapply", + "id": "schemas_member_syncapply" + }, + { + "label": "SyncApplyResponse", + "file_type": "code", + "source_file": "backend/app/schemas/member.py", + "source_location": "L65", + "community": 0, + "norm_label": "syncapplyresponse", + "id": "schemas_member_syncapplyresponse" + }, + { + "label": "PostResponse", + "file_type": "code", + "source_file": "backend/app/schemas/post.py", + "source_location": "L6", + "community": 0, + "norm_label": "postresponse", + "id": "schemas_post_postresponse" + }, + { + "label": "PostUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/post.py", + "source_location": "L17", + "community": 0, + "norm_label": "postupdate", + "id": "schemas_post_postupdate" + }, + { + "label": "PostConditionsUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/post.py", + "source_location": "L22", + "community": 0, + "norm_label": "postconditionsupdate", + "id": "schemas_post_postconditionsupdate" + }, + { + "label": "PostConditionResponse", + "file_type": "code", + "source_file": "backend/app/schemas/post_condition.py", + "source_location": "L4", + "community": 0, + "norm_label": "postconditionresponse", + "id": "schemas_post_condition_postconditionresponse" + }, + { + "label": "PostSuggestionApplyRequest", + "file_type": "code", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L79", + "community": 2, + "norm_label": "postsuggestionapplyrequest", + "id": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "label": "StaleEntry", + "file_type": "code", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L91", + "community": 2, + "norm_label": "staleentry", + "id": "schemas_post_suggestions_staleentry" + }, + { + "label": "Pydantic schemas for the Suggest Post Assignments feature. These schemas define", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L1", + "community": 2, + "norm_label": "pydantic schemas for the suggest post assignments feature. these schemas define", + "id": "schemas_post_suggestions_rationale_1" + }, + { + "label": "A single post assignment suggestion produced by the greedy algorithm. Attri", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L13", + "community": 4, + "norm_label": "a single post assignment suggestion produced by the greedy algorithm. attri", + "id": "schemas_post_suggestions_rationale_13" + }, + { + "label": "The full preview result returned by POST /post-suggestions. Attributes:", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L66", + "community": 2, + "norm_label": "the full preview result returned by post /post-suggestions. attributes:", + "id": "schemas_post_suggestions_rationale_66" + }, + { + "label": "Request body for POST /post-suggestions/apply. Attributes: apply_po", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L80", + "community": 2, + "norm_label": "request body for post /post-suggestions/apply. attributes: apply_po", + "id": "schemas_post_suggestions_rationale_80" + }, + { + "label": "A single stale-state violation detected during apply revalidation. Attribut", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L92", + "community": 2, + "norm_label": "a single stale-state violation detected during apply revalidation. attribut", + "id": "schemas_post_suggestions_rationale_92" + }, + { + "label": "Response body for a successful POST /post-suggestions/apply. Attributes:", + "file_type": "rationale", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L117", + "community": 2, + "norm_label": "response body for a successful post /post-suggestions/apply. attributes:", + "id": "schemas_post_suggestions_rationale_117" + }, + { + "label": "SiegeCreate", + "file_type": "code", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L8", + "community": 0, + "norm_label": "siegecreate", + "id": "schemas_siege_siegecreate" + }, + { + "label": "SiegeUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L12", + "community": 0, + "norm_label": "siegeupdate", + "id": "schemas_siege_siegeupdate" + }, + { + "label": "SiegeResponse", + "file_type": "code", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L16", + "community": 0, + "norm_label": "siegeresponse", + "id": "schemas_siege_siegeresponse" + }, + { + "label": "SiegeMemberResponse", + "file_type": "code", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L6", + "community": 0, + "norm_label": "siegememberresponse", + "id": "schemas_siege_member_siegememberresponse" + }, + { + "label": "resolve_member_fields()", + "file_type": "code", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L19", + "community": 1, + "norm_label": "resolve_member_fields()", + "id": "schemas_siege_member_resolve_member_fields" + }, + { + "label": "SiegeMemberUpdate", + "file_type": "code", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L27", + "community": 0, + "norm_label": "siegememberupdate", + "id": "schemas_siege_member_siegememberupdate" + }, + { + "label": "VersionResponse", + "file_type": "code", + "source_file": "backend/app/schemas/version.py", + "source_location": "L4", + "community": 12, + "norm_label": "versionresponse", + "id": "schemas_version_versionresponse" + }, + { + "label": "_build_preview()", + "file_type": "code", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L114", + "community": 2, + "norm_label": "_build_preview()", + "id": "services_attack_day_build_preview" + }, + { + "label": "_now_utc()", + "file_type": "code", + "source_file": "backend/app/services/autofill.py", + "source_location": "L23", + "community": 2, + "norm_label": "_now_utc()", + "id": "services_autofill_now_utc" + }, + { + "label": "_get_siege_for_position()", + "file_type": "code", + "source_file": "backend/app/services/board.py", + "source_location": "L89", + "community": 0, + "norm_label": "_get_siege_for_position()", + "id": "services_board_get_siege_for_position" + }, + { + "label": "_validate_position_state()", + "file_type": "code", + "source_file": "backend/app/services/board.py", + "source_location": "L97", + "community": 34, + "norm_label": "_validate_position_state()", + "id": "services_board_validate_position_state" + }, + { + "label": "_validate_member_active()", + "file_type": "code", + "source_file": "backend/app/services/board.py", + "source_location": "L112", + "community": 16, + "norm_label": "_validate_member_active()", + "id": "services_board_validate_member_active" + }, + { + "label": "Return the full nested board structure for a siege. Raises 404 if the siege", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L16", + "community": 0, + "norm_label": "return the full nested board structure for a siege. raises 404 if the siege", + "id": "services_board_rationale_16" + }, + { + "label": "Validate the logical consistency of position flag combinations.", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L98", + "community": 34, + "norm_label": "validate the logical consistency of position flag combinations.", + "id": "services_board_rationale_98" + }, + { + "label": "Update a single position's assignment. Raises: 404 if position not", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L123", + "community": 16, + "norm_label": "update a single position's assignment. raises: 404 if position not", + "id": "services_board_rationale_123" + }, + { + "label": "Apply multiple position updates in a single transaction. Each update dict m", + "file_type": "rationale", + "source_file": "backend/app/services/board.py", + "source_location": "L172", + "community": 34, + "norm_label": "apply multiple position updates in a single transaction. each update dict m", + "id": "services_board_rationale_172" + }, + { + "label": "BotClient", + "file_type": "code", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L8", + "community": 6, + "norm_label": "botclient", + "id": "services_bot_client_botclient" + }, + { + "label": "._make_client()", + "file_type": "code", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L11", + "community": 6, + "norm_label": "._make_client()", + "id": "services_bot_client_botclient_make_client" + }, + { + "label": "HTTP client for the Discord bot sidecar API.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L1", + "community": 6, + "norm_label": "http client for the discord bot sidecar api.", + "id": "services_bot_client_rationale_1" + }, + { + "label": "Send DM via bot. Returns True on success, False on error.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L19", + "community": 6, + "norm_label": "send dm via bot. returns true on success, false on error.", + "id": "services_bot_client_rationale_19" + }, + { + "label": "Post text to channel. Returns True on success, False on error.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L32", + "community": 6, + "norm_label": "post text to channel. returns true on success, false on error.", + "id": "services_bot_client_rationale_32" + }, + { + "label": "Post image to channel. Returns the CDN URL on success, None on error.", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L45", + "community": 6, + "norm_label": "post image to channel. returns the cdn url on success, none on error.", + "id": "services_bot_client_rationale_45" + }, + { + "label": "Check guild membership via bot sidecar. Returns the member dict (includi", + "file_type": "rationale", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L72", + "community": 6, + "norm_label": "check guild membership via bot sidecar. returns the member dict (includi", + "id": "services_bot_client_rationale_72" + }, + { + "label": "_rebuild_groups_for_level()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L17", + "community": 11, + "norm_label": "_rebuild_groups_for_level()", + "id": "services_buildings_rebuild_groups_for_level" + }, + { + "label": "_get_building_type_config()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L114", + "community": 11, + "norm_label": "_get_building_type_config()", + "id": "services_buildings_get_building_type_config" + }, + { + "label": "_require_planning_or_not_locked()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L141", + "community": 11, + "norm_label": "_require_planning_or_not_locked()", + "id": "services_buildings_require_planning_or_not_locked" + }, + { + "label": "_create_groups_and_positions()", + "file_type": "code", + "source_file": "backend/app/services/buildings.py", + "source_location": "L150", + "community": 11, + "norm_label": "_create_groups_and_positions()", + "id": "services_buildings_create_groups_and_positions" + }, + { + "label": "Rebuild groups and positions so they match the level-appropriate configuration.", + "file_type": "rationale", + "source_file": "backend/app/services/buildings.py", + "source_location": "L23", + "community": 11, + "norm_label": "rebuild groups and positions so they match the level-appropriate configuration.", + "id": "services_buildings_rationale_23" + }, + { + "label": "Raise 400 if the siege is locked for layout changes.", + "file_type": "rationale", + "source_file": "backend/app/services/buildings.py", + "source_location": "L142", + "community": 11, + "norm_label": "raise 400 if the siege is locked for layout changes.", + "id": "services_buildings_rationale_142" + }, + { + "label": "Auto-create BuildingGroups and Positions from config.", + "file_type": "rationale", + "source_file": "backend/app/services/buildings.py", + "source_location": "L156", + "community": 11, + "norm_label": "auto-create buildinggroups and positions from config.", + "id": "services_buildings_rationale_156" + }, + { + "label": "building_capacity.py", + "file_type": "code", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L1", + "community": 11, + "norm_label": "building_capacity.py", + "id": "backend_app_services_building_capacity_py" + }, + { + "label": "get_team_count()", + "file_type": "code", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L13", + "community": 11, + "norm_label": "get_team_count()", + "id": "services_building_capacity_get_team_count" + }, + { + "label": "Return the theoretical total team slots for a building type at a given level.", + "file_type": "rationale", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L14", + "community": 11, + "norm_label": "return the theoretical total team slots for a building type at a given level.", + "id": "services_building_capacity_rationale_14" + }, + { + "label": "_load_assignments()", + "file_type": "code", + "source_file": "backend/app/services/comparison.py", + "source_location": "L13", + "community": 21, + "norm_label": "_load_assignments()", + "id": "services_comparison_load_assignments" + }, + { + "label": "_load_member_names()", + "file_type": "code", + "source_file": "backend/app/services/comparison.py", + "source_location": "L45", + "community": 21, + "norm_label": "_load_member_names()", + "id": "services_comparison_load_member_names" + }, + { + "label": "get_most_recent_completed()", + "file_type": "code", + "source_file": "backend/app/services/comparison.py", + "source_location": "L52", + "community": 21, + "norm_label": "get_most_recent_completed()", + "id": "services_comparison_get_most_recent_completed" + }, + { + "label": "Return {member_id: [PositionKey, ...]} for non-reserve, non-disabled assigned po", + "file_type": "rationale", + "source_file": "backend/app/services/comparison.py", + "source_location": "L14", + "community": 21, + "norm_label": "return {member_id: [positionkey, ...]} for non-reserve, non-disabled assigned po", + "id": "services_comparison_rationale_14" + }, + { + "label": "Service logic for Discord guild member \u2192 clan member matching.", + "file_type": "rationale", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L1", + "community": 24, + "norm_label": "service logic for discord guild member \u2192 clan member matching.", + "id": "services_discord_sync_rationale_1" + }, + { + "label": "Return proposed matches between Discord guild members and clan members. Mat", + "file_type": "rationale", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L12", + "community": 24, + "norm_label": "return proposed matches between discord guild members and clan members. mat", + "id": "services_discord_sync_rationale_12" + }, + { + "label": "Apply accepted sync matches, writing discord_username and discord_id. Unkno", + "file_type": "rationale", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L153", + "community": 24, + "norm_label": "apply accepted sync matches, writing discord_username and discord_id. unkno", + "id": "services_discord_sync_rationale_153" + }, + { + "label": "image_gen.py", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L1", + "community": 17, + "norm_label": "image_gen.py", + "id": "backend_app_services_image_gen_py" + }, + { + "label": "SiegeMemberWithName", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L14", + "community": 0, + "norm_label": "siegememberwithname", + "id": "services_image_gen_siegememberwithname" + }, + { + "label": "_build_assignments_html()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L61", + "community": 17, + "norm_label": "_build_assignments_html()", + "id": "services_image_gen_build_assignments_html" + }, + { + "label": "_build_reserves_html()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L233", + "community": 17, + "norm_label": "_build_reserves_html()", + "id": "services_image_gen_build_reserves_html" + }, + { + "label": "_render_html_to_png()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L331", + "community": 17, + "norm_label": "_render_html_to_png()", + "id": "services_image_gen_render_html_to_png" + }, + { + "label": "generate_assignments_image()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L350", + "community": 17, + "norm_label": "generate_assignments_image()", + "id": "services_image_gen_generate_assignments_image" + }, + { + "label": "generate_reserves_image()", + "file_type": "code", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L360", + "community": 17, + "norm_label": "generate_reserves_image()", + "id": "services_image_gen_generate_reserves_image" + }, + { + "label": "Image generation service \u2014 renders HTML/CSS to PNG via Playwright.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L1", + "community": 17, + "norm_label": "image generation service \u2014 renders html/css to png via playwright.", + "id": "services_image_gen_rationale_1" + }, + { + "label": "Build the full assignments board HTML string. Args: board: Validate", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L66", + "community": 17, + "norm_label": "build the full assignments board html string. args: board: validate", + "id": "services_image_gen_rationale_66" + }, + { + "label": "Build the reserves/members list HTML string. Args: members: Siege m", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L237", + "community": 17, + "norm_label": "build the reserves/members list html string. args: members: siege m", + "id": "services_image_gen_rationale_237" + }, + { + "label": "Render an HTML string to PNG bytes using headless Chromium.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L332", + "community": 17, + "norm_label": "render an html string to png bytes using headless chromium.", + "id": "services_image_gen_rationale_332" + }, + { + "label": "Render the assignments board as a PNG. Returns raw PNG bytes.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L355", + "community": 17, + "norm_label": "render the assignments board as a png. returns raw png bytes.", + "id": "services_image_gen_rationale_355" + }, + { + "label": "Render the members/reserves list as a PNG. Returns raw PNG bytes.", + "file_type": "rationale", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L364", + "community": 17, + "norm_label": "render the members/reserves list as a png. returns raw png bytes.", + "id": "services_image_gen_rationale_364" + }, + { + "label": "Transition a planning siege to active status. Raises: 404 if siege", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L18", + "community": 2, + "norm_label": "transition a planning siege to active status. raises: 404 if siege", + "id": "services_lifecycle_rationale_18" + }, + { + "label": "Transition an active siege to complete status. Raises: 404 if siege", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L62", + "community": 2, + "norm_label": "transition an active siege to complete status. raises: 404 if siege", + "id": "services_lifecycle_rationale_62" + }, + { + "label": "Transition a completed siege back to planning status. Raises: 404 i", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L86", + "community": 2, + "norm_label": "transition a completed siege back to planning status. raises: 404 i", + "id": "services_lifecycle_rationale_86" + }, + { + "label": "Deep-copy a siege into a new planning siege. Rules: - New siege: same d", + "file_type": "rationale", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L110", + "community": 0, + "norm_label": "deep-copy a siege into a new planning siege. rules: - new siege: same d", + "id": "services_lifecycle_rationale_110" + }, + { + "label": "deactivate_member()", + "file_type": "code", + "source_file": "backend/app/services/members.py", + "source_location": "L81", + "community": 6, + "norm_label": "deactivate_member()", + "id": "services_members_deactivate_member" + }, + { + "label": "notification_message.py", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L1", + "community": 15, + "norm_label": "notification_message.py", + "id": "backend_app_services_notification_message_py" + }, + { + "label": "PositionInfo", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L60", + "community": 0, + "norm_label": "positioninfo", + "id": "services_notification_message_positioninfo" + }, + { + "label": "_position_sort_key()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L74", + "community": 15, + "norm_label": "_position_sort_key()", + "id": "services_notification_message_position_sort_key" + }, + { + "label": "_position_label()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L84", + "community": 15, + "norm_label": "_position_label()", + "id": "services_notification_message_position_label" + }, + { + "label": "_positions_to_key_set()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L110", + "community": 15, + "norm_label": "_positions_to_key_set()", + "id": "services_notification_message_positions_to_key_set" + }, + { + "label": "_positions_from_keys()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L117", + "community": 15, + "norm_label": "_positions_from_keys()", + "id": "services_notification_message_positions_from_keys" + }, + { + "label": "_build_section()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L126", + "community": 15, + "norm_label": "_build_section()", + "id": "services_notification_message_build_section" + }, + { + "label": "build_member_notification_message()", + "file_type": "code", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L153", + "community": 15, + "norm_label": "build_member_notification_message()", + "id": "services_notification_message_build_member_notification_message" + }, + { + "label": "Build rich per-member Discord DM messages for siege assignment notifications.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L1", + "community": 15, + "norm_label": "build rich per-member discord dm messages for siege assignment notifications.", + "id": "services_notification_message_rationale_1" + }, + { + "label": "Minimal description of a single assigned position.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L61", + "community": 0, + "norm_label": "minimal description of a single assigned position.", + "id": "services_notification_message_rationale_61" + }, + { + "label": "Return a sortable tuple for consistent ordering within a section. Sorts by:", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L75", + "community": 15, + "norm_label": "return a sortable tuple for consistent ordering within a section. sorts by:", + "id": "services_notification_message_rationale_75" + }, + { + "label": "Format a human-readable label for a position. Posts always use the short ``", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L85", + "community": 15, + "norm_label": "format a human-readable label for a position. posts always use the short ``", + "id": "services_notification_message_rationale_85" + }, + { + "label": "Convert a list of PositionInfo objects to a set of comparable tuples.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L111", + "community": 15, + "norm_label": "convert a list of positioninfo objects to a set of comparable tuples.", + "id": "services_notification_message_rationale_111" + }, + { + "label": "Filter ``positions`` to those whose key is in ``keys``, preserving PositionInfo", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L118", + "community": 15, + "norm_label": "filter ``positions`` to those whose key is in ``keys``, preserving positioninfo", + "id": "services_notification_message_rationale_118" + }, + { + "label": "Render one diff section as a header line followed by plain position lines.", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L131", + "community": 15, + "norm_label": "render one diff section as a header line followed by plain position lines.", + "id": "services_notification_message_rationale_131" + }, + { + "label": "Build a rich Discord DM message for a single siege member. Args: si", + "file_type": "rationale", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L161", + "community": 15, + "norm_label": "build a rich discord dm message for a single siege member. args: si", + "id": "services_notification_message_rationale_161" + }, + { + "label": "_get_siege_or_404()", + "file_type": "code", + "source_file": "backend/app/services/posts.py", + "source_location": "L15", + "community": 16, + "norm_label": "_get_siege_or_404()", + "id": "services_posts_get_siege_or_404" + }, + { + "label": "_get_post_for_siege_or_404()", + "file_type": "code", + "source_file": "backend/app/services/posts.py", + "source_location": "L23", + "community": 16, + "norm_label": "_get_post_for_siege_or_404()", + "id": "services_posts_get_post_for_siege_or_404" + }, + { + "label": "Return all Post records for a siege with active_conditions loaded. Raises:", + "file_type": "rationale", + "source_file": "backend/app/services/posts.py", + "source_location": "L37", + "community": 16, + "norm_label": "return all post records for a siege with active_conditions loaded. raises:", + "id": "services_posts_rationale_37" + }, + { + "label": "Update a post's priority and/or description. Raises: 404 if post no", + "file_type": "rationale", + "source_file": "backend/app/services/posts.py", + "source_location": "L55", + "community": 16, + "norm_label": "update a post's priority and/or description. raises: 404 if post no", + "id": "services_posts_rationale_55" + }, + { + "label": "Replace all active conditions on a post. Raises: 404 if post not fo", + "file_type": "rationale", + "source_file": "backend/app/services/posts.py", + "source_location": "L79", + "community": 16, + "norm_label": "replace all active conditions on a post. raises: 404 if post not fo", + "id": "services_posts_rationale_79" + }, + { + "label": "_get_target_position()", + "file_type": "code", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L517", + "community": 2, + "norm_label": "_get_target_position()", + "id": "services_post_suggestions_get_target_position" + }, + { + "label": "_null_entry()", + "file_type": "code", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L537", + "community": 2, + "norm_label": "_null_entry()", + "id": "services_post_suggestions_null_entry" + }, + { + "label": "Service implementing the Suggest Post Assignments feature. Public API: prev", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L1", + "community": 2, + "norm_label": "service implementing the suggest post assignments feature. public api: prev", + "id": "services_post_suggestions_rationale_1" + }, + { + "label": "Return the current UTC datetime (naive, matching DB TIMESTAMP columns).", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L71", + "community": 2, + "norm_label": "return the current utc datetime (naive, matching db timestamp columns).", + "id": "services_post_suggestions_rationale_71" + }, + { + "label": "Generate a greedy post assignment suggestion and persist it as a preview. T", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L79", + "community": 2, + "norm_label": "generate a greedy post assignment suggestion and persist it as a preview. t", + "id": "services_post_suggestions_rationale_79" + }, + { + "label": "Apply a subset of a stored post-suggestion preview atomically. The whole se", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L340", + "community": 2, + "norm_label": "apply a subset of a stored post-suggestion preview atomically. the whole se", + "id": "services_post_suggestions_rationale_340" + }, + { + "label": "Return the single target position from a post building, or None. Posts have", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L518", + "community": 2, + "norm_label": "return the single target position from a post building, or none. posts have", + "id": "services_post_suggestions_rationale_518" + }, + { + "label": "Build a PostSuggestionEntry with no suggestion (skipped post). Args:", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L546", + "community": 2, + "norm_label": "build a postsuggestionentry with no suggestion (skipped post). args:", + "id": "services_post_suggestions_rationale_546" + }, + { + "label": "# NOTE: _validate_position_state() from bulk_update_positions is NOT", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L418", + "community": 2, + "norm_label": "# note: _validate_position_state() from bulk_update_positions is not", + "id": "services_post_suggestions_rationale_418" + }, + { + "label": "# NOTE: session.refresh(pos) is not called post-write because the apply", + "file_type": "rationale", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L489", + "community": 2, + "norm_label": "# note: session.refresh(pos) is not called post-write because the apply", + "id": "services_post_suggestions_rationale_489" + }, + { + "label": "scrolls_per_player()", + "file_type": "code", + "source_file": "backend/app/services/sieges.py", + "source_location": "L19", + "community": 2, + "norm_label": "scrolls_per_player()", + "id": "services_sieges_scrolls_per_player" + }, + { + "label": "compute_scroll_count()", + "file_type": "code", + "source_file": "backend/app/services/sieges.py", + "source_location": "L28", + "community": 2, + "norm_label": "compute_scroll_count()", + "id": "services_sieges_compute_scroll_count" + }, + { + "label": "Return the per-player scroll limit for a siege. Matches the UI formula: 4 s", + "file_type": "rationale", + "source_file": "backend/app/services/sieges.py", + "source_location": "L20", + "community": 2, + "norm_label": "return the per-player scroll limit for a siege. matches the ui formula: 4 s", + "id": "services_sieges_rationale_20" + }, + { + "label": "Compute total scroll count from the theoretical capacity of every building.", + "file_type": "rationale", + "source_file": "backend/app/services/sieges.py", + "source_location": "L29", + "community": 2, + "norm_label": "compute total scroll count from the theoretical capacity of every building.", + "id": "services_sieges_rationale_29" + }, + { + "label": "seed.py", + "file_type": "code", + "source_file": "backend/scripts/seed.py", + "source_location": "L1", + "community": 7, + "norm_label": "seed.py", + "id": "backend_scripts_seed_py" + }, + { + "label": "seed_demo.py", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L1", + "community": 7, + "norm_label": "seed_demo.py", + "id": "backend_scripts_seed_demo_py" + }, + { + "label": "get_or_create_members()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L95", + "community": 7, + "norm_label": "get_or_create_members()", + "id": "scripts_seed_demo_get_or_create_members" + }, + { + "label": "get_or_create_demo_siege()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L114", + "community": 7, + "norm_label": "get_or_create_demo_siege()", + "id": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "label": "seed_buildings_and_positions()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L133", + "community": 0, + "norm_label": "seed_buildings_and_positions()", + "id": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "label": "get_or_create_second_siege()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L203", + "community": 7, + "norm_label": "get_or_create_second_siege()", + "id": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "label": "seed_siege_members()", + "file_type": "code", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L220", + "community": 7, + "norm_label": "seed_siege_members()", + "id": "scripts_seed_demo_seed_siege_members" + }, + { + "label": "Return existing demo members or create them.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L96", + "community": 7, + "norm_label": "return existing demo members or create them.", + "id": "scripts_seed_demo_rationale_96" + }, + { + "label": "Return the existing demo siege or create a new one.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L115", + "community": 7, + "norm_label": "return the existing demo siege or create a new one.", + "id": "scripts_seed_demo_rationale_115" + }, + { + "label": "Create buildings, groups, and positions; assign members round-robin. member", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L139", + "community": 0, + "norm_label": "create buildings, groups, and positions; assign members round-robin. member", + "id": "scripts_seed_demo_rationale_139" + }, + { + "label": "Return the existing planning siege or create one one week after the first.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L204", + "community": 7, + "norm_label": "return the existing planning siege or create one one week after the first.", + "id": "scripts_seed_demo_rationale_204" + }, + { + "label": "Enrol members in the siege with attack day assignments.", + "file_type": "rationale", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L225", + "community": 7, + "norm_label": "enrol members in the siege with attack day assignments.", + "id": "scripts_seed_demo_rationale_225" + }, + { + "label": "config.py", + "file_type": "code", + "source_file": "bot/app/config.py", + "source_location": "L1", + "community": 28, + "norm_label": "config.py", + "id": "bot_app_config_py" + }, + { + "label": "discord_client.py", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L1", + "community": 6, + "norm_label": "discord_client.py", + "id": "bot_app_discord_client_py" + }, + { + "label": "SiegeBot", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L6", + "community": 6, + "norm_label": "siegebot", + "id": "app_discord_client_siegebot" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L9", + "community": 6, + "norm_label": ".__init__()", + "id": "app_discord_client_siegebot_init" + }, + { + "label": ".on_ready()", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L14", + "community": 6, + "norm_label": ".on_ready()", + "id": "app_discord_client_siegebot_on_ready" + }, + { + "label": "._require_guild()", + "file_type": "code", + "source_file": "bot/app/discord_client.py", + "source_location": "L17", + "community": 6, + "norm_label": "._require_guild()", + "id": "app_discord_client_siegebot_require_guild" + }, + { + "label": "Discord client for the Siege Assignment System.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L7", + "community": 6, + "norm_label": "discord client for the siege assignment system.", + "id": "app_discord_client_rationale_7" + }, + { + "label": "Find member by username in the guild, open DM, send message.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L23", + "community": 6, + "norm_label": "find member by username in the guild, open dm, send message.", + "id": "app_discord_client_rationale_23" + }, + { + "label": "Find text channel by name, post message.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L34", + "community": 6, + "norm_label": "find text channel by name, post message.", + "id": "app_discord_client_rationale_34" + }, + { + "label": "Find text channel by name, post image as Discord file attachment. Retur", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L47", + "community": 6, + "norm_label": "find text channel by name, post image as discord file attachment. retur", + "id": "app_discord_client_rationale_47" + }, + { + "label": "Return list of guild members as dicts with id, username, and display_name.", + "file_type": "rationale", + "source_file": "bot/app/discord_client.py", + "source_location": "L62", + "community": 6, + "norm_label": "return list of guild members as dicts with id, username, and display_name.", + "id": "app_discord_client_rationale_62" + }, + { + "label": "http_api.py", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L1", + "community": 6, + "norm_label": "http_api.py", + "id": "bot_app_http_api_py" + }, + { + "label": "set_bot()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L22", + "community": 6, + "norm_label": "set_bot()", + "id": "app_http_api_set_bot" + }, + { + "label": "_get_bot()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L27", + "community": 6, + "norm_label": "_get_bot()", + "id": "app_http_api_get_bot" + }, + { + "label": "verify_api_key()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L36", + "community": 6, + "norm_label": "verify_api_key()", + "id": "app_http_api_verify_api_key" + }, + { + "label": "NotifyRequest", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L46", + "community": 6, + "norm_label": "notifyrequest", + "id": "app_http_api_notifyrequest" + }, + { + "label": "PostMessageRequest", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L51", + "community": 6, + "norm_label": "postmessagerequest", + "id": "app_http_api_postmessagerequest" + }, + { + "label": "version()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L57", + "community": 12, + "norm_label": "version()", + "id": "app_http_api_version" + }, + { + "label": "notify()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L83", + "community": 6, + "norm_label": "notify()", + "id": "app_http_api_notify" + }, + { + "label": "post_message()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L97", + "community": 6, + "norm_label": "post_message()", + "id": "app_http_api_post_message" + }, + { + "label": "post_image()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L111", + "community": 6, + "norm_label": "post_image()", + "id": "app_http_api_post_image" + }, + { + "label": "get_guild_member()", + "file_type": "code", + "source_file": "bot/app/http_api.py", + "source_location": "L136", + "community": 6, + "norm_label": "get_guild_member()", + "id": "app_http_api_get_guild_member" + }, + { + "label": "Validate the Bearer token against the configured bot API key.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L37", + "community": 6, + "norm_label": "validate the bearer token against the configured bot api key.", + "id": "app_http_api_rationale_37" + }, + { + "label": "Return the bot version \u2014 no authentication required. Returns ``1.0.1+42.abc", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L58", + "community": 12, + "norm_label": "return the bot version \u2014 no authentication required. returns ``1.0.1+42.abc", + "id": "app_http_api_rationale_58" + }, + { + "label": "Health check \u2014 no authentication required.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L78", + "community": 6, + "norm_label": "health check \u2014 no authentication required.", + "id": "app_http_api_rationale_78" + }, + { + "label": "Send a DM notification to a guild member.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L87", + "community": 6, + "norm_label": "send a dm notification to a guild member.", + "id": "app_http_api_rationale_87" + }, + { + "label": "Post a text message to a guild channel.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L101", + "community": 6, + "norm_label": "post a text message to a guild channel.", + "id": "app_http_api_rationale_101" + }, + { + "label": "Post an image to a guild channel.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L116", + "community": 6, + "norm_label": "post an image to a guild channel.", + "id": "app_http_api_rationale_116" + }, + { + "label": "Retrieve guild member list.", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L130", + "community": 6, + "norm_label": "retrieve guild member list.", + "id": "app_http_api_rationale_130" + }, + { + "label": "Look up a single guild member by Discord user ID. Returns ``{\"is_member\": f", + "file_type": "rationale", + "source_file": "bot/app/http_api.py", + "source_location": "L140", + "community": 6, + "norm_label": "look up a single guild member by discord user id. returns ``{\"is_member\": f", + "id": "app_http_api_rationale_140" + }, + { + "label": "main.py", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L1", + "community": 7, + "norm_label": "main.py", + "id": "bot_app_main_py" + }, + { + "label": "run_http_server()", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L18", + "community": 7, + "norm_label": "run_http_server()", + "id": "app_main_run_http_server" + }, + { + "label": "run_discord_client()", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L30", + "community": 7, + "norm_label": "run_discord_client()", + "id": "app_main_run_discord_client" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "bot/app/main.py", + "source_location": "L36", + "community": 7, + "norm_label": "main()", + "id": "app_main_main" + }, + { + "label": "Run the FastAPI/uvicorn HTTP sidecar on port 8001.", + "file_type": "rationale", + "source_file": "bot/app/main.py", + "source_location": "L19", + "community": 7, + "norm_label": "run the fastapi/uvicorn http sidecar on port 8001.", + "id": "app_main_rationale_19" + }, + { + "label": "Connect and run the Discord client.", + "file_type": "rationale", + "source_file": "bot/app/main.py", + "source_location": "L31", + "community": 7, + "norm_label": "connect and run the discord client.", + "id": "app_main_rationale_31" + }, + { + "label": "Start both the Discord client and HTTP server concurrently.", + "file_type": "rationale", + "source_file": "bot/app/main.py", + "source_location": "L37", + "community": 7, + "norm_label": "start both the discord client and http server concurrently.", + "id": "app_main_rationale_37" + }, + { + "label": "telemetry.py", + "file_type": "code", + "source_file": "bot/app/telemetry.py", + "source_location": "L1", + "community": 31, + "norm_label": "telemetry.py", + "id": "bot_app_telemetry_py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "bot/app/__init__.py", + "source_location": "L1", + "community": 40, + "norm_label": "__init__.py", + "id": "bot_app_init_py" + }, + { + "label": "eslint.config.js", + "file_type": "code", + "source_file": "frontend/eslint.config.js", + "source_location": "L1", + "community": 41, + "norm_label": "eslint.config.js", + "id": "frontend_eslint_config_js" + }, + { + "label": "playwright.config.ts", + "file_type": "code", + "source_file": "frontend/playwright.config.ts", + "source_location": "L1", + "community": 42, + "norm_label": "playwright.config.ts", + "id": "frontend_playwright_config_ts" + }, + { + "label": "postcss.config.js", + "file_type": "code", + "source_file": "frontend/postcss.config.js", + "source_location": "L1", + "community": 43, + "norm_label": "postcss.config.js", + "id": "frontend_postcss_config_js" + }, + { + "label": "tailwind.config.ts", + "file_type": "code", + "source_file": "frontend/tailwind.config.ts", + "source_location": "L1", + "community": 20, + "norm_label": "tailwind.config.ts", + "id": "frontend_tailwind_config_ts" + }, + { + "label": "vite.config.ts", + "file_type": "code", + "source_file": "frontend/vite.config.ts", + "source_location": "L1", + "community": 36, + "norm_label": "vite.config.ts", + "id": "frontend_vite_config_ts" + }, + { + "label": "vitest.config.ts", + "file_type": "code", + "source_file": "frontend/vitest.config.ts", + "source_location": "L1", + "community": 36, + "norm_label": "vitest.config.ts", + "id": "frontend_vitest_config_ts" + }, + { + "label": "board.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L1", + "community": 10, + "norm_label": "board.spec.ts", + "id": "frontend_e2e_board_spec_ts" + }, + { + "label": "apiCreateSiege()", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L13", + "community": 10, + "norm_label": "apicreatesiege()", + "id": "e2e_board_spec_apicreatesiege" + }, + { + "label": "apiAddBuilding()", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L27", + "community": 10, + "norm_label": "apiaddbuilding()", + "id": "e2e_board_spec_apiaddbuilding" + }, + { + "label": "apiCreateMember()", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L52", + "community": 10, + "norm_label": "apicreatemember()", + "id": "e2e_board_spec_apicreatemember" + }, + { + "label": "buildingsTab", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L127", + "community": 10, + "norm_label": "buildingstab", + "id": "e2e_board_spec_buildingstab" + }, + { + "label": "postsTab", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L128", + "community": 14, + "norm_label": "poststab", + "id": "e2e_board_spec_poststab" + }, + { + "label": "search", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L179", + "community": 10, + "norm_label": "search", + "id": "e2e_board_spec_search" + }, + { + "label": "roleSelect", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L198", + "community": 10, + "norm_label": "roleselect", + "id": "e2e_board_spec_roleselect" + }, + { + "label": "firstPositionSpan", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L238", + "community": 10, + "norm_label": "firstpositionspan", + "id": "e2e_board_spec_firstpositionspan" + }, + { + "label": "positionCell", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L239", + "community": 10, + "norm_label": "positioncell", + "id": "e2e_board_spec_positioncell" + }, + { + "label": "chevron", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L244", + "community": 10, + "norm_label": "chevron", + "id": "e2e_board_spec_chevron" + }, + { + "label": "autofillBtn", + "file_type": "code", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L367", + "community": 10, + "norm_label": "autofillbtn", + "id": "e2e_board_spec_autofillbtn" + }, + { + "label": "members.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L1", + "community": 32, + "norm_label": "members.spec.ts", + "id": "frontend_e2e_members_spec_ts" + }, + { + "label": "ensureMemberSlotsAvailable()", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L20", + "community": 32, + "norm_label": "ensurememberslotsavailable()", + "id": "e2e_members_spec_ensurememberslotsavailable" + }, + { + "label": "activeCheckbox", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L125", + "community": 32, + "norm_label": "activecheckbox", + "id": "e2e_members_spec_activecheckbox" + }, + { + "label": "editLinks", + "file_type": "code", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L131", + "community": 32, + "norm_label": "editlinks", + "id": "e2e_members_spec_editlinks" + }, + { + "label": "siege-lifecycle.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L1", + "community": 10, + "norm_label": "siege-lifecycle.spec.ts", + "id": "frontend_e2e_siege_lifecycle_spec_ts" + }, + { + "label": "dateInput", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L121", + "community": 10, + "norm_label": "dateinput", + "id": "e2e_siege_lifecycle_spec_dateinput" + }, + { + "label": "url", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L153", + "community": 10, + "norm_label": "url", + "id": "e2e_siege_lifecycle_spec_url" + }, + { + "label": "tabStrip", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L181", + "community": 10, + "norm_label": "tabstrip", + "id": "e2e_siege_lifecycle_spec_tabstrip" + }, + { + "label": "boardLink", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L203", + "community": 10, + "norm_label": "boardlink", + "id": "e2e_siege_lifecycle_spec_boardlink" + }, + { + "label": "memberRow", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L369", + "community": 10, + "norm_label": "memberrow", + "id": "e2e_siege_lifecycle_spec_memberrow" + }, + { + "label": "activeBadge", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L382", + "community": 10, + "norm_label": "activebadge", + "id": "e2e_siege_lifecycle_spec_activebadge" + }, + { + "label": "errorBadge", + "file_type": "code", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L383", + "community": 10, + "norm_label": "errorbadge", + "id": "e2e_siege_lifecycle_spec_errorbadge" + }, + { + "label": "smoke.spec.ts", + "file_type": "code", + "source_file": "frontend/e2e/smoke.spec.ts", + "source_location": "L1", + "community": 44, + "norm_label": "smoke.spec.ts", + "id": "frontend_e2e_smoke_spec_ts" + }, + { + "label": "App.tsx", + "file_type": "code", + "source_file": "frontend/src/App.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "app.tsx", + "id": "frontend_src_app_tsx" + }, + { + "label": "App()", + "file_type": "code", + "source_file": "frontend/src/App.tsx", + "source_location": "L19", + "community": 1, + "norm_label": "app()", + "id": "src_app_app" + }, + { + "label": "main.tsx", + "file_type": "code", + "source_file": "frontend/src/main.tsx", + "source_location": "L1", + "community": 25, + "norm_label": "main.tsx", + "id": "frontend_src_main_tsx" + }, + { + "label": "queryClient", + "file_type": "code", + "source_file": "frontend/src/main.tsx", + "source_location": "L9", + "community": 25, + "norm_label": "queryclient", + "id": "src_main_queryclient" + }, + { + "label": "vite-env.d.ts", + "file_type": "code", + "source_file": "frontend/src/vite-env.d.ts", + "source_location": "L1", + "community": 45, + "norm_label": "vite-env.d.ts", + "id": "frontend_src_vite_env_d_ts" + }, + { + "label": "board.ts", + "file_type": "code", + "source_file": "frontend/src/api/board.ts", + "source_location": "L1", + "community": 0, + "norm_label": "board.ts", + "id": "frontend_src_api_board_ts" + }, + { + "label": "getBoard()", + "file_type": "code", + "source_file": "frontend/src/api/board.ts", + "source_location": "L4", + "community": 0, + "norm_label": "getboard()", + "id": "api_board_getboard" + }, + { + "label": "changelog.ts", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L1", + "community": 26, + "norm_label": "changelog.ts", + "id": "frontend_src_api_changelog_ts" + }, + { + "label": "ChangelogStatus", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L3", + "community": 26, + "norm_label": "changelogstatus", + "id": "api_changelog_changelogstatus" + }, + { + "label": "fetchChangelogStatus()", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L7", + "community": 26, + "norm_label": "fetchchangelogstatus()", + "id": "api_changelog_fetchchangelogstatus" + }, + { + "label": "markChangelogSeen()", + "file_type": "code", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L12", + "community": 18, + "norm_label": "markchangelogseen()", + "id": "api_changelog_markchangelogseen" + }, + { + "label": "client.ts", + "file_type": "code", + "source_file": "frontend/src/api/client.ts", + "source_location": "L1", + "community": 27, + "norm_label": "client.ts", + "id": "frontend_src_api_client_ts" + }, + { + "label": "apiClient", + "file_type": "code", + "source_file": "frontend/src/api/client.ts", + "source_location": "L3", + "community": 27, + "norm_label": "apiclient", + "id": "api_client_apiclient" + }, + { + "label": "config.ts", + "file_type": "code", + "source_file": "frontend/src/api/config.ts", + "source_location": "L1", + "community": 20, + "norm_label": "config.ts", + "id": "frontend_src_api_config_ts" + }, + { + "label": "AppConfig", + "file_type": "code", + "source_file": "frontend/src/api/config.ts", + "source_location": "L3", + "community": 20, + "norm_label": "appconfig", + "id": "api_config_appconfig" + }, + { + "label": "fetchConfig()", + "file_type": "code", + "source_file": "frontend/src/api/config.ts", + "source_location": "L7", + "community": 20, + "norm_label": "fetchconfig()", + "id": "api_config_fetchconfig" + }, + { + "label": "members.ts", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L1", + "community": 1, + "norm_label": "members.ts", + "id": "frontend_src_api_members_ts" + }, + { + "label": "getMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L17", + "community": 1, + "norm_label": "getmember()", + "id": "api_members_getmember" + }, + { + "label": "createMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L22", + "community": 6, + "norm_label": "createmember()", + "id": "api_members_createmember" + }, + { + "label": "updateMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L32", + "community": 6, + "norm_label": "updatemember()", + "id": "api_members_updatemember" + }, + { + "label": "deleteMember()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L46", + "community": 1, + "norm_label": "deletemember()", + "id": "api_members_deletemember" + }, + { + "label": "getMemberPreferences()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L50", + "community": 6, + "norm_label": "getmemberpreferences()", + "id": "api_members_getmemberpreferences" + }, + { + "label": "updateMemberPreferences()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L59", + "community": 1, + "norm_label": "updatememberpreferences()", + "id": "api_members_updatememberpreferences" + }, + { + "label": "getPostConditions()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L72", + "community": 1, + "norm_label": "getpostconditions()", + "id": "api_members_getpostconditions" + }, + { + "label": "getMemberRoles()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L77", + "community": 1, + "norm_label": "getmemberroles()", + "id": "api_members_getmemberroles" + }, + { + "label": "previewDiscordSync()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L82", + "community": 24, + "norm_label": "previewdiscordsync()", + "id": "api_members_previewdiscordsync" + }, + { + "label": "applyDiscordSync()", + "file_type": "code", + "source_file": "frontend/src/api/members.ts", + "source_location": "L89", + "community": 24, + "norm_label": "applydiscordsync()", + "id": "api_members_applydiscordsync" + }, + { + "label": "notifySiegeMembers()", + "file_type": "code", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L8", + "community": 0, + "norm_label": "notifysiegemembers()", + "id": "api_notifications_notifysiegemembers" + }, + { + "label": "getNotificationBatch()", + "file_type": "code", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L17", + "community": 0, + "norm_label": "getnotificationbatch()", + "id": "api_notifications_getnotificationbatch" + }, + { + "label": "postToChannel()", + "file_type": "code", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L27", + "community": 0, + "norm_label": "posttochannel()", + "id": "api_notifications_posttochannel" + }, + { + "label": "posts.ts", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L1", + "community": 33, + "norm_label": "posts.ts", + "id": "frontend_src_api_posts_ts" + }, + { + "label": "PostPriorityConfig", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L4", + "community": 0, + "norm_label": "postpriorityconfig", + "id": "api_posts_postpriorityconfig" + }, + { + "label": "getPostPriorities()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L11", + "community": 33, + "norm_label": "getpostpriorities()", + "id": "api_posts_getpostpriorities" + }, + { + "label": "updatePostPriority()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L16", + "community": 33, + "norm_label": "updatepostpriority()", + "id": "api_posts_updatepostpriority" + }, + { + "label": "getPosts()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L27", + "community": 33, + "norm_label": "getposts()", + "id": "api_posts_getposts" + }, + { + "label": "updatePost()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L32", + "community": 16, + "norm_label": "updatepost()", + "id": "api_posts_updatepost" + }, + { + "label": "setPostConditions()", + "file_type": "code", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L44", + "community": 16, + "norm_label": "setpostconditions()", + "id": "api_posts_setpostconditions" + }, + { + "label": "sieges.ts", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L1", + "community": 2, + "norm_label": "sieges.ts", + "id": "frontend_src_api_sieges_ts" + }, + { + "label": "getSieges()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L20", + "community": 1, + "norm_label": "getsieges()", + "id": "api_sieges_getsieges" + }, + { + "label": "getSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L27", + "community": 1, + "norm_label": "getsiege()", + "id": "api_sieges_getsiege" + }, + { + "label": "createSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L32", + "community": 0, + "norm_label": "createsiege()", + "id": "api_sieges_createsiege" + }, + { + "label": "updateSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L37", + "community": 2, + "norm_label": "updatesiege()", + "id": "api_sieges_updatesiege" + }, + { + "label": "deleteSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L45", + "community": 2, + "norm_label": "deletesiege()", + "id": "api_sieges_deletesiege" + }, + { + "label": "activateSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L49", + "community": 2, + "norm_label": "activatesiege()", + "id": "api_sieges_activatesiege" + }, + { + "label": "completeSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L54", + "community": 2, + "norm_label": "completesiege()", + "id": "api_sieges_completesiege" + }, + { + "label": "cloneSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L59", + "community": 0, + "norm_label": "clonesiege()", + "id": "api_sieges_clonesiege" + }, + { + "label": "reopenSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L64", + "community": 2, + "norm_label": "reopensiege()", + "id": "api_sieges_reopensiege" + }, + { + "label": "validateSiege()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L69", + "community": 2, + "norm_label": "validatesiege()", + "id": "api_sieges_validatesiege" + }, + { + "label": "getBuildings()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L76", + "community": 11, + "norm_label": "getbuildings()", + "id": "api_sieges_getbuildings" + }, + { + "label": "createBuilding()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L83", + "community": 2, + "norm_label": "createbuilding()", + "id": "api_sieges_createbuilding" + }, + { + "label": "updateBuilding()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L94", + "community": 11, + "norm_label": "updatebuilding()", + "id": "api_sieges_updatebuilding" + }, + { + "label": "deleteBuilding()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L106", + "community": 11, + "norm_label": "deletebuilding()", + "id": "api_sieges_deletebuilding" + }, + { + "label": "getSiegeMembers()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L120", + "community": 1, + "norm_label": "getsiegemembers()", + "id": "api_sieges_getsiegemembers" + }, + { + "label": "getSiegeMemberPreferences()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L127", + "community": 14, + "norm_label": "getsiegememberpreferences()", + "id": "api_sieges_getsiegememberpreferences" + }, + { + "label": "previewAutofill()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L165", + "community": 2, + "norm_label": "previewautofill()", + "id": "api_sieges_previewautofill" + }, + { + "label": "applyAutofill()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L174", + "community": 2, + "norm_label": "applyautofill()", + "id": "api_sieges_applyautofill" + }, + { + "label": "previewAttackDay()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L183", + "community": 2, + "norm_label": "previewattackday()", + "id": "api_sieges_previewattackday" + }, + { + "label": "applyAttackDay()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L192", + "community": 2, + "norm_label": "applyattackday()", + "id": "api_sieges_applyattackday" + }, + { + "label": "compareSieges()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L201", + "community": 21, + "norm_label": "comparesieges()", + "id": "api_sieges_comparesieges" + }, + { + "label": "compareSiegesSpecific()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L210", + "community": 2, + "norm_label": "comparesiegesspecific()", + "id": "api_sieges_comparesiegesspecific" + }, + { + "label": "previewPostSuggestions()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L220", + "community": 2, + "norm_label": "previewpostsuggestions()", + "id": "api_sieges_previewpostsuggestions" + }, + { + "label": "applyPostSuggestions()", + "file_type": "code", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L229", + "community": 2, + "norm_label": "applypostsuggestions()", + "id": "api_sieges_applypostsuggestions" + }, + { + "label": "types.ts", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L1", + "community": 0, + "norm_label": "types.ts", + "id": "frontend_src_api_types_ts" + }, + { + "label": "MemberRole", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L2", + "community": 0, + "norm_label": "memberrole", + "id": "api_types_memberrole" + }, + { + "label": "SiegeStatus", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L3", + "community": 0, + "norm_label": "siegestatus", + "id": "api_types_siegestatus" + }, + { + "label": "BuildingType", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L4", + "community": 0, + "norm_label": "buildingtype", + "id": "api_types_buildingtype" + }, + { + "label": "Member", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L12", + "community": 0, + "norm_label": "member", + "id": "api_types_member" + }, + { + "label": "SyncMatch", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L23", + "community": 0, + "norm_label": "syncmatch", + "id": "api_types_syncmatch" + }, + { + "label": "SyncPreviewResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L32", + "community": 0, + "norm_label": "syncpreviewresponse", + "id": "api_types_syncpreviewresponse" + }, + { + "label": "SyncApplyItem", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L38", + "community": 1, + "norm_label": "syncapplyitem", + "id": "api_types_syncapplyitem" + }, + { + "label": "PostCondition", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L44", + "community": 0, + "norm_label": "postcondition", + "id": "api_types_postcondition" + }, + { + "label": "Siege", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L51", + "community": 0, + "norm_label": "siege", + "id": "api_types_siege" + }, + { + "label": "Building", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L62", + "community": 0, + "norm_label": "building", + "id": "api_types_building" + }, + { + "label": "MemberPreferenceSummary", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L72", + "community": 0, + "norm_label": "memberpreferencesummary", + "id": "api_types_memberpreferencesummary" + }, + { + "label": "PositionResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L79", + "community": 0, + "norm_label": "positionresponse", + "id": "api_types_positionresponse" + }, + { + "label": "BuildingGroupResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L89", + "community": 0, + "norm_label": "buildinggroupresponse", + "id": "api_types_buildinggroupresponse" + }, + { + "label": "BuildingResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L96", + "community": 0, + "norm_label": "buildingresponse", + "id": "api_types_buildingresponse" + }, + { + "label": "BoardResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L105", + "community": 0, + "norm_label": "boardresponse", + "id": "api_types_boardresponse" + }, + { + "label": "SiegeMember", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L111", + "community": 1, + "norm_label": "siegemember", + "id": "api_types_siegemember" + }, + { + "label": "Post", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L129", + "community": 0, + "norm_label": "post", + "id": "api_types_post" + }, + { + "label": "ValidationIssue", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L140", + "community": 2, + "norm_label": "validationissue", + "id": "api_types_validationissue" + }, + { + "label": "ValidationResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L146", + "community": 2, + "norm_label": "validationresult", + "id": "api_types_validationresult" + }, + { + "label": "AutofillAssignment", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L152", + "community": 2, + "norm_label": "autofillassignment", + "id": "api_types_autofillassignment" + }, + { + "label": "AutofillPreviewResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L158", + "community": 2, + "norm_label": "autofillpreviewresult", + "id": "api_types_autofillpreviewresult" + }, + { + "label": "AutofillApplyResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L163", + "community": 2, + "norm_label": "autofillapplyresult", + "id": "api_types_autofillapplyresult" + }, + { + "label": "AttackDayAssignment", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L168", + "community": 2, + "norm_label": "attackdayassignment", + "id": "api_types_attackdayassignment" + }, + { + "label": "AttackDayPreviewResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L173", + "community": 2, + "norm_label": "attackdaypreviewresult", + "id": "api_types_attackdaypreviewresult" + }, + { + "label": "AttackDayApplyResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L178", + "community": 2, + "norm_label": "attackdayapplyresult", + "id": "api_types_attackdayapplyresult" + }, + { + "label": "PositionKey", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L183", + "community": 21, + "norm_label": "positionkey", + "id": "api_types_positionkey" + }, + { + "label": "MemberDiff", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L190", + "community": 21, + "norm_label": "memberdiff", + "id": "api_types_memberdiff" + }, + { + "label": "ComparisonResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L198", + "community": 21, + "norm_label": "comparisonresult", + "id": "api_types_comparisonresult" + }, + { + "label": "NotificationResultItem", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L205", + "community": 0, + "norm_label": "notificationresultitem", + "id": "api_types_notificationresultitem" + }, + { + "label": "NotificationBatchResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L214", + "community": 0, + "norm_label": "notificationbatchresponse", + "id": "api_types_notificationbatchresponse" + }, + { + "label": "NotifyResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L220", + "community": 0, + "norm_label": "notifyresponse", + "id": "api_types_notifyresponse" + }, + { + "label": "GenerateImagesResponse", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L227", + "community": 0, + "norm_label": "generateimagesresponse", + "id": "api_types_generateimagesresponse" + }, + { + "label": "VersionInfo", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L233", + "community": 12, + "norm_label": "versioninfo", + "id": "api_types_versioninfo" + }, + { + "label": "BuildingTypeInfo", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L241", + "community": 2, + "norm_label": "buildingtypeinfo", + "id": "api_types_buildingtypeinfo" + }, + { + "label": "MemberRoleInfo", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L249", + "community": 1, + "norm_label": "memberroleinfo", + "id": "api_types_memberroleinfo" + }, + { + "label": "PostSuggestionSkipReason", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L256", + "community": 0, + "norm_label": "postsuggestionskipreason", + "id": "api_types_postsuggestionskipreason" + }, + { + "label": "PostSuggestionPreviewResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L279", + "community": 2, + "norm_label": "postsuggestionpreviewresult", + "id": "api_types_postsuggestionpreviewresult" + }, + { + "label": "PostSuggestionStaleReason", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L284", + "community": 0, + "norm_label": "postsuggestionstalereason", + "id": "api_types_postsuggestionstalereason" + }, + { + "label": "PostSuggestionStaleEntry", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L291", + "community": 4, + "norm_label": "postsuggestionstaleentry", + "id": "api_types_postsuggestionstaleentry" + }, + { + "label": "PostSuggestionApplyResult", + "file_type": "code", + "source_file": "frontend/src/api/types.ts", + "source_location": "L298", + "community": 2, + "norm_label": "postsuggestionapplyresult", + "id": "api_types_postsuggestionapplyresult" + }, + { + "label": "getVersion()", + "file_type": "code", + "source_file": "frontend/src/api/version.ts", + "source_location": "L5", + "community": 12, + "norm_label": "getversion()", + "id": "api_version_getversion" + }, + { + "label": "useVersion()", + "file_type": "code", + "source_file": "frontend/src/api/version.ts", + "source_location": "L10", + "community": 12, + "norm_label": "useversion()", + "id": "api_version_useversion" + }, + { + "label": "CarouselSlide", + "file_type": "code", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L10", + "community": 19, + "norm_label": "carouselslide", + "id": "components_carousel_carouselslide" + }, + { + "label": "CarouselProps", + "file_type": "code", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L22", + "community": 19, + "norm_label": "carouselprops", + "id": "components_carousel_carouselprops" + }, + { + "label": "Carousel()", + "file_type": "code", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L35", + "community": 19, + "norm_label": "carousel()", + "id": "components_carousel_carousel" + }, + { + "label": "ChangelogDropdown.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L1", + "community": 26, + "norm_label": "changelogdropdown.tsx", + "id": "frontend_src_components_changelogdropdown_tsx" + }, + { + "label": "hasUnread()", + "file_type": "code", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L29", + "community": 26, + "norm_label": "hasunread()", + "id": "components_changelogdropdown_hasunread" + }, + { + "label": "DiscordSyncModal.tsx", + "file_type": "code", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "discordsyncmodal.tsx", + "id": "frontend_src_components_discordsyncmodal_tsx" + }, + { + "label": "ConfidenceVariant", + "file_type": "code", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L31", + "community": 1, + "norm_label": "confidencevariant", + "id": "components_discordsyncmodal_confidencevariant" + }, + { + "label": "CONFIDENCE_LABEL", + "file_type": "code", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L39", + "community": 1, + "norm_label": "confidence_label", + "id": "components_discordsyncmodal_confidence_label" + }, + { + "label": "Props", + "file_type": "code", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L11", + "community": 1, + "norm_label": "props", + "id": "components_groupbytoggle_props" + }, + { + "label": "GroupByToggle()", + "file_type": "code", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L31", + "community": 1, + "norm_label": "groupbytoggle()", + "id": "components_groupbytoggle_groupbytoggle" + }, + { + "label": "Layout.tsx", + "file_type": "code", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L1", + "community": 20, + "norm_label": "layout.tsx", + "id": "frontend_src_components_layout_tsx" + }, + { + "label": "navLinkClass()", + "file_type": "code", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L9", + "community": 20, + "norm_label": "navlinkclass()", + "id": "components_layout_navlinkclass" + }, + { + "label": "Layout()", + "file_type": "code", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L17", + "community": 20, + "norm_label": "layout()", + "id": "components_layout_layout" + }, + { + "label": "MemberWithMatches", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L57", + "community": 14, + "norm_label": "memberwithmatches", + "id": "components_poststab_memberwithmatches" + }, + { + "label": "DuplicateConditionMap", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L64", + "community": 14, + "norm_label": "duplicateconditionmap", + "id": "components_poststab_duplicateconditionmap" + }, + { + "label": "buildDuplicateConditionMap()", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L68", + "community": 14, + "norm_label": "buildduplicateconditionmap()", + "id": "components_poststab_buildduplicateconditionmap" + }, + { + "label": "findPostPosition()", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L85", + "community": 14, + "norm_label": "findpostposition()", + "id": "components_poststab_findpostposition" + }, + { + "label": "MemberAssignRow()", + "file_type": "code", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L100", + "community": 14, + "norm_label": "memberassignrow()", + "id": "components_poststab_memberassignrow" + }, + { + "label": "OutcomeFilter", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L30", + "community": 4, + "norm_label": "outcomefilter", + "id": "components_postsuggestionsmodal_outcomefilter" + }, + { + "label": "Classification", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L32", + "community": 4, + "norm_label": "classification", + "id": "components_postsuggestionsmodal_classification" + }, + { + "label": "PRIORITY_META", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L42", + "community": 4, + "norm_label": "priority_meta", + "id": "components_postsuggestionsmodal_priority_meta" + }, + { + "label": "getPriorityMeta()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L64", + "community": 4, + "norm_label": "getprioritymeta()", + "id": "components_postsuggestionsmodal_getprioritymeta" + }, + { + "label": "SKIP_REASON_LABEL", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L70", + "community": 4, + "norm_label": "skip_reason_label", + "id": "components_postsuggestionsmodal_skip_reason_label" + }, + { + "label": "STALE_REASON_LABEL", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L82", + "community": 4, + "norm_label": "stale_reason_label", + "id": "components_postsuggestionsmodal_stale_reason_label" + }, + { + "label": "TileConfig", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L93", + "community": 4, + "norm_label": "tileconfig", + "id": "components_postsuggestionsmodal_tileconfig" + }, + { + "label": "classify()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L159", + "community": 4, + "norm_label": "classify()", + "id": "components_postsuggestionsmodal_classify" + }, + { + "label": "Pill()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L169", + "community": 4, + "norm_label": "pill()", + "id": "components_postsuggestionsmodal_pill" + }, + { + "label": "ChangeCell()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L197", + "community": 4, + "norm_label": "changecell()", + "id": "components_postsuggestionsmodal_changecell" + }, + { + "label": "SkipIcon()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L248", + "community": 4, + "norm_label": "skipicon()", + "id": "components_postsuggestionsmodal_skipicon" + }, + { + "label": "ConditionCell()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L259", + "community": 4, + "norm_label": "conditioncell()", + "id": "components_postsuggestionsmodal_conditioncell" + }, + { + "label": "SummaryTile()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L290", + "community": 4, + "norm_label": "summarytile()", + "id": "components_postsuggestionsmodal_summarytile" + }, + { + "label": "StateLoading()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L345", + "community": 4, + "norm_label": "stateloading()", + "id": "components_postsuggestionsmodal_stateloading" + }, + { + "label": "StateEmpty()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L355", + "community": 4, + "norm_label": "stateempty()", + "id": "components_postsuggestionsmodal_stateempty" + }, + { + "label": "StateStaleConflict()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L379", + "community": 4, + "norm_label": "statestaleconflict()", + "id": "components_postsuggestionsmodal_statestaleconflict" + }, + { + "label": "ExpiryCountdown", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L476", + "community": 4, + "norm_label": "expirycountdown", + "id": "components_postsuggestionsmodal_expirycountdown" + }, + { + "label": "useExpiryCountdown()", + "file_type": "code", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L486", + "community": 4, + "norm_label": "useexpirycountdown()", + "id": "components_postsuggestionsmodal_useexpirycountdown" + }, + { + "label": "RequireAuth.tsx", + "file_type": "code", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L1", + "community": 20, + "norm_label": "requireauth.tsx", + "id": "frontend_src_components_requireauth_tsx" + }, + { + "label": "RequireAuth()", + "file_type": "code", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L4", + "community": 20, + "norm_label": "requireauth()", + "id": "components_requireauth_requireauth" + }, + { + "label": "SiegeLayout.tsx", + "file_type": "code", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "siegelayout.tsx", + "id": "frontend_src_components_siegelayout_tsx" + }, + { + "label": "SiegeLayout()", + "file_type": "code", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L13", + "community": 1, + "norm_label": "siegelayout()", + "id": "components_siegelayout_siegelayout" + }, + { + "label": "badge.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "badge.tsx", + "id": "frontend_src_components_ui_badge_tsx" + }, + { + "label": "badgeVariants", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L5", + "community": 1, + "norm_label": "badgevariants", + "id": "ui_badge_badgevariants" + }, + { + "label": "BadgeProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L29", + "community": 1, + "norm_label": "badgeprops", + "id": "ui_badge_badgeprops" + }, + { + "label": "Badge()", + "file_type": "code", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L34", + "community": 1, + "norm_label": "badge()", + "id": "ui_badge_badge" + }, + { + "label": "button.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "button.tsx", + "id": "frontend_src_components_ui_button_tsx" + }, + { + "label": "buttonVariants", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L6", + "community": 1, + "norm_label": "buttonvariants", + "id": "ui_button_buttonvariants" + }, + { + "label": "ButtonProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L36", + "community": 1, + "norm_label": "buttonprops", + "id": "ui_button_buttonprops" + }, + { + "label": "Button", + "file_type": "code", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L43", + "community": 1, + "norm_label": "button", + "id": "ui_button_button" + }, + { + "label": "Checkbox", + "file_type": "code", + "source_file": "frontend/src/components/ui/checkbox.tsx", + "source_location": "L6", + "community": 1, + "norm_label": "checkbox", + "id": "ui_checkbox_checkbox" + }, + { + "label": "dialog.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "dialog.tsx", + "id": "frontend_src_components_ui_dialog_tsx" + }, + { + "label": "DialogOverlay", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L11", + "community": 1, + "norm_label": "dialogoverlay", + "id": "ui_dialog_dialogoverlay" + }, + { + "label": "DialogContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L26", + "community": 1, + "norm_label": "dialogcontent", + "id": "ui_dialog_dialogcontent" + }, + { + "label": "DialogHeader()", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L50", + "community": 1, + "norm_label": "dialogheader()", + "id": "ui_dialog_dialogheader" + }, + { + "label": "DialogFooter()", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L66", + "community": 1, + "norm_label": "dialogfooter()", + "id": "ui_dialog_dialogfooter" + }, + { + "label": "DialogTitle", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L82", + "community": 1, + "norm_label": "dialogtitle", + "id": "ui_dialog_dialogtitle" + }, + { + "label": "DialogDescription", + "file_type": "code", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L97", + "community": 1, + "norm_label": "dialogdescription", + "id": "ui_dialog_dialogdescription" + }, + { + "label": "dropdown-menu.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L1", + "community": 23, + "norm_label": "dropdown-menu.tsx", + "id": "frontend_src_components_ui_dropdown_menu_tsx" + }, + { + "label": "DropdownMenuSubTrigger", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L20", + "community": 23, + "norm_label": "dropdownmenusubtrigger", + "id": "ui_dropdown_menu_dropdownmenusubtrigger" + }, + { + "label": "DropdownMenuSubContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L42", + "community": 23, + "norm_label": "dropdownmenusubcontent", + "id": "ui_dropdown_menu_dropdownmenusubcontent" + }, + { + "label": "DropdownMenuContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L58", + "community": 26, + "norm_label": "dropdownmenucontent", + "id": "ui_dropdown_menu_dropdownmenucontent" + }, + { + "label": "DropdownMenuItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L76", + "community": 23, + "norm_label": "dropdownmenuitem", + "id": "ui_dropdown_menu_dropdownmenuitem" + }, + { + "label": "DropdownMenuCheckboxItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L94", + "community": 23, + "norm_label": "dropdownmenucheckboxitem", + "id": "ui_dropdown_menu_dropdownmenucheckboxitem" + }, + { + "label": "DropdownMenuRadioItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L118", + "community": 23, + "norm_label": "dropdownmenuradioitem", + "id": "ui_dropdown_menu_dropdownmenuradioitem" + }, + { + "label": "DropdownMenuLabel", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L140", + "community": 23, + "norm_label": "dropdownmenulabel", + "id": "ui_dropdown_menu_dropdownmenulabel" + }, + { + "label": "DropdownMenuSeparator", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L158", + "community": 23, + "norm_label": "dropdownmenuseparator", + "id": "ui_dropdown_menu_dropdownmenuseparator" + }, + { + "label": "DropdownMenuShortcut()", + "file_type": "code", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L170", + "community": 23, + "norm_label": "dropdownmenushortcut()", + "id": "ui_dropdown_menu_dropdownmenushortcut" + }, + { + "label": "input.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "input.tsx", + "id": "frontend_src_components_ui_input_tsx" + }, + { + "label": "InputProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L4", + "community": 1, + "norm_label": "inputprops", + "id": "ui_input_inputprops" + }, + { + "label": "Input", + "file_type": "code", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L6", + "community": 1, + "norm_label": "input", + "id": "ui_input_input" + }, + { + "label": "label.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "label.tsx", + "id": "frontend_src_components_ui_label_tsx" + }, + { + "label": "Label", + "file_type": "code", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L5", + "community": 1, + "norm_label": "label", + "id": "ui_label_label" + }, + { + "label": "select.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "select.tsx", + "id": "frontend_src_components_ui_select_tsx" + }, + { + "label": "SelectTrigger", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L10", + "community": 1, + "norm_label": "selecttrigger", + "id": "ui_select_selecttrigger" + }, + { + "label": "SelectScrollUpButton", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L30", + "community": 1, + "norm_label": "selectscrollupbutton", + "id": "ui_select_selectscrollupbutton" + }, + { + "label": "SelectScrollDownButton", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L47", + "community": 1, + "norm_label": "selectscrolldownbutton", + "id": "ui_select_selectscrolldownbutton" + }, + { + "label": "SelectContent", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L65", + "community": 1, + "norm_label": "selectcontent", + "id": "ui_select_selectcontent" + }, + { + "label": "SelectLabel", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L97", + "community": 1, + "norm_label": "selectlabel", + "id": "ui_select_selectlabel" + }, + { + "label": "SelectItem", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L109", + "community": 1, + "norm_label": "selectitem", + "id": "ui_select_selectitem" + }, + { + "label": "SelectSeparator", + "file_type": "code", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L131", + "community": 1, + "norm_label": "selectseparator", + "id": "ui_select_selectseparator" + }, + { + "label": "table.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "table.tsx", + "id": "frontend_src_components_ui_table_tsx" + }, + { + "label": "Table", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L4", + "community": 1, + "norm_label": "table", + "id": "ui_table_table" + }, + { + "label": "TableBody", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L26", + "community": 1, + "norm_label": "tablebody", + "id": "ui_table_tablebody" + }, + { + "label": "TableFooter", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L38", + "community": 1, + "norm_label": "tablefooter", + "id": "ui_table_tablefooter" + }, + { + "label": "TableRow", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L53", + "community": 1, + "norm_label": "tablerow", + "id": "ui_table_tablerow" + }, + { + "label": "TableHead", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L68", + "community": 1, + "norm_label": "tablehead", + "id": "ui_table_tablehead" + }, + { + "label": "TableCell", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L83", + "community": 1, + "norm_label": "tablecell", + "id": "ui_table_tablecell" + }, + { + "label": "TableCaption", + "file_type": "code", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L98", + "community": 1, + "norm_label": "tablecaption", + "id": "ui_table_tablecaption" + }, + { + "label": "textarea.tsx", + "file_type": "code", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "textarea.tsx", + "id": "frontend_src_components_ui_textarea_tsx" + }, + { + "label": "TextareaProps", + "file_type": "code", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L4", + "community": 1, + "norm_label": "textareaprops", + "id": "ui_textarea_textareaprops" + }, + { + "label": "Textarea", + "file_type": "code", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L6", + "community": 1, + "norm_label": "textarea", + "id": "ui_textarea_textarea" + }, + { + "label": "AuthContext.tsx", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L1", + "community": 25, + "norm_label": "authcontext.tsx", + "id": "frontend_src_context_authcontext_tsx" + }, + { + "label": "AuthUser", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L11", + "community": 25, + "norm_label": "authuser", + "id": "context_authcontext_authuser" + }, + { + "label": "AuthContextValue", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L18", + "community": 25, + "norm_label": "authcontextvalue", + "id": "context_authcontext_authcontextvalue" + }, + { + "label": "AuthContext", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L25", + "community": 25, + "norm_label": "authcontext", + "id": "context_authcontext_authcontext" + }, + { + "label": "AuthProvider()", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L27", + "community": 25, + "norm_label": "authprovider()", + "id": "context_authcontext_authprovider" + }, + { + "label": "useAuth()", + "file_type": "code", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L63", + "community": 20, + "norm_label": "useauth()", + "id": "context_authcontext_useauth" + }, + { + "label": "buildingColors.ts", + "file_type": "code", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L1", + "community": 13, + "norm_label": "buildingcolors.ts", + "id": "frontend_src_lib_buildingcolors_ts" + }, + { + "label": "BuildingColorClass", + "file_type": "code", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L3", + "community": 13, + "norm_label": "buildingcolorclass", + "id": "lib_buildingcolors_buildingcolorclass" + }, + { + "label": "BUILDING_LABELS", + "file_type": "code", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L49", + "community": 13, + "norm_label": "building_labels", + "id": "lib_buildingcolors_building_labels" + }, + { + "label": "groupPostConditions.ts", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L1", + "community": 1, + "norm_label": "grouppostconditions.ts", + "id": "frontend_src_lib_grouppostconditions_ts" + }, + { + "label": "GroupByMode", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L17", + "community": 1, + "norm_label": "groupbymode", + "id": "lib_grouppostconditions_groupbymode" + }, + { + "label": "ConditionGroup", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L20", + "community": 1, + "norm_label": "conditiongroup", + "id": "lib_grouppostconditions_conditiongroup" + }, + { + "label": "groupByLevel()", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L53", + "community": 1, + "norm_label": "groupbylevel()", + "id": "lib_grouppostconditions_groupbylevel" + }, + { + "label": "groupByType()", + "file_type": "code", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L74", + "community": 1, + "norm_label": "groupbytype()", + "id": "lib_grouppostconditions_groupbytype" + }, + { + "label": "post-priority.ts", + "file_type": "code", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L1", + "community": 14, + "norm_label": "post-priority.ts", + "id": "frontend_src_lib_post_priority_ts" + }, + { + "label": "priorityLabel()", + "file_type": "code", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L23", + "community": 14, + "norm_label": "prioritylabel()", + "id": "lib_post_priority_prioritylabel" + }, + { + "label": "priorityBadgeColor()", + "file_type": "code", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L27", + "community": 14, + "norm_label": "prioritybadgecolor()", + "id": "lib_post_priority_prioritybadgecolor" + }, + { + "label": "useGroupByPreference.ts", + "file_type": "code", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L1", + "community": 1, + "norm_label": "usegroupbypreference.ts", + "id": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "label": "VALID_MODES", + "file_type": "code", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L14", + "community": 1, + "norm_label": "valid_modes", + "id": "lib_usegroupbypreference_valid_modes" + }, + { + "label": "utils.ts", + "file_type": "code", + "source_file": "frontend/src/lib/utils.ts", + "source_location": "L1", + "community": 1, + "norm_label": "utils.ts", + "id": "frontend_src_lib_utils_ts" + }, + { + "label": "cn()", + "file_type": "code", + "source_file": "frontend/src/lib/utils.ts", + "source_location": "L4", + "community": 1, + "norm_label": "cn()", + "id": "lib_utils_cn" + }, + { + "label": "ROLE_LABELS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L58", + "community": 14, + "norm_label": "role_labels", + "id": "pages_boardpage_role_labels" + }, + { + "label": "ROLE_PRIORITY", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L65", + "community": 14, + "norm_label": "role_priority", + "id": "pages_boardpage_role_priority" + }, + { + "label": "ROLE_COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L72", + "community": 13, + "norm_label": "role_colors", + "id": "pages_boardpage_role_colors" + }, + { + "label": "ROLE_BADGE_COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L79", + "community": 14, + "norm_label": "role_badge_colors", + "id": "pages_boardpage_role_badge_colors" + }, + { + "label": "ROLE_CHIP_COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L87", + "community": 13, + "norm_label": "role_chip_colors", + "id": "pages_boardpage_role_chip_colors" + }, + { + "label": "POWER_LABELS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L94", + "community": 14, + "norm_label": "power_labels", + "id": "pages_boardpage_power_labels" + }, + { + "label": "BUILDING_TYPE_ORDER", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L103", + "community": 13, + "norm_label": "building_type_order", + "id": "pages_boardpage_building_type_order" + }, + { + "label": "DraggableMemberRow()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L254", + "community": 13, + "norm_label": "draggablememberrow()", + "id": "pages_boardpage_draggablememberrow" + }, + { + "label": "MemberDragOverlay()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L322", + "community": 13, + "norm_label": "memberdragoverlay()", + "id": "pages_boardpage_memberdragoverlay" + }, + { + "label": "RoleFilter", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L347", + "community": 13, + "norm_label": "rolefilter", + "id": "pages_boardpage_rolefilter" + }, + { + "label": "ROLE_FILTER_OPTIONS", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L349", + "community": 13, + "norm_label": "role_filter_options", + "id": "pages_boardpage_role_filter_options" + }, + { + "label": "MemberBucket()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L357", + "community": 13, + "norm_label": "memberbucket()", + "id": "pages_boardpage_memberbucket" + }, + { + "label": "BuildingTableRow()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L457", + "community": 13, + "norm_label": "buildingtablerow()", + "id": "pages_boardpage_buildingtablerow" + }, + { + "label": "BuildingTypeSection()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L553", + "community": 13, + "norm_label": "buildingtypesection()", + "id": "pages_boardpage_buildingtypesection" + }, + { + "label": "ConditionalDndContext()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L679", + "community": 13, + "norm_label": "conditionaldndcontext()", + "id": "pages_boardpage_conditionaldndcontext" + }, + { + "label": "ActiveTab", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L711", + "community": 13, + "norm_label": "activetab", + "id": "pages_boardpage_activetab" + }, + { + "label": "BoardPage()", + "file_type": "code", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L713", + "community": 13, + "norm_label": "boardpage()", + "id": "pages_boardpage_boardpage" + }, + { + "label": "formatPosition()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L17", + "community": 1, + "norm_label": "formatposition()", + "id": "pages_comparisonpage_formatposition" + }, + { + "label": "PositionTag()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L26", + "community": 1, + "norm_label": "positiontag()", + "id": "pages_comparisonpage_positiontag" + }, + { + "label": "MemberPositionsCell()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L41", + "community": 1, + "norm_label": "memberpositionscell()", + "id": "pages_comparisonpage_memberpositionscell" + }, + { + "label": "ComparisonPage()", + "file_type": "code", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L67", + "community": 1, + "norm_label": "comparisonpage()", + "id": "pages_comparisonpage_comparisonpage" + }, + { + "label": "LandingPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L1", + "community": 19, + "norm_label": "landingpage.tsx", + "id": "frontend_src_pages_landingpage_tsx" + }, + { + "label": "LandingOrSieges()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L10", + "community": 20, + "norm_label": "landingorsieges()", + "id": "pages_landingpage_landingorsieges" + }, + { + "label": "SLIDES", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L26", + "community": 19, + "norm_label": "slides", + "id": "pages_landingpage_slides" + }, + { + "label": "ShieldIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L68", + "community": 19, + "norm_label": "shieldicon()", + "id": "pages_landingpage_shieldicon" + }, + { + "label": "GitHubIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L88", + "community": 19, + "norm_label": "githubicon()", + "id": "pages_landingpage_githubicon" + }, + { + "label": "CheckIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L108", + "community": 19, + "norm_label": "checkicon()", + "id": "pages_landingpage_checkicon" + }, + { + "label": "ExternalLinkIcon()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L128", + "community": 19, + "norm_label": "externallinkicon()", + "id": "pages_landingpage_externallinkicon" + }, + { + "label": "COLORS", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L150", + "community": 19, + "norm_label": "colors", + "id": "pages_landingpage_colors" + }, + { + "label": "LandingPage()", + "file_type": "code", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L157", + "community": 19, + "norm_label": "landingpage()", + "id": "pages_landingpage_landingpage" + }, + { + "label": "ERROR_MESSAGES", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L7", + "community": 27, + "norm_label": "error_messages", + "id": "pages_loginpage_error_messages" + }, + { + "label": "MEMBERSHIP_ERRORS", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L15", + "community": 27, + "norm_label": "membership_errors", + "id": "pages_loginpage_membership_errors" + }, + { + "label": "MobileBanner()", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L18", + "community": 27, + "norm_label": "mobilebanner()", + "id": "pages_loginpage_mobilebanner" + }, + { + "label": "LoginPage()", + "file_type": "code", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L34", + "community": 27, + "norm_label": "loginpage()", + "id": "pages_loginpage_loginpage" + }, + { + "label": "MemberDetailPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "memberdetailpage.tsx", + "id": "frontend_src_pages_memberdetailpage_tsx" + }, + { + "label": "ROLE_OPTIONS", + "file_type": "code", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L41", + "community": 1, + "norm_label": "role_options", + "id": "pages_memberdetailpage_role_options" + }, + { + "label": "RoleBadgeVariant", + "file_type": "code", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L43", + "community": 1, + "norm_label": "rolebadgevariant", + "id": "pages_memberspage_rolebadgevariant" + }, + { + "label": "ROLE_VARIANTS", + "file_type": "code", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L45", + "community": 1, + "norm_label": "role_variants", + "id": "pages_memberspage_role_variants" + }, + { + "label": "MembersPage()", + "file_type": "code", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L52", + "community": 1, + "norm_label": "memberspage()", + "id": "pages_memberspage_memberspage" + }, + { + "label": "PostPrioritiesPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "postprioritiespage.tsx", + "id": "frontend_src_pages_postprioritiespage_tsx" + }, + { + "label": "DescriptionCell()", + "file_type": "code", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L30", + "community": 1, + "norm_label": "descriptioncell()", + "id": "pages_postprioritiespage_descriptioncell" + }, + { + "label": "Tab", + "file_type": "code", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L64", + "community": 1, + "norm_label": "tab", + "id": "pages_postprioritiespage_tab" + }, + { + "label": "PostRow()", + "file_type": "code", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L30", + "community": 1, + "norm_label": "postrow()", + "id": "pages_postspage_postrow" + }, + { + "label": "PostsPage()", + "file_type": "code", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L265", + "community": 1, + "norm_label": "postspage()", + "id": "pages_postspage_postspage" + }, + { + "label": "nextTuesdayFrom()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L19", + "community": 1, + "norm_label": "nexttuesdayfrom()", + "id": "pages_siegecreatepage_nexttuesdayfrom" + }, + { + "label": "formatDateLocal()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L27", + "community": 1, + "norm_label": "formatdatelocal()", + "id": "pages_siegecreatepage_formatdatelocal" + }, + { + "label": "suggestNextSiegeDate()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L34", + "community": 1, + "norm_label": "suggestnextsiegedate()", + "id": "pages_siegecreatepage_suggestnextsiegedate" + }, + { + "label": "SiegeCreatePage()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L46", + "community": 1, + "norm_label": "siegecreatepage()", + "id": "pages_siegecreatepage_siegecreatepage" + }, + { + "label": "AttackDaySelect()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L41", + "community": 1, + "norm_label": "attackdayselect()", + "id": "pages_siegememberspage_attackdayselect" + }, + { + "label": "SiegeSettingsPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "siegesettingspage.tsx", + "id": "frontend_src_pages_siegesettingspage_tsx" + }, + { + "label": "SiegesPage.tsx", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L1", + "community": 1, + "norm_label": "siegespage.tsx", + "id": "frontend_src_pages_siegespage_tsx" + }, + { + "label": "StatusBadgeVariant", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L17", + "community": 1, + "norm_label": "statusbadgevariant", + "id": "pages_siegespage_statusbadgevariant" + }, + { + "label": "STATUS_VARIANTS", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L19", + "community": 1, + "norm_label": "status_variants", + "id": "pages_siegespage_status_variants" + }, + { + "label": "STATUS_LABELS", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L25", + "community": 1, + "norm_label": "status_labels", + "id": "pages_siegespage_status_labels" + }, + { + "label": "SiegesPage()", + "file_type": "code", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L31", + "community": 1, + "norm_label": "siegespage()", + "id": "pages_siegespage_siegespage" + }, + { + "label": "UI_LIBRARIES", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L6", + "community": 12, + "norm_label": "ui_libraries", + "id": "pages_systempage_ui_libraries" + }, + { + "label": "SectionPanel()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L16", + "community": 12, + "norm_label": "sectionpanel()", + "id": "pages_systempage_sectionpanel" + }, + { + "label": "DataRow()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L47", + "community": 12, + "norm_label": "datarow()", + "id": "pages_systempage_datarow" + }, + { + "label": "LibraryRow()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L80", + "community": 12, + "norm_label": "libraryrow()", + "id": "pages_systempage_libraryrow" + }, + { + "label": "SystemPage()", + "file_type": "code", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L100", + "community": 12, + "norm_label": "systempage()", + "id": "pages_systempage_systempage" + }, + { + "label": "changelog.d.ts", + "file_type": "code", + "source_file": "frontend/src/types/changelog.d.ts", + "source_location": "L1", + "community": 37, + "norm_label": "changelog.d.ts", + "id": "frontend_src_types_changelog_d_ts" + }, + { + "label": "ChangelogEntry", + "file_type": "code", + "source_file": "frontend/src/types/changelog.d.ts", + "source_location": "L13", + "community": 37, + "norm_label": "changelogentry", + "id": "types_changelog_d_changelogentry" + }, + { + "label": "bootstrap-db.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-db.ps1", + "source_location": "L1", + "community": 46, + "norm_label": "bootstrap-db.ps1", + "id": "scripts_bootstrap_db_ps1" + }, + { + "label": "bootstrap-excel-import.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-excel-import.ps1", + "source_location": "L1", + "community": 5, + "norm_label": "bootstrap-excel-import.ps1", + "id": "scripts_bootstrap_excel_import_ps1" + }, + { + "label": "bootstrap-images.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-images.ps1", + "source_location": "L1", + "community": 5, + "norm_label": "bootstrap-images.ps1", + "id": "scripts_bootstrap_images_ps1" + }, + { + "label": "bootstrap-keyvault.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-keyvault.ps1", + "source_location": "L1", + "community": 47, + "norm_label": "bootstrap-keyvault.ps1", + "id": "scripts_bootstrap_keyvault_ps1" + }, + { + "label": "bootstrap-reimport.ps1", + "file_type": "code", + "source_file": "scripts/bootstrap-reimport.ps1", + "source_location": "L1", + "community": 48, + "norm_label": "bootstrap-reimport.ps1", + "id": "scripts_bootstrap_reimport_ps1" + }, + { + "label": "generate-origin-pfx.ps1", + "file_type": "code", + "source_file": "scripts/generate-origin-pfx.ps1", + "source_location": "L1", + "community": 49, + "norm_label": "generate-origin-pfx.ps1", + "id": "scripts_generate_origin_pfx_ps1" + }, + { + "label": "rebuild.ps1", + "file_type": "code", + "source_file": "scripts/rebuild.ps1", + "source_location": "L1", + "community": 50, + "norm_label": "rebuild.ps1", + "id": "scripts_rebuild_ps1" + }, + { + "label": "import_excel.py", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1", + "community": 0, + "norm_label": "import_excel.py", + "id": "scripts_excel_import_import_excel_py" + }, + { + "label": "ParsedMember", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L160", + "community": 0, + "norm_label": "parsedmember", + "id": "excel_import_import_excel_parsedmember" + }, + { + "label": "ParsedAssignment", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L169", + "community": 0, + "norm_label": "parsedassignment", + "id": "excel_import_import_excel_parsedassignment" + }, + { + "label": "ParsedReserve", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L178", + "community": 0, + "norm_label": "parsedreserve", + "id": "excel_import_import_excel_parsedreserve" + }, + { + "label": "ParsedPostConfig", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L185", + "community": 0, + "norm_label": "parsedpostconfig", + "id": "excel_import_import_excel_parsedpostconfig" + }, + { + "label": "ParsedPostConditions", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L192", + "community": 0, + "norm_label": "parsedpostconditions", + "id": "excel_import_import_excel_parsedpostconditions" + }, + { + "label": "ImportStats", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L198", + "community": 0, + "norm_label": "importstats", + "id": "excel_import_import_excel_importstats" + }, + { + "label": "parse_filename_date()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L224", + "community": 0, + "norm_label": "parse_filename_date()", + "id": "excel_import_import_excel_parse_filename_date" + }, + { + "label": "map_role()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L236", + "community": 0, + "norm_label": "map_role()", + "id": "excel_import_import_excel_map_role" + }, + { + "label": "map_building_alias()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L241", + "community": 0, + "norm_label": "map_building_alias()", + "id": "excel_import_import_excel_map_building_alias" + }, + { + "label": "parse_members_sheet()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L265", + "community": 0, + "norm_label": "parse_members_sheet()", + "id": "excel_import_import_excel_parse_members_sheet" + }, + { + "label": "parse_assignments_sheet()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L337", + "community": 0, + "norm_label": "parse_assignments_sheet()", + "id": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "label": "parse_reserves_sheet()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L445", + "community": 0, + "norm_label": "parse_reserves_sheet()", + "id": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "label": "parse_posts_sheet_config()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L489", + "community": 0, + "norm_label": "parse_posts_sheet_config()", + "id": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "label": "parse_posts_sheet_conditions()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L534", + "community": 0, + "norm_label": "parse_posts_sheet_conditions()", + "id": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "label": "build_group_structure()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L570", + "community": 0, + "norm_label": "build_group_structure()", + "id": "excel_import_import_excel_build_group_structure" + }, + { + "label": "compute_building_group_structure()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L592", + "community": 0, + "norm_label": "compute_building_group_structure()", + "id": "excel_import_import_excel_compute_building_group_structure" + }, + { + "label": "infer_building_level()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L677", + "community": 0, + "norm_label": "infer_building_level()", + "id": "excel_import_import_excel_infer_building_level" + }, + { + "label": "create_building_with_groups_and_positions()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L719", + "community": 0, + "norm_label": "create_building_with_groups_and_positions()", + "id": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "label": "import_file()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L776", + "community": 0, + "norm_label": "import_file()", + "id": "excel_import_import_excel_import_file" + }, + { + "label": "collect_xlsm_files()", + "file_type": "code", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1146", + "community": 7, + "norm_label": "collect_xlsm_files()", + "id": "excel_import_import_excel_collect_xlsm_files" + }, + { + "label": "Excel import script for Raid Shadow Legends Siege Assignment Web App. Imports h", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1", + "community": 0, + "norm_label": "excel import script for raid shadow legends siege assignment web app. imports h", + "id": "excel_import_import_excel_rationale_1" + }, + { + "label": "Extract the siege date from a filename like clan_siege_MM_DD_YYYY.xlsm.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L225", + "community": 0, + "norm_label": "extract the siege date from a filename like clan_siege_mm_dd_yyyy.xlsm.", + "id": "excel_import_import_excel_rationale_225" + }, + { + "label": "Map a display role string to its enum value.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L237", + "community": 0, + "norm_label": "map a display role string to its enum value.", + "id": "excel_import_import_excel_rationale_237" + }, + { + "label": "Map a raw building type string to its canonical enum value and optional building", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L242", + "community": 0, + "norm_label": "map a raw building type string to its canonical enum value and optional building", + "id": "excel_import_import_excel_rationale_242" + }, + { + "label": "Parse the 'Members' worksheet. Expected columns: A: name, B: level (i", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L266", + "community": 0, + "norm_label": "parse the 'members' worksheet. expected columns: a: name, b: level (i", + "id": "excel_import_import_excel_rationale_266" + }, + { + "label": "Parse the 'Assignments' worksheet in its visual grid format. Layout:", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L338", + "community": 0, + "norm_label": "parse the 'assignments' worksheet in its visual grid format. layout:", + "id": "excel_import_import_excel_rationale_338" + }, + { + "label": "Parse the 'Reserves' worksheet. Expected columns: A: member_name, B:", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L446", + "community": 0, + "norm_label": "parse the 'reserves' worksheet. expected columns: a: member_name, b:", + "id": "excel_import_import_excel_rationale_446" + }, + { + "label": "Parse post priority and descriptions from the Posts sheet, rows 2\u201317, columns B\u2013", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L490", + "community": 0, + "norm_label": "parse post priority and descriptions from the posts sheet, rows 2\u201317, columns b\u2013", + "id": "excel_import_import_excel_rationale_490" + }, + { + "label": "Parse post active conditions from the Posts sheet, rows 34\u201351, columns D\u2013F.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L535", + "community": 0, + "norm_label": "parse post active conditions from the posts sheet, rows 34\u201351, columns d\u2013f.", + "id": "excel_import_import_excel_rationale_535" + }, + { + "label": "Return a list of slot_counts for each group of the given building type. e.g", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L571", + "community": 0, + "norm_label": "return a list of slot_counts for each group of the given building type. e.g", + "id": "excel_import_import_excel_rationale_571" + }, + { + "label": "Scan the given list of ParsedAssignments and return {group_number: slot_count}", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L597", + "community": 0, + "norm_label": "scan the given list of parsedassignments and return {group_number: slot_count}", + "id": "excel_import_import_excel_rationale_597" + }, + { + "label": "Sum all slot counts in group_structure and look up the level for that building t", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L678", + "community": 0, + "norm_label": "sum all slot counts in group_structure and look up the level for that building t", + "id": "excel_import_import_excel_rationale_678" + }, + { + "label": "Return (member, created). Looks up by name (case-insensitive). Creates if no", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L691", + "community": 7, + "norm_label": "return (member, created). looks up by name (case-insensitive). creates if no", + "id": "excel_import_import_excel_rationale_691" + }, + { + "label": "Create a Building, its BuildingGroups, and their Positions. Uses the provid", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L727", + "community": 0, + "norm_label": "create a building, its buildinggroups, and their positions. uses the provid", + "id": "excel_import_import_excel_rationale_727" + }, + { + "label": "Import a single .xlsm file. Returns ImportStats.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L781", + "community": 0, + "norm_label": "import a single .xlsm file. returns importstats.", + "id": "excel_import_import_excel_rationale_781" + }, + { + "label": "Import a list of .xlsm files into the database.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1073", + "community": 0, + "norm_label": "import a list of .xlsm files into the database.", + "id": "excel_import_import_excel_rationale_1073" + }, + { + "label": "Return a sorted list of .xlsm files from a file path or directory.", + "file_type": "rationale", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1147", + "community": 7, + "norm_label": "return a sorted list of .xlsm files from a file path or directory.", + "id": "excel_import_import_excel_rationale_1147" + }, + { + "label": "run-graphify-dry-run.ps1", + "file_type": "code", + "source_file": "scripts/experiments/run-graphify-dry-run.ps1", + "source_location": "L1", + "community": 51, + "norm_label": "run-graphify-dry-run.ps1", + "id": "scripts_experiments_run_graphify_dry_run_ps1" + }, + { + "label": "CHANGELOG v1.2.0", + "file_type": "document", + "source_file": "CHANGELOG.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "changelog v1.2.0", + "id": "changelog_v120" + }, + { + "label": "CHANGELOG v1.1.0", + "file_type": "document", + "source_file": "CHANGELOG.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "changelog v1.1.0", + "id": "changelog_v110" + }, + { + "label": "CHANGELOG v1.0.0", + "file_type": "document", + "source_file": "CHANGELOG.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "changelog v1.0.0", + "id": "changelog_v100" + }, + { + "label": "Suggest Post Assignments Feature", + "file_type": "concept", + "source_file": "CHANGELOG.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "suggest post assignments feature", + "id": "changelog_suggest_post_assignments" + }, + { + "label": "Group Post Conditions by Level or Type", + "file_type": "concept", + "source_file": "CHANGELOG.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "group post conditions by level or type", + "id": "changelog_group_post_conditions" + }, + { + "label": "Rate-limited Discord OAuth2 Endpoints", + "file_type": "concept", + "source_file": "CHANGELOG.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "rate-limited discord oauth2 endpoints", + "id": "changelog_rate_limited_discord_oauth" + }, + { + "label": "Project Overview (CLAUDE.md)", + "file_type": "document", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "project overview (claude.md)", + "id": "claude_project_overview" + }, + { + "label": "Backend Service (FastAPI)", + "file_type": "concept", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "backend service (fastapi)", + "id": "claude_backend_service" + }, + { + "label": "Frontend Service (React)", + "file_type": "concept", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "frontend service (react)", + "id": "claude_frontend_service" + }, + { + "label": "Bot Service (discord.py + FastAPI sidecar)", + "file_type": "concept", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "bot service (discord.py + fastapi sidecar)", + "id": "claude_bot_service" + }, + { + "label": "Discord OAuth2 Auth Flow", + "file_type": "concept", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "discord oauth2 auth flow", + "id": "claude_discord_oauth2" + }, + { + "label": "PostgreSQL Database", + "file_type": "concept", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "postgresql database", + "id": "claude_postgresql" + }, + { + "label": "Alembic Migrations", + "file_type": "concept", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "alembic migrations", + "id": "claude_alembic" + }, + { + "label": "Playwright Image Generation", + "file_type": "concept", + "source_file": "CLAUDE.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "playwright image generation", + "id": "claude_playwright" + }, + { + "label": "Docker Compose Stack", + "file_type": "code", + "source_file": "docker-compose.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "docker compose stack", + "id": "dockercompose_stack" + }, + { + "label": "PostgreSQL Service (docker-compose)", + "file_type": "code", + "source_file": "docker-compose.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "postgresql service (docker-compose)", + "id": "dockercompose_postgres" + }, + { + "label": "Backend Service (docker-compose)", + "file_type": "code", + "source_file": "docker-compose.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "backend service (docker-compose)", + "id": "dockercompose_backend" + }, + { + "label": "Frontend Service (docker-compose)", + "file_type": "code", + "source_file": "docker-compose.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "frontend service (docker-compose)", + "id": "dockercompose_frontend" + }, + { + "label": "Bot Service (docker-compose)", + "file_type": "code", + "source_file": "docker-compose.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "bot service (docker-compose)", + "id": "dockercompose_bot" + }, + { + "label": "Docker Compose Production Overlay", + "file_type": "code", + "source_file": "docker-compose.prod.yml", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "docker compose production overlay", + "id": "dockercomposeprod_overlay" + }, + { + "label": "Backend Requirements", + "file_type": "code", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "backend requirements", + "id": "backend_requirements" + }, + { + "label": "FastAPI", + "file_type": "concept", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "fastapi", + "id": "backend_fastapi" + }, + { + "label": "SQLAlchemy", + "file_type": "concept", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "sqlalchemy", + "id": "backend_sqlalchemy" + }, + { + "label": "asyncpg", + "file_type": "concept", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "asyncpg", + "id": "backend_asyncpg" + }, + { + "label": "PyJWT", + "file_type": "concept", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "pyjwt", + "id": "backend_pyjwt" + }, + { + "label": "slowapi", + "file_type": "concept", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "slowapi", + "id": "backend_slowapi" + }, + { + "label": "Playwright (backend dep)", + "file_type": "concept", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "playwright (backend dep)", + "id": "backend_playwright_dep" + }, + { + "label": "OpenTelemetry / Azure Monitor", + "file_type": "concept", + "source_file": "backend/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "opentelemetry / azure monitor", + "id": "backend_otel" + }, + { + "label": "Bot Requirements", + "file_type": "code", + "source_file": "bot/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "bot requirements", + "id": "bot_requirements" + }, + { + "label": "Bot Dev Requirements", + "file_type": "code", + "source_file": "bot/requirements-dev.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "bot dev requirements", + "id": "bot_requirements_dev" + }, + { + "label": "discord.py", + "file_type": "concept", + "source_file": "bot/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "discord.py", + "id": "bot_discordpy" + }, + { + "label": "FastAPI (bot sidecar)", + "file_type": "concept", + "source_file": "bot/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "fastapi (bot sidecar)", + "id": "bot_fastapi" + }, + { + "label": "Implementation Plan", + "file_type": "document", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "implementation plan", + "id": "impl_plan" + }, + { + "label": "Phase 0: Foundation", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "phase 0: foundation", + "id": "impl_plan_phase0" + }, + { + "label": "Phase 1: Database Schema", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "phase 1: database schema", + "id": "impl_plan_phase1" + }, + { + "label": "Phase 2: Core Backend CRUD", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "phase 2: core backend crud", + "id": "impl_plan_phase2" + }, + { + "label": "Phase 3: Assignment Board Backend", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "phase 3: assignment board backend", + "id": "impl_plan_phase3" + }, + { + "label": "Phase 4: Business Logic", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "phase 4: business logic", + "id": "impl_plan_phase4" + }, + { + "label": "Phase 5: Discord Bot + Image Gen", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "phase 5: discord bot + image gen", + "id": "impl_plan_phase5" + }, + { + "label": "Phase 6: Frontend Core", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "phase 6: frontend core", + "id": "impl_plan_phase6" + }, + { + "label": "BuildingTypeConfig Reference", + "file_type": "concept", + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "buildingtypeconfig reference", + "id": "impl_plan_buildingtypeconfig" + }, + { + "label": "Operations Runbook", + "file_type": "document", + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "operations runbook", + "id": "runbook" + }, + { + "label": "Azure Container Apps", + "file_type": "concept", + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "azure container apps", + "id": "runbook_azure_container_apps" + }, + { + "label": "Azure Key Vault", + "file_type": "concept", + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "azure key vault", + "id": "runbook_azure_keyvault" + }, + { + "label": "Azure PostgreSQL Flexible Server", + "file_type": "concept", + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "azure postgresql flexible server", + "id": "runbook_azure_postgresql" + }, + { + "label": "Application Insights / OpenTelemetry", + "file_type": "concept", + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "application insights / opentelemetry", + "id": "runbook_app_insights" + }, + { + "label": "Log Analytics Workspace", + "file_type": "concept", + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "log analytics workspace", + "id": "runbook_log_analytics" + }, + { + "label": "Web Design Document", + "file_type": "document", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "web design document", + "id": "wdd" + }, + { + "label": "Siege Data Model", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "siege data model", + "id": "wdd_siege_model" + }, + { + "label": "Building Data Model", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "building data model", + "id": "wdd_building_model" + }, + { + "label": "Member Data Model", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "member data model", + "id": "wdd_member_model" + }, + { + "label": "Position Data Model", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "position data model", + "id": "wdd_position_model" + }, + { + "label": "Post Data Model", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "post data model", + "id": "wdd_post_model" + }, + { + "label": "PostCondition Data Model", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "postcondition data model", + "id": "wdd_postcondition_model" + }, + { + "label": "16 Validation Rules", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "16 validation rules", + "id": "wdd_validation_rules" + }, + { + "label": "Auto-fill Algorithm", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "auto-fill algorithm", + "id": "wdd_autofill_algorithm" + }, + { + "label": "Attack Day Algorithm", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "attack day algorithm", + "id": "wdd_attack_day_algorithm" + }, + { + "label": "Discord OAuth2 Authentication Spec", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "discord oauth2 authentication spec", + "id": "wdd_discord_auth" + }, + { + "label": "Notify Members Data Flow", + "file_type": "concept", + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "notify members data flow", + "id": "wdd_notification_flow" + }, + { + "label": "Siege Building Levels Reference", + "file_type": "document", + "source_file": "docs/siege_levels.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "siege building levels reference", + "id": "siege_levels" + }, + { + "label": "Post Suggestions Modal Handoff", + "file_type": "document", + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "post suggestions modal handoff", + "id": "post_suggestions_readme" + }, + { + "label": "DiffListA Modal Component", + "file_type": "concept", + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "difflista modal component", + "id": "post_suggestions_difflist" + }, + { + "label": "AssignmentEntry Type", + "file_type": "concept", + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "assignmententry type", + "id": "post_suggestions_assignmententry" + }, + { + "label": "Graphify Dry-Run Evaluation Plan", + "file_type": "document", + "source_file": "docs/experiments/graphify-dry-run.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "graphify dry-run evaluation plan", + "id": "graphify_dryrun" + }, + { + "label": "Landing Page Mockup", + "file_type": "document", + "source_file": "docs/mockups/mockup-landing.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "landing page mockup", + "id": "mockup_landing" + }, + { + "label": "Login Page Mockup", + "file_type": "document", + "source_file": "docs/mockups/mockup-login.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "login page mockup", + "id": "mockup_login" + }, + { + "label": "Public Launch Plan", + "file_type": "document", + "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "public launch plan", + "id": "public_launch_plan" + }, + { + "label": "Self-Host on Any VPS (redirect)", + "file_type": "document", + "source_file": "docs/self-host/anywhere.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "self-host on any vps (redirect)", + "id": "self_host_anywhere" + }, + { + "label": "Self-Host on Azure (redirect)", + "file_type": "document", + "source_file": "docs/self-host/azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "self-host on azure (redirect)", + "id": "self_host_azure" + }, + { + "label": "Discord Auth Implementation Plan (Historical)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "discord auth implementation plan (historical)", + "id": "discord_auth_impl_plan" + }, + { + "label": "get_current_user FastAPI Dependency", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "get_current_user fastapi dependency", + "id": "discord_auth_get_current_user" + }, + { + "label": "BotClient.get_member()", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "botclient.get_member()", + "id": "discord_auth_botclient_get_member" + }, + { + "label": "JWT Session Cookie (HS256)", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "jwt session cookie (hs256)", + "id": "discord_auth_jwt_cookie" + }, + { + "label": "Component Versioning Plan", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "component versioning plan", + "id": "component_versioning_plan" + }, + { + "label": "backend/VERSION file", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "backend/version file", + "id": "component_versioning_backend_version" + }, + { + "label": "bot/VERSION file", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "bot/version file", + "id": "component_versioning_bot_version" + }, + { + "label": "frontend/package.json version", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "frontend/package.json version", + "id": "component_versioning_frontend_version" + }, + { + "label": "Version Bump CI Gate", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "version bump ci gate", + "id": "component_versioning_ci_gate" + }, + { + "label": "Post Suggestions Backend Plan", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "post suggestions backend plan", + "id": "post_suggestions_plan" + }, + { + "label": "post_suggestions.py Service", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "post_suggestions.py service", + "id": "post_suggestions_service" + }, + { + "label": "POST /sieges/{id}/post-suggestions Endpoint", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "post /sieges/{id}/post-suggestions endpoint", + "id": "post_suggestions_api" + }, + { + "label": "PostSuggestionEntry Schema", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "postsuggestionentry schema", + "id": "post_suggestions_schema" + }, + { + "label": "Greedy Post Assignment Algorithm", + "file_type": "concept", + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 4, + "norm_label": "greedy post assignment algorithm", + "id": "post_suggestions_greedy_algo" + }, + { + "label": "README", + "file_type": "document", + "source_file": "README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "readme", + "id": "readme" + }, + { + "label": "CONTRIBUTING.md", + "file_type": "document", + "source_file": "CONTRIBUTING.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "contributing.md", + "id": "contributing" + }, + { + "label": "Code of Conduct", + "file_type": "document", + "source_file": "CODE_OF_CONDUCT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "code of conduct", + "id": "code_of_conduct" + }, + { + "label": "SUPPORT.md", + "file_type": "document", + "source_file": "SUPPORT.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "support.md", + "id": "support" + }, + { + "label": "Infrastructure README", + "file_type": "document", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "infrastructure readme", + "id": "infra_readme_infrastructure" + }, + { + "label": "main.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "main.bicep", + "id": "infra_readme_main_bicep" + }, + { + "label": "modules/registry.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "modules/registry.bicep", + "id": "infra_readme_registry_bicep" + }, + { + "label": "modules/log-analytics.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "modules/log-analytics.bicep", + "id": "infra_readme_log_analytics_bicep" + }, + { + "label": "modules/app-insights.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "modules/app-insights.bicep", + "id": "infra_readme_app_insights_bicep" + }, + { + "label": "modules/postgres.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "modules/postgres.bicep", + "id": "infra_readme_postgres_bicep" + }, + { + "label": "modules/keyvault.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "modules/keyvault.bicep", + "id": "infra_readme_keyvault_bicep" + }, + { + "label": "modules/container-env.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "modules/container-env.bicep", + "id": "infra_readme_container_env_bicep" + }, + { + "label": "modules/container-apps.bicep", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "modules/container-apps.bicep", + "id": "infra_readme_container_apps_bicep" + }, + { + "label": "Azure Container Registry", + "file_type": "concept", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "azure container registry", + "id": "infra_readme_azure_container_registry" + }, + { + "label": "PostgreSQL Flexible Server", + "file_type": "concept", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "postgresql flexible server", + "id": "infra_readme_postgres_flexible_server" + }, + { + "label": "Container Apps Environment", + "file_type": "concept", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "container apps environment", + "id": "infra_readme_container_apps_environment" + }, + { + "label": "siege-api Container App", + "file_type": "concept", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "siege-api container app", + "id": "infra_readme_siege_api" + }, + { + "label": "siege-bot Container App", + "file_type": "concept", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "siege-bot container app", + "id": "infra_readme_siege_bot" + }, + { + "label": "siege-frontend Container App", + "file_type": "concept", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "siege-frontend container app", + "id": "infra_readme_siege_frontend" + }, + { + "label": "ACR weekly-purge Task", + "file_type": "concept", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "acr weekly-purge task", + "id": "infra_readme_weekly_purge_task" + }, + { + "label": "main.bicepparam (dev)", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "main.bicepparam (dev)", + "id": "infra_readme_main_bicepparam" + }, + { + "label": "main.prod.bicepparam", + "file_type": "code", + "source_file": "infra/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "main.prod.bicepparam", + "id": "infra_readme_main_prod_bicepparam" + }, + { + "label": "Excel Import Scripts README", + "file_type": "document", + "source_file": "scripts/excel-import/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "excel import scripts readme", + "id": "excel_import_readme_scripts" + }, + { + "label": "seed_db.py", + "file_type": "code", + "source_file": "scripts/excel-import/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "seed_db.py", + "id": "excel_import_readme_seed_db_py" + }, + { + "label": "run_migrations.sh", + "file_type": "code", + "source_file": "scripts/excel-import/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "run_migrations.sh", + "id": "excel_import_readme_run_migrations_sh" + }, + { + "label": "import_members.py", + "file_type": "code", + "source_file": "scripts/excel-import/README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "import_members.py", + "id": "excel_import_readme_import_members_py" + }, + { + "label": "openpyxl", + "file_type": "concept", + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "openpyxl", + "id": "requirements_openpyxl" + }, + { + "label": "sqlalchemy[asyncio]", + "file_type": "concept", + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "sqlalchemy[asyncio]", + "id": "requirements_sqlalchemy" + }, + { + "label": "python-dotenv", + "file_type": "concept", + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 3, + "norm_label": "python-dotenv", + "id": "requirements_python_dotenv" + }, + { + "label": "FAQ Wiki Page", + "file_type": "document", + "source_file": "wiki/FAQ.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "faq wiki page", + "id": "faq_wiki" + }, + { + "label": "Getting Started Wiki Page", + "file_type": "document", + "source_file": "wiki/Getting-Started.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "getting started wiki page", + "id": "getting_started_wiki" + }, + { + "label": "Home Wiki Page", + "file_type": "document", + "source_file": "wiki/Home.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "home wiki page", + "id": "home_wiki" + }, + { + "label": "Self-Host on Any VPS Wiki Page", + "file_type": "document", + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "self-host on any vps wiki page", + "id": "self_host_vps_wiki" + }, + { + "label": "Self-Host on Azure Wiki Page", + "file_type": "document", + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "self-host on azure wiki page", + "id": "self_host_azure_wiki" + }, + { + "label": "Wiki Sidebar", + "file_type": "document", + "source_file": "wiki/_Sidebar.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "wiki sidebar", + "id": "sidebar_wiki" + }, + { + "label": "RSL Siege Manager Application", + "file_type": "concept", + "source_file": "wiki/Home.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "rsl siege manager application", + "id": "concept_rsl_siege_manager" + }, + { + "label": "Discord OAuth2", + "file_type": "concept", + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "discord oauth2", + "id": "concept_discord_oauth2" + }, + { + "label": "Caddy Reverse Proxy", + "file_type": "concept", + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "caddy reverse proxy", + "id": "concept_caddy_reverse_proxy" + }, + { + "label": "GitHub Actions CI/CD", + "file_type": "concept", + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "github actions ci/cd", + "id": "concept_github_actions" + }, + { + "label": ".github/workflows/deploy.yml", + "file_type": "code", + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": ".github/workflows/deploy.yml", + "id": "concept_deploy_workflow" + }, + { + "label": ".github/workflows/infra-deploy.yml", + "file_type": "code", + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": ".github/workflows/infra-deploy.yml", + "id": "concept_infra_deploy_workflow" + }, + { + "label": "Azure Managed Identity", + "file_type": "concept", + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "azure managed identity", + "id": "concept_managed_identity" + }, + { + "label": "Application Insights", + "file_type": "concept", + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "application insights", + "id": "concept_app_insights" + }, + { + "label": "scripts/bootstrap-images.ps1", + "file_type": "code", + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "community": 5, + "norm_label": "scripts/bootstrap-images.ps1", + "id": "concept_bootstrap_images_script" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_run_migrations_offline" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_do_run_migrations" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_run_async_migrations" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_env_py", + "target": "alembic_env_run_migrations_online" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/env.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "alembic_env_run_migrations_online", + "target": "alembic_env_run_async_migrations" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0001_initial_schema_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L273", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0001_initial_schema_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0001_initial_schema.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0001_initial_schema_rationale_1", + "target": "backend_alembic_versions_0001_initial_schema_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0002_add_preview_columns_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0003_make_siege_date_nullable_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0004_add_post_priority_config_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0005_add_description_to_post_priority_config_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0007_fix_group_number_max_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0009_add_discord_id_to_member_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_25", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0011_add_post_suggest_preview_py", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0011_add_post_suggest_preview_rationale_23", + "target": "versions_0001_initial_schema_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0002_add_preview_columns_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0003_make_siege_date_nullable_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0004_add_post_priority_config_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0005_add_description_to_post_priority_config_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0007_fix_group_number_max_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0009_add_discord_id_to_member_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_33", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_alembic_versions_0011_add_post_suggest_preview_py", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0011_add_post_suggest_preview_rationale_34", + "target": "versions_0001_initial_schema_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0002_add_preview_columns.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0002_add_preview_columns_rationale_1", + "target": "backend_alembic_versions_0002_add_preview_columns_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0003_make_siege_date_nullable_rationale_1", + "target": "backend_alembic_versions_0003_make_siege_date_nullable_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0004_add_post_priority_config_rationale_1", + "target": "backend_alembic_versions_0004_add_post_priority_config_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0005_add_description_to_post_priority_config_rationale_1", + "target": "backend_alembic_versions_0005_add_description_to_post_priority_config_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0006_power_level_and_drop_sort_value_rationale_1", + "target": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0007_fix_group_number_max_rationale_1", + "target": "backend_alembic_versions_0007_fix_group_number_max_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0008_add_matched_condition_id_to_position_rationale_1", + "target": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0009_add_discord_id_to_member_rationale_1", + "target": "backend_alembic_versions_0009_add_discord_id_to_member_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_1", + "target": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_0011_add_post_suggest_preview_rationale_1", + "target": "backend_alembic_versions_0011_add_post_suggest_preview_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/config.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_config_py", + "target": "app_config_settings" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/app/config.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_config_settings", + "target": "basesettings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/main.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_lifespan" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/main.py", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_48", + "target": "app_main_lifespan" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_1", + "target": "bot_app_main_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/middleware.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_middleware_py", + "target": "app_middleware_requestloggingmiddleware" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/middleware.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_middleware_requestloggingmiddleware", + "target": "basehttpmiddleware" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/middleware.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_middleware_requestloggingmiddleware", + "target": "app_middleware_requestloggingmiddleware_dispatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_get_client_ip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_rate_limit_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L179", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_parse_retry_after_seconds" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L217", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_rate_limit_py", + "target": "app_rate_limit_rate_limit_exceeded_handler" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_1", + "target": "backend_app_rate_limit_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rate_limit_key", + "target": "app_rate_limit_get_client_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_53", + "target": "app_rate_limit_get_client_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_155", + "target": "app_rate_limit_rate_limit_key" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L267", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rate_limit_exceeded_handler", + "target": "app_rate_limit_parse_retry_after_seconds" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L180", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_180", + "target": "app_rate_limit_parse_retry_after_seconds" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/rate_limit.py", + "source_location": "L218", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_rate_limit_rationale_218", + "target": "app_rate_limit_rate_limit_exceeded_handler" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/telemetry.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_telemetry_py", + "target": "app_telemetry_configure_telemetry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/telemetry.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_telemetry_rationale_32", + "target": "app_telemetry_configure_telemetry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/telemetry.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_telemetry_rationale_1", + "target": "bot_app_telemetry_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_sieges_previewattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_sieges_applyattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_types_attackdayassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "api_types_attackdayapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "services_autofill_now_utc" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_attack_day_py", + "target": "services_attack_day_build_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_autherror" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_exchange_code_for_token" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_get_discord_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_check_guild_membership" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_login" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_callback" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_logout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L210", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_me" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L222", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "api_auth_error_redirect" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_1", + "target": "backend_app_api_auth_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_auth_py", + "target": "dependencies_auth_get_current_user" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_rationale_1", + "target": "backend_app_api_auth_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_28", + "target": "api_auth_autherror" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/auth.py", + "source_location": "L17", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_auth_autherror", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/auth.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_auth_autherror", + "target": "api_types_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L137", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_exchange_code_for_token" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_42", + "target": "api_auth_exchange_code_for_token" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_get_discord_user" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_60", + "target": "api_auth_get_discord_user" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_check_guild_membership" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_71", + "target": "api_auth_check_guild_membership" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_78", + "target": "api_auth_login" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_callback", + "target": "api_auth_error_redirect" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_118", + "target": "api_auth_callback" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L204", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_204", + "target": "api_auth_logout" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_213", + "target": "api_auth_me" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/auth.py", + "source_location": "L223", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_auth_rationale_223", + "target": "api_auth_error_redirect" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_sieges_previewautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L122", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_sieges_applyautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_types_autofillassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "api_types_autofillapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_autofill_py", + "target": "services_autofill_now_utc" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_board_getboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_posts_updatepost" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_board_bulk_update_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_positionboardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_groupboardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_buildingboardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "api_types_boardresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_positionupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "schemas_board_bulkpositionupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "services_board_get_siege_for_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "services_board_validate_position_state" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_board_py", + "target": "services_board_validate_member_active" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L227", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_board_bulk_update_positions", + "target": "services_board_validate_position_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L172", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_172", + "target": "api_board_bulk_update_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_list_buildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L181", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_add_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L270", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_sieges_updatebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L334", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_sieges_deletebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L346", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_add_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L397", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_buildings_delete_group" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_rebuild_groups_for_level" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L141", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_require_planning_or_not_locked" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_buildings_py", + "target": "services_buildings_create_groups_and_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L189", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_add_building", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_add_building", + "target": "services_buildings_create_groups_and_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_add_group", + "target": "api_sieges_getbuildings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L376", + "weight": 1.0, + "source": "api_buildings_add_group", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L386", + "weight": 1.0, + "source": "api_buildings_add_group", + "target": "models_position_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L407", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_buildings_delete_group", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "api_changelog_require_member_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "api_changelog_get_changelog_status" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_1", + "target": "backend_app_api_changelog_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_changelog_py", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_changelog_rationale_1", + "target": "backend_app_api_changelog_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_get_changelog_status", + "target": "api_changelog_require_member_session" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_markchangelogseen", + "target": "api_changelog_require_member_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_25", + "target": "api_changelog_require_member_session" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_47", + "target": "api_changelog_get_changelog_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/changelog.py", + "source_location": "L65", + "weight": 1.0, + "source": "api_changelog_get_changelog_status", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/changelog.py", + "source_location": "L73", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_changelog_rationale_73", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/comparison.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_comparison_compare_with_most_recent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/comparison.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_comparison_compare_with_specific" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_types_positionkey" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_types_memberdiff" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_types_comparisonresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "services_comparison_load_assignments" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "services_comparison_load_member_names" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "services_comparison_get_most_recent_completed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_comparison_py", + "target": "api_sieges_comparesieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/config.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_config_py", + "target": "api_config_get_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/config.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_config_rationale_12", + "target": "api_config_get_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/config.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_config_rationale_1", + "target": "bot_app_config_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_discord_sync_py", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_discord_sync_py", + "target": "api_members_applydiscordsync" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_discord_sync_rationale_1", + "target": "backend_app_api_discord_sync_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_discord_sync_rationale_1", + "target": "backend_app_api_discord_sync_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_discord_sync_rationale_17", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/discord_sync.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_discord_sync_rationale_26", + "target": "api_members_applydiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/health.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_health_py", + "target": "api_health_health" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "api_health_health" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_78", + "target": "api_health_health" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_images_py", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_images_py", + "target": "api_images_generate_images" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_images_rationale_1", + "target": "backend_app_api_images_py" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_generateimagesresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_notifyresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_notificationresultitem", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_notificationbatchresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_priority_config_postpriorityresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_priority_config_postpriorityupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_siege_members_siegemembercreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_attackdayassignment", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_attackdaypreviewresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/attack_day.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_attackdayapplyresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_autofillassignment", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_autofillpreviewresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/autofill.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_autofillapplyresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_positionboardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_groupboardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_buildingboardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_boardresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_positionupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_board_bulkpositionupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_building_buildingcreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_building_buildingupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_positionresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_buildinggroupresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_buildingresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_building_groupcreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_changelog_changelogstatusresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/common.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_common_errorresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_positionkey", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_memberdiff", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/comparison.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_comparisonresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberbase", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberpreferencesupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_syncmatch", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_syncpreviewresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_syncapply", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_syncapplyresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_postresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_postupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_postconditionsupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_condition.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_condition_postconditionresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_schema", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postsuggestionpreviewresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_postsuggestionapplyrequest", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_staleentry", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postsuggestionapplyresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_siegecreate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_siegeupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_siegeresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_member_siegememberresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_siege_member_siegememberupdate", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_memberpreferencesummary", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_validationissue", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_validationresult", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/version.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_version_versionresponse", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_notifyrequest", + "target": "basemodel" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_postmessagerequest", + "target": "basemodel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L73", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_images_generate_images", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/images.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_images_rationale_35", + "target": "api_images_generate_images" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_images_generate_images" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_images_generate_images" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/images.py", + "source_location": "L58", + "weight": 1.0, + "source": "api_images_generate_images", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_activatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_completesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_reopensiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_lifecycle_py", + "target": "api_sieges_clonesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_list_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_createmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_get_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_updatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/members.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_delete_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "api_members_getmemberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L81", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_members_py", + "target": "services_members_deactivate_member" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_get_member", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_get_guild_member", + "target": "api_members_get_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_72", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_updatemember", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_members_deactivate_member", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/members.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_getmemberpreferences", + "target": "api_members_get_member" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_get_member", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_62", + "target": "api_members_get_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "api_members_get_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_members_get_member", + "target": "app_http_api_get_bot" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_130", + "target": "api_members_get_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_get_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "api_members_get_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_members_get_member" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_notifyresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_notificationresultitem" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_send_dms" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_notifysiegemembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_getnotificationbatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_notifications_posttochannel" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_1", + "target": "backend_app_api_notifications_py" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/notifications.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_notifications_py", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "backend_app_api_notifications_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_65", + "target": "api_notifications_send_dms" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "api_notifications_send_dms" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_send_dms", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_23", + "target": "api_notifications_send_dms" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_142", + "target": "api_notifications_notifysiegemembers" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L310", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_310", + "target": "api_notifications_getnotificationbatch" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L371", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_rationale_371", + "target": "api_notifications_posttochannel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_serialize_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_list_posts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_updatepost" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "api_posts_setpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_posts_py", + "target": "services_posts_get_post_for_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_list_posts", + "target": "api_posts_serialize_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "api_posts_serialize_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_setpostconditions", + "target": "api_posts_serialize_post" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/posts.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_rationale_13", + "target": "api_posts_serialize_post" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_list_posts", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_posts_rationale_37", + "target": "api_posts_list_posts" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_post_priority_config_postpriorityresponse", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_post_priority_config_postpriorityupdate", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_postpriorityconfig", + "target": "api_post_priority_config_list_post_priorities" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L335", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_suggestions_rationale_1", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "post_suggestions_schema" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "schemas_post_suggestions_staleentry" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_1", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "services_autofill_now_utc" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L517", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "services_post_suggestions_get_target_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L537", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_post_suggestions_py", + "target": "services_post_suggestions_null_entry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_1", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L418", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_418", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L489", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_489", + "target": "backend_app_api_post_suggestions_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_suggestions_rationale_37", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_suggestions.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_post_suggestions_rationale_62", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/reference.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_reference_py", + "target": "api_members_getpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/reference.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_reference_py", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/reference.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_reference_py", + "target": "api_members_getmemberroles" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_list_sieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_createsiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_get_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_updatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "api_sieges_delete_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_sieges_py", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatesiege", + "target": "api_sieges_get_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_delete_siege", + "target": "api_sieges_get_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_siege_members_siegemembercreate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_siege_members_siegemembercreate", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_siege_members_siegemembercreate", + "target": "schemas_siege_member_siegememberresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/siege_members.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_siege_members_siegemembercreate", + "target": "schemas_siege_member_siegememberupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/siege_members.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_siege_members_list_siege_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/validation.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_validation_py", + "target": "api_sieges_validatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_validation_py", + "target": "api_types_validationissue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/validation.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_api_validation_py", + "target": "api_types_validationresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_read_backend_version" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_getversion", + "target": "api_version_read_backend_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_rationale_20", + "target": "api_version_read_backend_version" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_fetch_bot_version" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_getversion", + "target": "api_version_fetch_bot_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_rationale_43", + "target": "api_version_fetch_bot_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/version.py", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_version_rationale_57", + "target": "api_version_getversion" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/base.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_base_py", + "target": "base" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/base.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "base", + "target": "declarativebase" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_seeds_py", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_seeds_py", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_seeds_py", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_1", + "target": "backend_app_db_seeds_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_8", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L249", + "weight": 1.0, + "source": "app_main_main", + "target": "db_seeds_seed_post_conditions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_64", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L250", + "weight": 1.0, + "source": "app_main_main", + "target": "db_seeds_seed_building_type_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/seeds.py", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "db_seeds_rationale_92", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L251", + "weight": 1.0, + "source": "app_main_main", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1085", + "weight": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "db_seeds_seed_post_priority_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/db/session.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_db_session_py", + "target": "db_session_get_db" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_get_current_user", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_rationale_24", + "target": "dependencies_auth_authenticateduser" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L19", + "weight": 0.8, + "confidence_score": 0.5, + "source": "dependencies_auth_authenticateduser", + "target": "api_types_member" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/dependencies/auth.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "dependencies_auth_rationale_37", + "target": "dependencies_auth_get_current_user" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_building", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_group.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_building_group_buildinggroup", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_type_config.py", + "source_location": "L4", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_building_type_config_py", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/member.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_member", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch_result.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_notification_batch_result_py", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_post", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_condition.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_postcondition", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_priority_config.py", + "source_location": "L4", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_posts_postpriorityconfig", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege_member.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siegemember", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L35", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "base" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L14", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_group.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_building_group_buildinggroup", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L38", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L66", + "weight": 1.0, + "source": "services_buildings_rebuild_groups_for_level", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L160", + "weight": 1.0, + "source": "services_buildings_create_groups_and_positions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L164", + "weight": 1.0, + "source": "api_sieges_clonesiege", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/sieges.py", + "source_location": "L109", + "weight": 1.0, + "source": "api_sieges_createsiege", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L164", + "weight": 1.0, + "source": "scripts_seed_demo_seed_buildings_and_positions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L751", + "weight": 1.0, + "source": "excel_import_import_excel_create_building_with_groups_and_positions", + "target": "models_building_group_buildinggroup" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building_type_config.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_building_type_config_py", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "api_types_siegestatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "api_types_memberrole" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "models_enums_powerlevel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/enums.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_enums_py", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch.py", + "source_location": "L8", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "models_enums_notificationbatchstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/member.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "api_types_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberbase" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_membercreate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_memberpreferencesupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "api_types_syncmatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "api_types_syncpreviewresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_syncapply" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_member_py", + "target": "schemas_member_syncapplyresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L17", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "backend_app_models_notification_batch_result_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L17", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "backend_app_models_notification_batch_result_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/notification_batch_result.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "backend_app_models_notification_batch_result_py", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L270", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "backend_app_models_notification_batch_result_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/position.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_position_py", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L18", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/position.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "models_position_position", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "models_position_position" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "models_position_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L55", + "weight": 1.0, + "source": "services_buildings_rebuild_groups_for_level", + "target": "models_position_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L169", + "weight": 1.0, + "source": "services_buildings_create_groups_and_positions", + "target": "models_position_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L176", + "weight": 1.0, + "source": "api_sieges_clonesiege", + "target": "models_position_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/sieges.py", + "source_location": "L118", + "weight": 1.0, + "source": "api_sieges_createsiege", + "target": "models_position_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L176", + "weight": 1.0, + "source": "scripts_seed_demo_seed_buildings_and_positions", + "target": "models_position_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L760", + "weight": 1.0, + "source": "excel_import_import_excel_create_building_with_groups_and_positions", + "target": "models_position_position" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/post.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "api_types_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "schemas_post_postresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "schemas_post_postupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_post_py", + "target": "schemas_post_postconditionsupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/models/siege.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "api_types_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "schemas_siege_siegecreate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "schemas_siege_siegeupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_models_siege_py", + "target": "schemas_siege_siegeresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_positionboardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_groupboardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_buildingboardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_positionupdate", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_board_bulkpositionupdate", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "schemas_building_buildingcreate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_building_buildingcreate", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "schemas_building_buildingupdate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_building_buildingupdate", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "schemas_building_groupcreate" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_building_groupcreate", + "target": "api_types_buildingtype" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/changelog.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_changelog_rationale_9", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/changelog.py", + "source_location": "L95", + "weight": 1.0, + "source": "api_changelog_markchangelogseen", + "target": "schemas_changelog_changelogstatusresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/common.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_schemas_common_py", + "target": "schemas_common_errorresponse" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_membercreate", + "target": "schemas_member_memberbase" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_member_memberresponse", + "target": "schemas_member_memberbase" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberbase", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_membercreate", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberupdate", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_memberpreferencesupdate", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_syncapply", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_member_syncapplyresponse", + "target": "api_types_memberrole" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L158", + "weight": 1.0, + "source": "api_members_applydiscordsync", + "target": "schemas_member_syncapplyresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_post_postresponse", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_post_postupdate", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/post.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_post_postconditionsupdate", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_condition.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_postcondition", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_member_siegememberresponse", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_member_siegememberupdate", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_memberpreferencesummary", + "target": "schemas_post_condition_postconditionresponse" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_80", + "target": "schemas_post_suggestions_postsuggestionapplyrequest" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_92", + "target": "schemas_post_suggestions_staleentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L454", + "weight": 1.0, + "source": "api_sieges_applypostsuggestions", + "target": "schemas_post_suggestions_staleentry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_13", + "target": "post_suggestions_schema" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_66", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/post_suggestions.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "schemas_post_suggestions_rationale_117", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_siegecreate", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_siegeupdate", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/siege.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "schemas_siege_siegeresponse", + "target": "api_types_siegestatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "schemas_siege_member_siegememberresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "schemas_siege_member_resolve_member_fields" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "schemas_siege_member_siegememberupdate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/version.py", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "schemas_version_versionresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/version.py", + "source_location": "L63", + "weight": 1.0, + "source": "api_version_getversion", + "target": "schemas_version_versionresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewattackday", + "target": "services_attack_day_build_preview" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_attack_day_build_preview", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/attack_day.py", + "source_location": "L145", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_applyattackday", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewautofill", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/autofill.py", + "source_location": "L136", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_applyautofill", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L324", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewpostsuggestions", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L385", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_applypostsuggestions", + "target": "services_autofill_now_utc" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L71", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_71", + "target": "services_autofill_now_utc" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L151", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_board_validate_position_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_98", + "target": "services_board_validate_position_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_board_validate_member_active" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_16", + "target": "api_board_getboard" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/board.py", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_board_rationale_123", + "target": "api_posts_updatepost" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "app_http_api_notify" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "app_http_api_post_message" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_botclient", + "target": "app_http_api_post_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_1", + "target": "services_bot_client_botclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_notify", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_message", + "target": "services_bot_client_botclient_make_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_19", + "target": "app_http_api_notify" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_32", + "target": "app_http_api_post_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/bot_client.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_bot_client_rationale_45", + "target": "app_http_api_post_image" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L321", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatebuilding", + "target": "services_buildings_rebuild_groups_for_level" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_buildings_rationale_23", + "target": "services_buildings_rebuild_groups_for_level" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/buildings.py", + "source_location": "L31", + "weight": 1.0, + "source": "services_buildings_rebuild_groups_for_level", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L290", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatebuilding", + "target": "services_buildings_get_building_type_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_buildings_rationale_142", + "target": "services_buildings_require_planning_or_not_locked" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_buildings_rationale_156", + "target": "services_buildings_create_groups_and_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_building_capacity_py", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/building_capacity.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_building_capacity_rationale_14", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/sieges.py", + "source_location": "L46", + "weight": 1.0, + "source": "services_sieges_compute_scroll_count", + "target": "services_building_capacity_get_team_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_comparesieges", + "target": "services_comparison_load_assignments" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_comparison_rationale_14", + "target": "services_comparison_load_assignments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/comparison.py", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_comparesieges", + "target": "services_comparison_load_member_names" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_discord_sync_rationale_12", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/discord_sync.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_discord_sync_rationale_153", + "target": "api_members_applydiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L233", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L331", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L350", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_generate_assignments_image" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L360", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_image_gen_py", + "target": "services_image_gen_generate_reserves_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_1", + "target": "backend_app_services_image_gen_py" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L16", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L24", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L24", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L24", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_image_gen_siegememberwithname", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_image_gen_siegememberwithname", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L6", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_image_gen_siegememberwithname", + "target": "api_types_boardresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L399", + "weight": 1.0, + "source": "api_notifications_posttochannel", + "target": "services_image_gen_siegememberwithname" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L356", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_assignments_image", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_66", + "target": "services_image_gen_build_assignments_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L365", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_reserves_image", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_237", + "target": "services_image_gen_build_reserves_html" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L357", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_assignments_image", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L366", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_generate_reserves_image", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_332", + "target": "services_image_gen_render_html_to_png" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_355", + "target": "services_image_gen_generate_assignments_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/image_gen.py", + "source_location": "L364", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_image_gen_rationale_364", + "target": "services_image_gen_generate_reserves_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_18", + "target": "api_sieges_activatesiege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_62", + "target": "api_sieges_completesiege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_86", + "target": "api_sieges_reopensiege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/lifecycle.py", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_lifecycle_rationale_110", + "target": "api_sieges_clonesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_position_sort_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_position_label" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_positions_to_key_set" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_positions_from_keys" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L126", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_build_section" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_app_services_notification_message_py", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_1", + "target": "backend_app_services_notification_message_py" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_61", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L25", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "services_notification_message_positioninfo", + "target": "api_types_buildingtype" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L214", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "services_notification_message_positioninfo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_75", + "target": "services_notification_message_position_sort_key" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_section", + "target": "services_notification_message_position_label" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_85", + "target": "services_notification_message_position_label" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_member_notification_message", + "target": "services_notification_message_positions_to_key_set" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_111", + "target": "services_notification_message_positions_to_key_set" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L205", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_member_notification_message", + "target": "services_notification_message_positions_from_keys" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_118", + "target": "services_notification_message_positions_from_keys" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L213", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_build_member_notification_message", + "target": "services_notification_message_build_section" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_131", + "target": "services_notification_message_build_section" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/notification_message.py", + "source_location": "L161", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_notification_message_rationale_161", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L262", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "services_notification_message_build_member_notification_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_setpostconditions", + "target": "services_posts_get_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_updatepost", + "target": "services_posts_get_post_for_siege_or_404" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_setpostconditions", + "target": "services_posts_get_post_for_siege_or_404" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_posts_rationale_55", + "target": "api_posts_updatepost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/posts.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_posts_rationale_79", + "target": "api_posts_setpostconditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewpostsuggestions", + "target": "services_post_suggestions_get_target_position" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L518", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_518", + "target": "services_post_suggestions_get_target_position" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L170", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_previewpostsuggestions", + "target": "services_post_suggestions_null_entry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L546", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_546", + "target": "services_post_suggestions_null_entry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_79", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/post_suggestions.py", + "source_location": "L340", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_post_suggestions_rationale_340", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_sieges_rationale_20", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/autofill.py", + "source_location": "L77", + "weight": 1.0, + "source": "api_sieges_previewautofill", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/validation.py", + "source_location": "L43", + "weight": 1.0, + "source": "api_sieges_validatesiege", + "target": "services_sieges_scrolls_per_player" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/sieges.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "services_sieges_rationale_29", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/autofill.py", + "source_location": "L76", + "weight": 1.0, + "source": "api_sieges_previewautofill", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/services/validation.py", + "source_location": "L42", + "weight": 1.0, + "source": "api_sieges_validatesiege", + "target": "services_sieges_compute_scroll_count" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_py", + "target": "app_main_main" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L220", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "scripts_seed_demo_seed_siege_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "backend_scripts_seed_demo_py", + "target": "app_main_main" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L256", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_96", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L687", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L702", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_get_or_create_members", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L835", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L691", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_691", + "target": "scripts_seed_demo_get_or_create_members" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L261", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L115", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_115", + "target": "scripts_seed_demo_get_or_create_demo_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L139", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_139", + "target": "scripts_seed_demo_seed_buildings_and_positions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L204", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_204", + "target": "scripts_seed_demo_get_or_create_second_siege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L271", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "scripts_seed_demo_seed_siege_members" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "backend/scripts/seed_demo.py", + "source_location": "L225", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_seed_demo_rationale_225", + "target": "scripts_seed_demo_seed_siege_members" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_discord_client_py", + "target": "app_discord_client_siegebot" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_discord_client_siegebot_init" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_discord_client_siegebot_on_ready" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_http_api_post_message" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_siegebot", + "target": "app_http_api_post_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_7", + "target": "app_discord_client_siegebot" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "bot/app/http_api.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "app_http_api_notifyrequest", + "target": "app_discord_client_siegebot" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "bot/app/http_api.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "app_http_api_postmessagerequest", + "target": "app_discord_client_siegebot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "bot/app/main.py", + "source_location": "L40", + "weight": 1.0, + "source": "app_main_main", + "target": "app_discord_client_siegebot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_message", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_image", + "target": "app_discord_client_siegebot_require_guild" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_34", + "target": "app_http_api_post_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/discord_client.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_discord_client_rationale_47", + "target": "app_http_api_post_image" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_set_bot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_get_bot" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_verify_api_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_notifyrequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_postmessagerequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_version" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_notify" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_post_message" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L111", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_post_image" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L136", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_http_api_py", + "target": "app_http_api_get_guild_member" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "bot/app/main.py", + "source_location": "L41", + "weight": 1.0, + "source": "app_main_main", + "target": "app_http_api_set_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_notify", + "target": "app_http_api_get_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_message", + "target": "app_http_api_get_bot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_post_image", + "target": "app_http_api_get_bot" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_37", + "target": "app_http_api_verify_api_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_getversion" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_58", + "target": "app_http_api_version" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_types_versioninfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/version.ts", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_version", + "target": "api_version_useversion" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "app_http_api_version" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_87", + "target": "app_http_api_notify" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_101", + "target": "app_http_api_post_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_116", + "target": "app_http_api_post_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/http_api.py", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_http_api_rationale_140", + "target": "app_http_api_get_guild_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_run_http_server" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_run_discord_client" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "bot_app_main_py", + "target": "app_main_main" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "app_main_run_http_server" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_19", + "target": "app_main_run_http_server" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "app_main_run_discord_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_31", + "target": "app_main_run_discord_client" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "bot/app/main.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_rationale_37", + "target": "app_main_main" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "app_main_main" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1162", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "app_main_main" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "excel_import_import_excel_collect_xlsm_files" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1200", + "weight": 1.0, + "confidence_score": 1.0, + "source": "app_main_main", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/tailwind.config.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_tailwind_config_ts", + "target": "frontend_src_api_config_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/vitest.config.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_vitest_config_ts", + "target": "frontend_vite_config_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_apicreatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_apiaddbuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_apicreatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "api_types_siegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_buildingstab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_poststab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L179", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_search" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_roleselect" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L273", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_firstpositionspan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_positioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_chevron" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/board.spec.ts", + "source_location": "L367", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_board_spec_ts", + "target": "e2e_board_spec_autofillbtn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_board_spec_apicreatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_board_spec_apiaddbuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_board_spec_apicreatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L613", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "e2e_board_spec_buildingstab" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_posts_getposts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_sieges_getsiegememberpreferences" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_board_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_posts_updatepost" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_types_buildingresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_types_siegemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "api_types_postcondition" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "post_suggestions_readme" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "frontend_src_lib_post_priority_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "lib_post_priority_prioritylabel" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "lib_post_priority_prioritybadgecolor" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_role_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_role_priority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_role_badge_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_boardpage_power_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_memberwithmatches" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_duplicateconditionmap" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_buildduplicateconditionmap" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_findpostposition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "components_poststab_memberassignrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L302", + "weight": 1.0, + "confidence_score": 1.0, + "source": "e2e_board_spec_poststab", + "target": "pages_postspage_postrow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "e2e_board_spec_poststab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "e2e_board_spec_positioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "e2e_members_spec_ensurememberslotsavailable" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "e2e_members_spec_activecheckbox" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/members.spec.ts", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_members_spec_ts", + "target": "e2e_members_spec_editlinks" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L93", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "api_types_siegemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L212", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_dateinput" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_url" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L181", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_tabstrip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L203", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_boardlink" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L369", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_memberrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L382", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_activebadge" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/e2e/siege-lifecycle.spec.ts", + "source_location": "L383", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_e2e_siege_lifecycle_spec_ts", + "target": "e2e_siege_lifecycle_spec_errorbadge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_components_layout_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_components_requireauth_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_components_siegelayout_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_loginpage_loginpage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_landingpage_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_landingpage_landingorsieges" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_memberspage_memberspage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_memberdetailpage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_siegespage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_siegecreatepage_siegecreatepage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_siegesettingspage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_boardpage_boardpage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_postspage_postspage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "api_types_siegemember" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_comparisonpage_comparisonpage" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "frontend_src_pages_postprioritiespage_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "pages_systempage_systempage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/App.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_app_tsx", + "target": "src_app_app" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "frontend_src_app_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "context_authcontext_authprovider" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/main.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_main_tsx", + "target": "src_main_queryclient" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_types_boardresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_types_positionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_board_getboard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/board.ts", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_board_ts", + "target": "api_posts_updatepost" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_board_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_board_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_board_getboard" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_board_getboard" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "api_changelog_changelogstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "api_changelog_fetchchangelogstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/changelog.ts", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_changelog_ts", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "frontend_src_api_changelog_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "api_changelog_fetchchangelogstatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "api_changelog_markchangelogseen" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/client.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_client_ts", + "target": "api_client_apiclient" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/config.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_config_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "frontend_src_api_client_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/config.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_config_ts", + "target": "api_config_appconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/config.ts", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_config_ts", + "target": "api_config_fetchconfig" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_api_config_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "api_config_fetchconfig" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_postcondition" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_memberroleinfo" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_syncpreviewresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_types_syncapplyitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_createmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_updatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_deletemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getmemberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_updatememberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_getmemberroles" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/members.ts", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_members_ts", + "target": "api_members_applydiscordsync" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_api_members_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_getmember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_createmember" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_members_updatemember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L149", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_members_updatemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_updatemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_getmemberpreferences" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_updatememberpreferences" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_members_getpostconditions" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "api_members_getpostconditions" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_members_getpostconditions" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_members_previewdiscordsync" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_members_applydiscordsync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "api_types_notifyresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_notifications_notifysiegemembers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "backend/app/api/notifications.py", + "source_location": "L255", + "weight": 1.0, + "source": "api_notifications_notifysiegemembers", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_getnotificationbatch", + "target": "api_types_notificationresultitem" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L354", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_notifications_getnotificationbatch", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_notifications_getnotificationbatch" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_notifications_posttochannel" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_types_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_getpostpriorities" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_updatepostpriority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_getposts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_updatepost" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/posts.ts", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_posts_ts", + "target": "api_posts_setpostconditions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_posts_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/api/post_priority_config.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_posts_postpriorityconfig", + "target": "api_posts_updatepostpriority" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L44", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_posts_postpriorityconfig" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_posts_getpostpriorities" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "api_posts_getpostpriorities" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "api_posts_updatepostpriority" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_posts_getposts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_posts_updatepost" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_posts_setpostconditions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_siege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_siegestatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_building" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_buildingtype" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_buildingtypeinfo" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_validationresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_autofillapplyresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_attackdayapplyresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_comparisonresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_createsiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_updatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_deletesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_activatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_completesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_clonesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_reopensiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_validatesiege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getbuildings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_createbuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_updatebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_deletebuilding" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_getsiegememberpreferences" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L165", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_previewautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L174", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_applyautofill" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_previewattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_applyattackday" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L201", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_comparesieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L210", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_comparesiegesspecific" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L220", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/sieges.ts", + "source_location": "L229", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_sieges_ts", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_api_sieges_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_sieges_getsieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "api_sieges_getsieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "api_sieges_getsieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_getsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "api_sieges_createsiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_updatesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_deletesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_activatesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_completesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "api_sieges_clonesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_clonesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_reopensiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_validatesiege" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_validatesiege" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L284", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_updatebuilding", + "target": "api_sieges_getbuildings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/buildings.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_sieges_deletebuilding", + "target": "api_sieges_getbuildings" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_getbuildings" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_updatebuilding" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_sieges_getsiegemembers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/services/siege_members.py", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_getsiegememberpreferences" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_previewautofill" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_sieges_applyautofill" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_previewattackday" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_sieges_applyattackday" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_sieges_comparesieges" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_sieges_comparesiegesspecific" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "api_sieges_previewpostsuggestions" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "api_sieges_applypostsuggestions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberrole" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_siegestatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildingtype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_syncmatch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_syncpreviewresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_syncapplyitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postcondition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_positionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildinggroupresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildingresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L105", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_boardresponse" + }, + { + "relation": "imports_from", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L13", + "weight": 1.0, + "context": "import", + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L129", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_post" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_validationissue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_validationresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_autofillassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L163", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_autofillapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L168", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_attackdayassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L173", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L178", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_attackdayapplyresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_positionkey" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L190", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberdiff" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_comparisonresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L205", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_notificationresultitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L214", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L220", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_notifyresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L227", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_generateimagesresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L233", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_versioninfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_buildingtypeinfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L249", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_memberroleinfo" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L256", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionskipreason" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L262", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "post_suggestions_schema" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L279", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L284", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionstalereason" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L291", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionstaleentry" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/api/types.ts", + "source_location": "L298", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_api_types_ts", + "target": "api_types_postsuggestionapplyresult" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_api_types_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "api_types_memberrole" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L12", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/member.py", + "source_location": "L8", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_member", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_syncmatch", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/member.py", + "source_location": "L5", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_syncpreviewresponse", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_memberrole" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_memberrole" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L15", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L8", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_siegestatus" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_siegestatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "api_types_buildingtype" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/building.py", + "source_location": "L7", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_building", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/board.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_boardresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_positionresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_buildinggroupresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L3", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_buildingresponse", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L39", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_buildingtype" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L334", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L334", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L334", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_condition.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_postcondition", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege_member.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siegemember", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_member" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_member" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_types_syncmatch" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "api_types_syncapplyitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post_condition.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_postcondition", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L43", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_postcondition" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L19", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L19", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L12", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L11", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siege", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/siege_member.py", + "source_location": "L10", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_siegemember", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_siege" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L45", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_siege" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "api_types_positionresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "api_types_buildinggroupresponse" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/building.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_building", + "target": "api_types_buildingresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/models/post.py", + "source_location": "L9", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_post", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_building" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L37", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_building" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "backend/app/schemas/siege_member.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_types_memberpreferencesummary" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_positionresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_buildinggroupresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_buildingresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_types_buildingresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L41", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "api_types_boardresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L382", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_boardresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L382", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_boardresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L382", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_boardresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_siegemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "api_types_attackdaypreviewresult" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_table_tablerow" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeMembersPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "api_types_siegemember", + "target": "pages_siegememberspage_attackdayselect" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/images.py", + "source_location": "L13", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_generateimagesresponse", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L20", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L20", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L20", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationbatchresponse", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_siegemember" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L46", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_siegemember" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedmember", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedassignment", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedreserve", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconfig", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_parsedpostconditions", + "target": "api_types_post" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L42", + "weight": 0.8, + "confidence_score": 0.5, + "source": "excel_import_import_excel_importstats", + "target": "api_types_post" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_validationissue" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_validationresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_validationresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "api_types_autofillpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_types_positionkey" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "api_types_memberdiff" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_notificationresultitem" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L16", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notificationresultitem", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "backend/app/api/notifications.py", + "source_location": "L16", + "weight": 0.8, + "confidence_score": 0.5, + "source": "api_types_notifyresponse", + "target": "api_types_notificationbatchresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "api_types_notifyresponse" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "api_types_postsuggestionpreviewresult" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "api_types_postsuggestionstaleentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "api_version_useversion" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_carouselslide" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_carousel_carouselslide" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "components_carousel_carouselprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Carousel.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_carousel_carousel", + "target": "pages_landingpage_colors" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "components_carousel_carousel" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "frontend_src_components_ui_dropdown_menu_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "ui_dropdown_menu_dropdownmenucontent" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ChangelogDropdown.tsx", + "source_location": "L103", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "frontend_src_components_changelogdropdown_tsx", + "target": "components_changelogdropdown_hasunread" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_components_changelogdropdown_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "components_groupbytoggle_props" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "components_discordsyncmodal_confidencevariant" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/DiscordSyncModal.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_discordsyncmodal_tsx", + "target": "components_discordsyncmodal_confidence_label" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_discordsyncmodal_tsx" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "components_groupbytoggle_props" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_groupbytoggle_props" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/GroupByToggle.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_groupbytoggle_groupbytoggle", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "components_groupbytoggle_groupbytoggle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "components_groupbytoggle_groupbytoggle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "components_groupbytoggle_groupbytoggle" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "components_layout_navlinkclass" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_layout_tsx", + "target": "components_layout_layout" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L10", + "weight": 1.0, + "source": "components_layout_navlinkclass", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/Layout.tsx", + "source_location": "L18", + "weight": 1.0, + "source": "components_layout_layout", + "target": "context_authcontext_useauth" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostsTab.tsx", + "source_location": "L329", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postrow", + "target": "components_poststab_findpostposition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_outcomefilter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_classification" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_priority_meta" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_getprioritymeta" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_skip_reason_label" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_stale_reason_label" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_tileconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_classify" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "components_postsuggestionsmodal_changecell", + "target": "components_postsuggestionsmodal_classify" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_pill" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L185", + "weight": 1.0, + "source": "components_postsuggestionsmodal_pill", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_changecell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L248", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_skipicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L259", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_conditioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L290", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_summarytile" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L308", + "weight": 1.0, + "source": "components_postsuggestionsmodal_summarytile", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L345", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_stateloading" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_stateempty" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L379", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_statestaleconflict" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L476", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_expirycountdown" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L554", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "components_postsuggestionsmodal_useexpirycountdown" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_requireauth_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_requireauth_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_requireauth_tsx", + "target": "components_requireauth_requireauth" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/RequireAuth.tsx", + "source_location": "L9", + "weight": 1.0, + "source": "components_requireauth_requireauth", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/SiegeLayout.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_siegelayout_tsx", + "target": "components_siegelayout_siegelayout" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "ui_badge_badgevariants" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "ui_badge_badgeprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_badge_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_components_ui_badge_tsx" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ui_badge_badge", + "target": "ui_badge_badgevariants" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_badge_badge" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/badge.tsx", + "source_location": "L36", + "weight": 1.0, + "source": "ui_badge_badge", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "ui_button_buttonvariants" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "ui_button_buttonprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/button.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_button_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_components_ui_button_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_button_button" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/checkbox.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ui_checkbox_checkbox", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/checkbox.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ui_checkbox_checkbox", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_checkbox_checkbox" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogoverlay" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dialog_tsx", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_dialog_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogheader" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L56", + "weight": 1.0, + "source": "ui_dialog_dialogheader", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogfooter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/dialog.tsx", + "source_location": "L72", + "weight": 1.0, + "source": "ui_dialog_dialogfooter", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogtitle" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_dialog_dialogdescription" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenusubtrigger" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenusubcontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenucontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenuitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenucheckboxitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenuradioitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenulabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenuseparator" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L170", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_dropdown_menu_tsx", + "target": "ui_dropdown_menu_dropdownmenushortcut" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/components/ui/dropdown-menu.tsx", + "source_location": "L176", + "weight": 1.0, + "source": "ui_dropdown_menu_dropdownmenushortcut", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "ui_input_inputprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/input.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_input_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_input_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_input_input" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_input_input" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_label_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_label_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/label.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_label_tsx", + "target": "ui_label_label" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_components_ui_label_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_label_label" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "ui_label_label" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selecttrigger" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectscrollupbutton" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectscrolldownbutton" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectcontent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L97", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectlabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L109", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/select.tsx", + "source_location": "L131", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_select_tsx", + "target": "ui_select_selectseparator" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "frontend_src_components_ui_select_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_select_selecttrigger" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_select_selectcontent" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_select_selectitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "ui_select_selectitem" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_table" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablefooter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/table.tsx", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_table_tsx", + "target": "ui_table_tablecaption" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "frontend_src_components_ui_table_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_table" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablebody" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablerow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablerow" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablehead" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "ui_table_tablecell" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "ui_textarea_textareaprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/ui/textarea.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_components_ui_textarea_tsx", + "target": "ui_textarea_textarea" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authuser" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authcontextvalue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authcontext" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_authprovider" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/context/AuthContext.tsx", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_context_authcontext_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "frontend_src_context_authcontext_tsx" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L2", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "context_authcontext_useauth" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L11", + "weight": 1.0, + "source": "pages_landingpage_landingorsieges", + "target": "context_authcontext_useauth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L3", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "lib_buildingcolors_buildingcolorclass" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/buildingColors.ts", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_buildingcolors_ts", + "target": "lib_buildingcolors_building_labels" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "frontend_src_lib_buildingcolors_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_lib_buildingcolors_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "lib_buildingcolors_building_labels" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "lib_buildingcolors_building_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_conditiongroup" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L46", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_groupbylevel" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/groupPostConditions.ts", + "source_location": "L48", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "frontend_src_lib_grouppostconditions_ts", + "target": "lib_grouppostconditions_groupbytype" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_usegroupbypreference_ts", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L304", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L196", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L103", + "weight": 1.0, + "source": "pages_postspage_postrow", + "target": "frontend_src_lib_grouppostconditions_ts" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_usegroupbypreference_ts", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "lib_grouppostconditions_groupbymode" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_post_priority_ts", + "target": "lib_post_priority_prioritylabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/post-priority.ts", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_post_priority_ts", + "target": "lib_post_priority_prioritybadgecolor" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "lib_post_priority_prioritylabel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/useGroupByPreference.ts", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_usegroupbypreference_ts", + "target": "lib_usegroupbypreference_valid_modes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L278", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L57", + "weight": 1.0, + "source": "pages_postspage_postrow", + "target": "frontend_src_lib_usegroupbypreference_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/lib/utils.ts", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_lib_utils_ts", + "target": "lib_utils_cn" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "frontend_src_lib_utils_ts" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L755", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L102", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", + "source_location": "L501", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegesettingspage_tsx", + "target": "lib_utils_cn" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L29", + "weight": 1.0, + "source": "pages_comparisonpage_positiontag", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L27", + "weight": 1.0, + "source": "pages_systempage_sectionpanel", + "target": "lib_utils_cn" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L67", + "weight": 1.0, + "source": "pages_systempage_datarow", + "target": "lib_utils_cn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_boardpage_role_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_priority" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_badge_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_chip_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_power_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_boardpage_power_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L103", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_building_type_order" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L254", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_draggablememberrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L322", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_memberdragoverlay" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L347", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_rolefilter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L349", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_role_filter_options" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L357", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_memberbucket" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L457", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_buildingtablerow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L553", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_buildingtypesection" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L679", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_conditionaldndcontext" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/BoardPage.tsx", + "source_location": "L711", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_boardpage_boardpage", + "target": "pages_boardpage_activetab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "pages_comparisonpage_formatposition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_positiontag", + "target": "pages_comparisonpage_formatposition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "pages_comparisonpage_positiontag" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/ComparisonPage.tsx", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_comparisonpage_comparisonpage", + "target": "pages_comparisonpage_memberpositionscell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_landingorsieges" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_slides" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_shieldicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_githubicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_checkicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L128", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_externallinkicon" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_colors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LandingPage.tsx", + "source_location": "L157", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_landingpage_tsx", + "target": "pages_landingpage_landingpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "pages_loginpage_error_messages" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L15", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "pages_loginpage_membership_errors" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/LoginPage.tsx", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_loginpage_loginpage", + "target": "pages_loginpage_mobilebanner" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MemberDetailPage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_memberdetailpage_tsx", + "target": "pages_memberdetailpage_role_options" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_memberspage_rolebadgevariant" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/MembersPage.tsx", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_memberspage_memberspage", + "target": "pages_memberspage_role_variants" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "pages_postprioritiespage_descriptioncell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_postprioritiespage_tsx", + "target": "pages_postprioritiespage_tab" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/PostsPage.tsx", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_postspage_postspage", + "target": "pages_postspage_postrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "pages_siegecreatepage_nexttuesdayfrom" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_suggestnextsiegedate", + "target": "pages_siegecreatepage_nexttuesdayfrom" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "pages_siegecreatepage_formatdatelocal" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_siegecreatepage_suggestnextsiegedate", + "target": "pages_siegecreatepage_formatdatelocal" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegeCreatePage.tsx", + "source_location": "L60", + "weight": 1.0, + "context": "call", + "confidence_score": 1.0, + "source": "pages_siegecreatepage_siegecreatepage", + "target": "pages_siegecreatepage_suggestnextsiegedate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_statusbadgevariant" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_status_variants" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_status_labels" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SiegesPage.tsx", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_pages_siegespage_tsx", + "target": "pages_siegespage_siegespage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L6", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_ui_libraries" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_sectionpanel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_datarow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/pages/SystemPage.tsx", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "pages_systempage_systempage", + "target": "pages_systempage_libraryrow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "frontend/src/types/changelog.d.ts", + "source_location": "L13", + "weight": 1.0, + "confidence_score": 1.0, + "source": "frontend_src_types_changelog_d_ts", + "target": "types_changelog_d_changelogentry" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "scripts_bootstrap_excel_import_ps1" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_bootstrap_excel_import_ps1", + "target": "runbook_azure_keyvault" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "scripts_bootstrap_excel_import_ps1", + "target": "infra_readme_postgres_flexible_server" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "scripts_bootstrap_images_ps1" + }, + { + "relation": "semantically_similar_to", + "confidence": "AMBIGUOUS", + "confidence_score": 0.7, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 0.7, + "source": "concept_bootstrap_images_script", + "target": "scripts_bootstrap_images_ps1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L160", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedmember" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedassignment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L178", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedreserve" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L185", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedpostconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L192", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parsedpostconditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L198", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_importstats" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L224", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_filename_date" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L236", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L241", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_map_building_alias" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L265", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_members_sheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L337", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L445", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L489", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L534", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L570", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_build_group_structure" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L592", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_compute_building_group_structure" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L677", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_infer_building_level" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L719", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1069", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "scripts_excel_import_import_excel_py", + "target": "excel_import_import_excel_collect_xlsm_files" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_1", + "target": "scripts_excel_import_import_excel_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L326", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_members_sheet", + "target": "excel_import_import_excel_parsedmember" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L433", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_assignments_sheet", + "target": "excel_import_import_excel_parsedassignment" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L480", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_reserves_sheet", + "target": "excel_import_import_excel_parsedreserve" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L525", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_posts_sheet_config", + "target": "excel_import_import_excel_parsedpostconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L557", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_posts_sheet_conditions", + "target": "excel_import_import_excel_parsedpostconditions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L784", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_importstats" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L787", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_filename_date" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L225", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_225", + "target": "excel_import_import_excel_parse_filename_date" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L843", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_237", + "target": "excel_import_import_excel_map_role" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L402", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_parse_assignments_sheet", + "target": "excel_import_import_excel_map_building_alias" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_242", + "target": "excel_import_import_excel_map_building_alias" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L814", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_members_sheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L266", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_266", + "target": "excel_import_import_excel_parse_members_sheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L815", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L338", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_338", + "target": "excel_import_import_excel_parse_assignments_sheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L816", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L446", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_446", + "target": "excel_import_import_excel_parse_reserves_sheet" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L823", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L490", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_490", + "target": "excel_import_import_excel_parse_posts_sheet_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L824", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L535", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_535", + "target": "excel_import_import_excel_parse_posts_sheet_conditions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L571", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_571", + "target": "excel_import_import_excel_build_group_structure" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L929", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_compute_building_group_structure" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L597", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_597", + "target": "excel_import_import_excel_compute_building_group_structure" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L934", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_infer_building_level" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L678", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_678", + "target": "excel_import_import_excel_infer_building_level" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L935", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_import_file", + "target": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L727", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_727", + "target": "excel_import_import_excel_create_building_with_groups_and_positions" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L781", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_781", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1073", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_1073", + "target": "excel_import_import_excel_import_file" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/excel-import/import_excel.py", + "source_location": "L1147", + "weight": 1.0, + "confidence_score": 1.0, + "source": "excel_import_import_excel_rationale_1147", + "target": "excel_import_import_excel_collect_xlsm_files" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CHANGELOG.md", + "source_location": null, + "weight": 1.0, + "source": "changelog_v120", + "target": "changelog_suggest_post_assignments" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CHANGELOG.md", + "source_location": null, + "weight": 1.0, + "source": "changelog_v120", + "target": "changelog_group_post_conditions" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CHANGELOG.md", + "source_location": null, + "weight": 1.0, + "source": "changelog_v120", + "target": "changelog_rate_limited_discord_oauth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CHANGELOG.md", + "source_location": null, + "weight": 0.8, + "source": "changelog_v120", + "target": "changelog_v110" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "README.md", + "source_location": null, + "weight": 0.7, + "source": "readme", + "target": "changelog_v120" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CHANGELOG.md", + "source_location": null, + "weight": 0.8, + "source": "changelog_v110", + "target": "changelog_v100" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "weight": 0.9, + "source": "post_suggestions_readme", + "target": "changelog_suggest_post_assignments" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 0.9, + "source": "post_suggestions_plan", + "target": "changelog_suggest_post_assignments" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "CHANGELOG.md", + "source_location": null, + "weight": 0.8, + "source": "changelog_rate_limited_discord_oauth", + "target": "backend_slowapi" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "CHANGELOG.md", + "source_location": null, + "weight": 0.8, + "source": "changelog_rate_limited_discord_oauth", + "target": "claude_discord_oauth2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "claude_backend_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "claude_frontend_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "claude_bot_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "claude_discord_oauth2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "claude_postgresql" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "claude_alembic" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "claude_playwright" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "impl_plan" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_project_overview", + "target": "wdd" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 0.8, + "source": "component_versioning_plan", + "target": "claude_project_overview" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "README.md", + "source_location": null, + "weight": 0.8, + "source": "readme", + "target": "claude_project_overview" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/experiments/graphify-dry-run.md", + "source_location": null, + "weight": 0.8, + "source": "graphify_dryrun", + "target": "claude_project_overview" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_backend_service", + "target": "backend_fastapi" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_backend_service", + "target": "backend_sqlalchemy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_backend_service", + "target": "claude_alembic" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_backend_service", + "target": "claude_postgresql" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_frontend_service", + "target": "claude_backend_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 1.0, + "source": "claude_bot_service", + "target": "claude_backend_service" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 0.8, + "source": "component_versioning_backend_version", + "target": "claude_backend_service" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 0.8, + "source": "component_versioning_frontend_version", + "target": "claude_frontend_service" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 0.9, + "source": "discord_auth_botclient_get_member", + "target": "claude_bot_service" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 0.8, + "source": "component_versioning_bot_version", + "target": "claude_bot_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 0.9, + "source": "wdd_notification_flow", + "target": "claude_bot_service" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 0.9, + "source": "wdd_discord_auth", + "target": "claude_discord_oauth2" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "docs/mockups/mockup-login.html", + "source_location": null, + "weight": 0.7, + "source": "mockup_login", + "target": "claude_discord_oauth2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "weight": 0.8, + "source": "runbook", + "target": "claude_alembic" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_vps_wiki", + "target": "claude_alembic" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "weight": 0.8, + "source": "claude_alembic", + "target": "infra_readme_postgres_flexible_server" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan_phase5", + "target": "claude_playwright" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "CLAUDE.md", + "source_location": null, + "weight": 0.9, + "source": "claude_playwright", + "target": "backend_playwright_dep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercompose_stack", + "target": "dockercompose_postgres" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercompose_stack", + "target": "dockercompose_backend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercompose_stack", + "target": "dockercompose_frontend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercompose_stack", + "target": "dockercompose_bot" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.prod.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercomposeprod_overlay", + "target": "dockercompose_stack" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme", + "target": "dockercompose_stack" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Getting-Started.md", + "source_location": null, + "weight": 1.0, + "source": "getting_started_wiki", + "target": "dockercompose_stack" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_vps_wiki", + "target": "dockercompose_stack" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercompose_backend", + "target": "dockercompose_postgres" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercompose_bot", + "target": "dockercompose_postgres" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docker-compose.yml", + "source_location": null, + "weight": 1.0, + "source": "dockercompose_frontend", + "target": "dockercompose_backend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "backend/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "backend_requirements", + "target": "backend_fastapi" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "backend/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "backend_requirements", + "target": "backend_sqlalchemy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "backend/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "backend_requirements", + "target": "backend_asyncpg" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "backend/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "backend_requirements", + "target": "backend_pyjwt" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "backend/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "backend_requirements", + "target": "backend_slowapi" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "backend/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "backend_requirements", + "target": "backend_playwright_dep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "backend/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "backend_requirements", + "target": "backend_otel" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 0.9, + "source": "discord_auth_get_current_user", + "target": "backend_fastapi" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "excel_import_readme_scripts", + "target": "backend_asyncpg" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "weight": 0.85, + "source": "excel_import_readme_import_members_py", + "target": "backend_asyncpg" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 1.0, + "source": "discord_auth_get_current_user", + "target": "backend_pyjwt" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 1.0, + "source": "discord_auth_jwt_cookie", + "target": "backend_pyjwt" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "weight": 0.9, + "source": "runbook_app_insights", + "target": "backend_otel" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "bot/requirements-dev.txt", + "source_location": null, + "weight": 1.0, + "source": "bot_requirements_dev", + "target": "bot_requirements" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "bot/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "bot_requirements", + "target": "bot_discordpy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "bot/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "bot_requirements", + "target": "bot_fastapi" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan_phase5", + "target": "bot_discordpy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_phase0" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_phase1" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_phase2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_phase3" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_phase4" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_phase5" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_phase6" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "impl_plan_buildingtypeconfig" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan", + "target": "wdd" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 0.8, + "source": "impl_plan_phase1", + "target": "wdd_siege_model" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan_phase4", + "target": "wdd_validation_rules" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan_phase4", + "target": "wdd_autofill_algorithm" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/IMPLEMENTATION_PLAN.md", + "source_location": null, + "weight": 1.0, + "source": "impl_plan_phase4", + "target": "wdd_attack_day_algorithm" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 0.9, + "source": "wdd", + "target": "impl_plan_buildingtypeconfig" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/siege_levels.md", + "source_location": null, + "weight": 0.8, + "source": "siege_levels", + "target": "impl_plan_buildingtypeconfig" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "weight": 1.0, + "source": "runbook", + "target": "runbook_azure_container_apps" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "weight": 1.0, + "source": "runbook", + "target": "runbook_azure_keyvault" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "weight": 1.0, + "source": "runbook", + "target": "runbook_azure_postgresql" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "weight": 1.0, + "source": "runbook", + "target": "runbook_app_insights" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/RUNBOOK.md", + "source_location": null, + "weight": 1.0, + "source": "runbook", + "target": "runbook_log_analytics" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_keyvault_bicep", + "target": "runbook_azure_keyvault" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_siege_api", + "target": "runbook_azure_keyvault" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_siege_bot", + "target": "runbook_azure_keyvault" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "runbook_azure_keyvault" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "concept_managed_identity", + "target": "runbook_azure_keyvault" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "runbook_log_analytics" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.85, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 0.85, + "source": "runbook_log_analytics", + "target": "concept_app_insights" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_log_analytics_bicep", + "target": "runbook_log_analytics" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_siege_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_building_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_member_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_position_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_post_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_postcondition_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_validation_rules" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_autofill_algorithm" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_attack_day_algorithm" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_discord_auth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd", + "target": "wdd_notification_flow" + }, + { + "relation": "shares_data_with", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd_siege_model", + "target": "wdd_building_model" + }, + { + "relation": "shares_data_with", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd_building_model", + "target": "wdd_position_model" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/siege_levels.md", + "source_location": null, + "weight": 0.8, + "source": "siege_levels", + "target": "wdd_building_model" + }, + { + "relation": "shares_data_with", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd_position_model", + "target": "wdd_member_model" + }, + { + "relation": "shares_data_with", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 0.9, + "source": "wdd_member_model", + "target": "wdd_postcondition_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 0.9, + "source": "post_suggestions_plan", + "target": "wdd_member_model" + }, + { + "relation": "shares_data_with", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/WEB_DESIGN_DOCUMENT.md", + "source_location": null, + "weight": 1.0, + "source": "wdd_post_model", + "target": "wdd_postcondition_model" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "weight": 0.8, + "source": "post_suggestions_readme", + "target": "wdd_post_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 0.9, + "source": "post_suggestions_plan", + "target": "wdd_post_model" + }, + { + "relation": "conceptually_related_to", + "confidence": "EXTRACTED", + "confidence_score": 0.85, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 0.8, + "source": "post_suggestions_plan", + "target": "wdd_autofill_algorithm" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 0.8, + "source": "post_suggestions_service", + "target": "wdd_autofill_algorithm" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 1.0, + "source": "discord_auth_impl_plan", + "target": "wdd_discord_auth" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "frontend/src/components/PostSuggestionsModal.tsx", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "post_suggestions_readme", + "target": "post_suggestions_schema" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_readme", + "target": "post_suggestions_difflist" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_readme", + "target": "post_suggestions_assignmententry" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "weight": 0.9, + "source": "post_suggestions_readme", + "target": "post_suggestions_plan" + }, + { + "relation": "shares_data_with", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_difflist", + "target": "post_suggestions_assignmententry" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "docs/design-refs/post-suggestions/README.md", + "source_location": null, + "weight": 0.9, + "source": "post_suggestions_assignmententry", + "target": "post_suggestions_schema" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", + "source_location": null, + "weight": 1.0, + "source": "public_launch_plan", + "target": "mockup_landing" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", + "source_location": null, + "weight": 1.0, + "source": "public_launch_plan", + "target": "mockup_login" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", + "source_location": null, + "weight": 1.0, + "source": "public_launch_plan", + "target": "self_host_anywhere" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", + "source_location": null, + "weight": 1.0, + "source": "public_launch_plan", + "target": "self_host_azure" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme", + "target": "self_host_anywhere" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme", + "target": "self_host_azure" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 1.0, + "source": "discord_auth_impl_plan", + "target": "discord_auth_get_current_user" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 1.0, + "source": "discord_auth_impl_plan", + "target": "discord_auth_botclient_get_member" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", + "source_location": null, + "weight": 1.0, + "source": "discord_auth_impl_plan", + "target": "discord_auth_jwt_cookie" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 1.0, + "source": "component_versioning_plan", + "target": "component_versioning_backend_version" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 1.0, + "source": "component_versioning_plan", + "target": "component_versioning_bot_version" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 1.0, + "source": "component_versioning_plan", + "target": "component_versioning_frontend_version" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 1.0, + "source": "component_versioning_plan", + "target": "component_versioning_ci_gate" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", + "source_location": null, + "weight": 1.0, + "source": "component_versioning_plan", + "target": "contributing" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_plan", + "target": "post_suggestions_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_plan", + "target": "post_suggestions_api" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_plan", + "target": "post_suggestions_schema" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_plan", + "target": "post_suggestions_greedy_algo" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_service", + "target": "post_suggestions_greedy_algo" + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_api", + "target": "post_suggestions_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", + "source_location": null, + "weight": 1.0, + "source": "post_suggestions_api", + "target": "post_suggestions_schema" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CONTRIBUTING.md", + "source_location": null, + "weight": 1.0, + "source": "contributing", + "target": "readme" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme", + "target": "code_of_conduct" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CONTRIBUTING.md", + "source_location": null, + "weight": 1.0, + "source": "contributing", + "target": "code_of_conduct" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "CONTRIBUTING.md", + "source_location": null, + "weight": 1.0, + "source": "contributing", + "target": "support" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_main_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_registry_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_log_analytics_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_app_insights_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_postgres_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_keyvault_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_container_env_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "infra_readme_container_apps_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_infrastructure", + "target": "self_host_azure_wiki" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_main_bicep", + "target": "infra_readme_registry_bicep" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_main_bicep", + "target": "infra_readme_log_analytics_bicep" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_main_bicep", + "target": "infra_readme_app_insights_bicep" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_main_bicep", + "target": "infra_readme_postgres_bicep" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_main_bicep", + "target": "infra_readme_keyvault_bicep" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_main_bicep", + "target": "infra_readme_container_env_bicep" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_main_bicep", + "target": "infra_readme_container_apps_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_main_bicep", + "target": "infra_readme_main_bicepparam" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_main_bicep", + "target": "infra_readme_main_prod_bicepparam" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_main_bicep" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_registry_bicep", + "target": "infra_readme_azure_container_registry" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 0.85, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.85, + "source": "infra_readme_registry_bicep", + "target": "infra_readme_weekly_purge_task" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_app_insights_bicep", + "target": "concept_app_insights" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_postgres_bicep", + "target": "infra_readme_postgres_flexible_server" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_container_env_bicep", + "target": "infra_readme_container_apps_environment" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_container_apps_bicep", + "target": "infra_readme_siege_api" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_container_apps_bicep", + "target": "infra_readme_siege_bot" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_container_apps_bicep", + "target": "infra_readme_siege_frontend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_container_apps_bicep" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_azure_container_registry" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.95, + "source": "infra_readme_siege_api", + "target": "infra_readme_postgres_flexible_server" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "infra/README.md", + "source_location": null, + "weight": 0.9, + "source": "infra_readme_siege_bot", + "target": "infra_readme_postgres_flexible_server" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "weight": 0.8, + "source": "self_host_vps_wiki", + "target": "infra_readme_postgres_flexible_server" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_postgres_flexible_server" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_weekly_purge_task", + "target": "infra_readme_siege_api" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_siege_api" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_weekly_purge_task", + "target": "infra_readme_siege_bot" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_siege_bot" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "infra/README.md", + "source_location": null, + "weight": 1.0, + "source": "infra_readme_weekly_purge_task", + "target": "infra_readme_siege_frontend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_siege_frontend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "infra_readme_main_prod_bicepparam" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/excel-import/README.md", + "source_location": null, + "weight": 1.0, + "source": "excel_import_readme_scripts", + "target": "excel_import_readme_seed_db_py" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/excel-import/README.md", + "source_location": null, + "weight": 1.0, + "source": "excel_import_readme_scripts", + "target": "excel_import_readme_run_migrations_sh" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/excel-import/README.md", + "source_location": null, + "weight": 1.0, + "source": "excel_import_readme_scripts", + "target": "excel_import_readme_import_members_py" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "excel_import_readme_scripts", + "target": "requirements_openpyxl" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "excel_import_readme_scripts", + "target": "requirements_sqlalchemy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "excel_import_readme_scripts", + "target": "requirements_python_dotenv" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "weight": 0.85, + "source": "excel_import_readme_import_members_py", + "target": "requirements_sqlalchemy" + }, + { + "relation": "references", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "scripts/excel-import/requirements.txt", + "source_location": null, + "weight": 0.75, + "source": "excel_import_readme_import_members_py", + "target": "requirements_openpyxl" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/FAQ.md", + "source_location": null, + "weight": 1.0, + "source": "faq_wiki", + "target": "self_host_vps_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/FAQ.md", + "source_location": null, + "weight": 1.0, + "source": "faq_wiki", + "target": "self_host_azure_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Getting-Started.md", + "source_location": null, + "weight": 1.0, + "source": "getting_started_wiki", + "target": "faq_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Home.md", + "source_location": null, + "weight": 1.0, + "source": "home_wiki", + "target": "faq_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/_Sidebar.md", + "source_location": null, + "weight": 1.0, + "source": "sidebar_wiki", + "target": "faq_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Getting-Started.md", + "source_location": null, + "weight": 1.0, + "source": "getting_started_wiki", + "target": "self_host_vps_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Getting-Started.md", + "source_location": null, + "weight": 1.0, + "source": "getting_started_wiki", + "target": "self_host_azure_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Home.md", + "source_location": null, + "weight": 1.0, + "source": "home_wiki", + "target": "getting_started_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/_Sidebar.md", + "source_location": null, + "weight": 1.0, + "source": "sidebar_wiki", + "target": "getting_started_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Home.md", + "source_location": null, + "weight": 1.0, + "source": "home_wiki", + "target": "self_host_vps_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Home.md", + "source_location": null, + "weight": 1.0, + "source": "home_wiki", + "target": "self_host_azure_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Home.md", + "source_location": null, + "weight": 1.0, + "source": "home_wiki", + "target": "concept_rsl_siege_manager" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/_Sidebar.md", + "source_location": null, + "weight": 1.0, + "source": "sidebar_wiki", + "target": "home_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "self_host_vps_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_vps_wiki", + "target": "concept_discord_oauth2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Any-VPS.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_vps_wiki", + "target": "concept_caddy_reverse_proxy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/_Sidebar.md", + "source_location": null, + "weight": 1.0, + "source": "sidebar_wiki", + "target": "self_host_vps_wiki" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "concept_github_actions" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "concept_deploy_workflow" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "concept_infra_deploy_workflow" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "concept_managed_identity" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "concept_app_insights" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "concept_bootstrap_images_script" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/Self-Host-on-Azure.md", + "source_location": null, + "weight": 1.0, + "source": "self_host_azure_wiki", + "target": "concept_discord_oauth2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "wiki/_Sidebar.md", + "source_location": null, + "weight": 1.0, + "source": "sidebar_wiki", + "target": "self_host_azure_wiki" + } + ], + "hyperedges": [], + "built_at_commit": "6085fd660692d0eade02696128e186f03f2c8f5e" +} \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out/manifest.json b/evaluations/rsl-siege-manager/graphify-out/manifest.json new file mode 100644 index 00000000..87e0f395 --- /dev/null +++ b/evaluations/rsl-siege-manager/graphify-out/manifest.json @@ -0,0 +1,918 @@ +{ + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\env.py": { + "mtime": 1778710280.615952, + "hash": "731374a0c60b7a3d7ab4fe969af77cdc" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0001_initial_schema.py": { + "mtime": 1778710280.6174564, + "hash": "89da22558cc25f69a85fdb95c5226094" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0002_add_preview_columns.py": { + "mtime": 1778710280.6174564, + "hash": "7272088a42b67a8e4808eb3c9b7dd696" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0003_make_siege_date_nullable.py": { + "mtime": 1778710280.6174564, + "hash": "2e9c3427061e4be701fe13af654dff62" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0004_add_post_priority_config.py": { + "mtime": 1778710280.6174564, + "hash": "6dfb516e649bc98b4af75c6d72217b55" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0005_add_description_to_post_priority_config.py": { + "mtime": 1778710280.6184616, + "hash": "610068cb10304ae4dbcc7bc71a32e78c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0006_power_level_and_drop_sort_value.py": { + "mtime": 1778710280.6184616, + "hash": "8182ba42f31e35ef28f5c4d9dabfde1c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0007_fix_group_number_max.py": { + "mtime": 1778710280.6184616, + "hash": "4b47bdeebb46156e514a5b067df94235" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0008_add_matched_condition_id_to_position.py": { + "mtime": 1778710280.6184616, + "hash": "c954ca95fdadd4a7ef20ffa633d12fed" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0009_add_discord_id_to_member.py": { + "mtime": 1778710280.6194618, + "hash": "dcf300cf8ed80c1b8b3825bcca67e245" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0010_add_last_seen_changelog_at_to_member.py": { + "mtime": 1778710280.6194618, + "hash": "611bcc51cacb45fa38a397483251978e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0011_add_post_suggest_preview.py": { + "mtime": 1778710280.6194618, + "hash": "c2911c522068032d232ebdda418ae402" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\config.py": { + "mtime": 1778710280.6260061, + "hash": "af7166f36bc6603c51a31821b4169166" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\main.py": { + "mtime": 1778710280.6275196, + "hash": "ef3a111d022f595379cdfc5e4949daf0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\middleware.py": { + "mtime": 1778710280.6275196, + "hash": "4f8742627daa35dd41d30076e24f6215" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\rate_limit.py": { + "mtime": 1778710280.631044, + "hash": "d19e5a629177df85c43e3c14f4dc0d46" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\telemetry.py": { + "mtime": 1778710280.639125, + "hash": "0c58ed46b46a65c553da095108b27bfd" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\__init__.py": { + "mtime": 1778710280.6194618, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\attack_day.py": { + "mtime": 1778710280.6204622, + "hash": "03d01cbf514354d406ed91fbc65b35a1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\auth.py": { + "mtime": 1778710280.6204622, + "hash": "a5f33d846d98152318daec3a46d0d248" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\autofill.py": { + "mtime": 1778710280.6204622, + "hash": "a09d58b4a1d3c5af8f5c8a3ba6a7029e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\board.py": { + "mtime": 1778710280.621461, + "hash": "aaeb8712e563ba3dec103df4a3fc04ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\buildings.py": { + "mtime": 1778710280.621461, + "hash": "ffdd155eb162bceae062773746e4a736" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\changelog.py": { + "mtime": 1778710280.621461, + "hash": "46c813936a455f15a7b9c81d21193278" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\comparison.py": { + "mtime": 1778710280.621461, + "hash": "ddca1ab6be65dc3372ad48159b99f019" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\config.py": { + "mtime": 1778710280.6224627, + "hash": "4cfef35cbf17cda161b15128a218884a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\discord_sync.py": { + "mtime": 1778710280.6224627, + "hash": "4af25fe7f78cdd7ed0a19b43a6c0d944" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\health.py": { + "mtime": 1778710280.6224627, + "hash": "7e3eb64485f05fe2e50e5681ca1f0932" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\images.py": { + "mtime": 1778710280.6224627, + "hash": "bdbf492718a5d11dd6b98c1d639931ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\lifecycle.py": { + "mtime": 1778710280.6234608, + "hash": "224fbb28b68c1d85ac358d96f4d8d307" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\members.py": { + "mtime": 1778710280.6234608, + "hash": "fade885c4c9b9ac20cccbc9b1022ea02" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\notifications.py": { + "mtime": 1778710280.6234608, + "hash": "ff2badd250e6e4abd60f76c17bf197a9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\posts.py": { + "mtime": 1778710280.6234608, + "hash": "8f342e23f193f2ba528ee0f2ea924710" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\post_priority_config.py": { + "mtime": 1778710280.6234608, + "hash": "6cbb8addbb8fbbf729b2938cd64e4077" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\post_suggestions.py": { + "mtime": 1778710280.6234608, + "hash": "57ba4074cf0d1413e5604e6c20c458ba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\reference.py": { + "mtime": 1778710280.6249774, + "hash": "e723050f84384dc9adcdb7796fd5a105" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\sieges.py": { + "mtime": 1778710280.6249774, + "hash": "e2f544c55968478ef4b80943fcda6ccc" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\siege_members.py": { + "mtime": 1778710280.6249774, + "hash": "f2eb1fd29b959b826008f6a627da9c0d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\validation.py": { + "mtime": 1778710280.6249774, + "hash": "05d95e278dfb5f2da15598253b2ec32e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\version.py": { + "mtime": 1778710280.6249774, + "hash": "72b877fef624fbab48f6170475e4482b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\__init__.py": { + "mtime": 1778710280.6204622, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\base.py": { + "mtime": 1778710280.6260061, + "hash": "16deb2759f7de2cf86f328dce6b2d38b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\seeds.py": { + "mtime": 1778710280.6260061, + "hash": "c1238d95afe54852c9f8e4946bcd1184" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\session.py": { + "mtime": 1778710280.6260061, + "hash": "d83e8d560833942da095e4e77ef715a0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\__init__.py": { + "mtime": 1778710280.6260061, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\dependencies\\auth.py": { + "mtime": 1778710280.6260061, + "hash": "1e13ad83f41440240858e379bc350e32" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\dependencies\\__init__.py": { + "mtime": 1778710280.6260061, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building.py": { + "mtime": 1778710280.6275196, + "hash": "264dd9c1b5b9af8261e39ef40bb56d0d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building_group.py": { + "mtime": 1778710280.6285377, + "hash": "9e4fe949454ac06e8919c54d17cd053f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building_type_config.py": { + "mtime": 1778710280.6285377, + "hash": "8d46f6dce4eefc61342e1a5084563f76" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\enums.py": { + "mtime": 1778710280.6285377, + "hash": "bbcd730b23b6ae966f00a7b209dfa1ba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\member.py": { + "mtime": 1778710280.6285377, + "hash": "00c8c2af6e5087bcdf9b485d8f32afab" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\member_post_preference.py": { + "mtime": 1778710280.6295295, + "hash": "9b9b1f5de349977ad8897398d6698ef8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\notification_batch.py": { + "mtime": 1778710280.6295295, + "hash": "3ad5726f0ca19a456eb02ac12dbb4f89" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\notification_batch_result.py": { + "mtime": 1778710280.6295295, + "hash": "c4fd788d9d88b1b994a35cf770b7d875" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\position.py": { + "mtime": 1778710280.6300344, + "hash": "d1bafc8772229db93351d7e179c15ea3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post.py": { + "mtime": 1778710280.6300344, + "hash": "6d62df6899ba21737f61bb917210dad0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_active_condition.py": { + "mtime": 1778710280.6300344, + "hash": "ab9b5ba959ad8c87635a5565cc7a6857" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_condition.py": { + "mtime": 1778710280.6300344, + "hash": "9fc05e2a8819db37bc7bd224f8c2db67" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_priority_config.py": { + "mtime": 1778710280.6300344, + "hash": "21b1c5860d8e42fef07463b5bf52ceab" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\siege.py": { + "mtime": 1778710280.631044, + "hash": "ac548c74c451dca2c84d9d039de46b6a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\siege_member.py": { + "mtime": 1778710280.631044, + "hash": "24f74c67df2a8375175a818e2ef592be" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\__init__.py": { + "mtime": 1778710280.6275196, + "hash": "002c14a2213747661b77b5a30b8d3110" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\attack_day.py": { + "mtime": 1778710280.631044, + "hash": "6636af44aa1f3f3079f864b3c8bb9cac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\autofill.py": { + "mtime": 1778710280.6320436, + "hash": "261012c1a7cdae9c401576016a1e0535" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\board.py": { + "mtime": 1778710280.6320436, + "hash": "c69579e0609dceba1fafa087eda2405e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\building.py": { + "mtime": 1778710280.6320436, + "hash": "17a76e00a22acfa311063cf3bf0aceb1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\changelog.py": { + "mtime": 1778710280.6320436, + "hash": "f86a9e09fe755643a15a7f7b06a4f7e7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\common.py": { + "mtime": 1778710280.6320436, + "hash": "011d46dc2203c3ed97184cec370ac179" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\comparison.py": { + "mtime": 1778710280.6320436, + "hash": "48ffa2ab0f4f95040236b6611ed375d0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\member.py": { + "mtime": 1778710280.6320436, + "hash": "726dad9ff8c7a8bffd365ddcfd543645" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post.py": { + "mtime": 1778710280.6335557, + "hash": "ff0149eb24572e4ba21fa191a73c762f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post_condition.py": { + "mtime": 1778710280.6335557, + "hash": "6fec8cfb3b2eea536953026b0116b4af" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post_suggestions.py": { + "mtime": 1778710280.6335557, + "hash": "7db30a2f2f5a9232d8a783a85ee2df6a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\siege.py": { + "mtime": 1778710280.6335557, + "hash": "1178a2cb1bc13ec3defa148e36991683" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\siege_member.py": { + "mtime": 1778710280.6335557, + "hash": "45b79b07f1d489b2daef9b719a0a0929" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\validation.py": { + "mtime": 1778710280.6335557, + "hash": "0221b358c7f777442cde715c227ac6ca" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\version.py": { + "mtime": 1778710280.6335557, + "hash": "b2fbcf0d416ddb9f1997acd6cb62bcf3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\__init__.py": { + "mtime": 1778710280.631044, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\attack_day.py": { + "mtime": 1778710280.6350994, + "hash": "997ffc05e8c23b0a544979ae0ed8dc7a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\autofill.py": { + "mtime": 1778710280.6350994, + "hash": "e9ce9ddf48273c0d9932f75ea8e8b0be" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\board.py": { + "mtime": 1778710280.6350994, + "hash": "7222c72b83f1091828c689f490ebcfe6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\bot_client.py": { + "mtime": 1778710280.6350994, + "hash": "b699c8adf0b08521c02f3e6a4072c1ef" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\buildings.py": { + "mtime": 1778710280.6361103, + "hash": "22d3b48b747d63585084db712f7526ff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\building_capacity.py": { + "mtime": 1778710280.6361103, + "hash": "5b463b5af305f54cd34e75e568756db9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\comparison.py": { + "mtime": 1778710280.6361103, + "hash": "17d8b0f29ef13d8a469dcbe79e5e0b18" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\discord_sync.py": { + "mtime": 1778710280.6361103, + "hash": "0fdbe1441877c11241501e6f37e6874a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\image_gen.py": { + "mtime": 1778710280.6361103, + "hash": "42d66ff5cc72422b6cffdce18e7b88e9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\lifecycle.py": { + "mtime": 1778710280.6376143, + "hash": "c6850f4b0ee921550d23553aa50db9ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\members.py": { + "mtime": 1778710280.6376143, + "hash": "1586e16427694996d81ce4d54812c5f0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\notification_message.py": { + "mtime": 1778710280.6376143, + "hash": "514ad0558f51c114a96e8316cd4392bf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\posts.py": { + "mtime": 1778710280.63862, + "hash": "56792826d430eaa6cdd86796ddb43c10" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\post_suggestions.py": { + "mtime": 1778710280.63862, + "hash": "4a62a36d881bf55a4f73b623b95738bf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\reference.py": { + "mtime": 1778710280.639125, + "hash": "e86f9864edb3e0eaa1a5e00cd2b903a9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\sieges.py": { + "mtime": 1778710280.639125, + "hash": "4f43c0760d92d03cc1062ba4b7610dba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\siege_members.py": { + "mtime": 1778710280.639125, + "hash": "444d8aba42f567d23a8b1a5a12e51200" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\validation.py": { + "mtime": 1778710280.639125, + "hash": "bf8431f5d8b0c8dc793ed927f6de075f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\__init__.py": { + "mtime": 1778710280.6335557, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\scripts\\seed.py": { + "mtime": 1778710280.640529, + "hash": "08609621e397256df55a763eb98530c3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\scripts\\seed_demo.py": { + "mtime": 1778710280.6415303, + "hash": "ef5c21e671c3184b5cbb2240979c0690" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\config.py": { + "mtime": 1778710280.65144, + "hash": "b80130299a391da986cfd02386e5dea7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\discord_client.py": { + "mtime": 1778710280.65144, + "hash": "99db4ab6cf0ecc3d30602e2b8db66a70" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\http_api.py": { + "mtime": 1778710280.65144, + "hash": "936ed9c6f1e4443f5035d0de3340329e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\main.py": { + "mtime": 1778710280.6519608, + "hash": "e05678b35f14c576d1cd2ee7f0ee86b0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\telemetry.py": { + "mtime": 1778710280.6519608, + "hash": "a42e02bf2fddd81cca77baa570cdc1ac" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\__init__.py": { + "mtime": 1778710280.650921, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\eslint.config.js": { + "mtime": 1778710280.6638145, + "hash": "820d67ddf4af94ab7a60b247ef568493" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\playwright.config.ts": { + "mtime": 1778710280.6663249, + "hash": "c0c6f46da1f83e4dad062bf96a1645ce" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\postcss.config.js": { + "mtime": 1778710280.6663249, + "hash": "33fad9c02cb0ec6d6030369ef6347d57" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\tailwind.config.ts": { + "mtime": 1778710280.6950474, + "hash": "ab2458852a94f3918fc4dc8eec8ee34a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\vite.config.ts": { + "mtime": 1778710280.6955535, + "hash": "f0b8bf87fac76c40d6423f702e2a122d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\vitest.config.ts": { + "mtime": 1778710280.6955535, + "hash": "e102be79d7bf6fd8b83320963d3d4d00" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\board.spec.ts": { + "mtime": 1778710280.6618135, + "hash": "2e1ab122df18ca111301f5244c1b4903" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\members.spec.ts": { + "mtime": 1778710280.6618135, + "hash": "012b10ee19afe7952752bdb34d947596" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\siege-lifecycle.spec.ts": { + "mtime": 1778710280.6638145, + "hash": "d3c27ac7e90b3bb5f190694f8d692f6c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\smoke.spec.ts": { + "mtime": 1778710280.6638145, + "hash": "7ffc073a7b7ce29603e7b1dda85b101b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\App.tsx": { + "mtime": 1778710280.6731784, + "hash": "dc94be0210c5307affde3c5e0e5412b7" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\main.tsx": { + "mtime": 1778710280.6834679, + "hash": "5310a6bf9e3bdf98dc615af3ceff1537" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\vite-env.d.ts": { + "mtime": 1778710280.6950474, + "hash": "0352474ba2918efe13895edbc3780d94" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\board.ts": { + "mtime": 1778710280.6731784, + "hash": "997fae78645cd70b5c2fc3476313e4c1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\changelog.ts": { + "mtime": 1778710280.6731784, + "hash": "9baa9e3d2be3e4bb566ba86923829a17" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\client.ts": { + "mtime": 1778710280.6746829, + "hash": "10a76391bc7690246d448e867cf7af57" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\config.ts": { + "mtime": 1778710280.6746829, + "hash": "3715d4f6dd51e505949f4b0f7ec9b309" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\members.ts": { + "mtime": 1778710280.6752062, + "hash": "385a652bab3624eb1a556666b369c7be" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\notifications.ts": { + "mtime": 1778710280.6752062, + "hash": "b202ca64e4f5445d309fa8cede22ff0c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\posts.ts": { + "mtime": 1778710280.6752062, + "hash": "42847a5a2b91ef16e25b1be64c9c5955" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\sieges.ts": { + "mtime": 1778710280.6752062, + "hash": "f1014577b76ed9125141f290e8fb7578" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\types.ts": { + "mtime": 1778710280.6752062, + "hash": "f83637e41fcfc597e14c140b81e74a63" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\version.ts": { + "mtime": 1778710280.6762116, + "hash": "3c320e1ae650ccfaf0fcc58db6f0ad8c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\Carousel.tsx": { + "mtime": 1778710280.6772118, + "hash": "9c1e5964f8b5e400f963606ee0cd4eb9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ChangelogDropdown.tsx": { + "mtime": 1778710280.6772118, + "hash": "32af80944e867e66ec8cf25f6391e233" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\DiscordSyncModal.tsx": { + "mtime": 1778710280.6772118, + "hash": "52ea2cf5bf019ad4e9c376a447e87eaa" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\GroupByToggle.tsx": { + "mtime": 1778710280.6772118, + "hash": "78856592b8aaeb706087c4ef1e6c843b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\Layout.tsx": { + "mtime": 1778710280.6772118, + "hash": "e813042f31449a0de61f906090164004" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\PostsTab.tsx": { + "mtime": 1778710280.678212, + "hash": "3f11fa6d290cff08dffcc9262a092b3a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\PostSuggestionsModal.tsx": { + "mtime": 1778710280.678212, + "hash": "9c16b7f40b7352b2f423f7ce46a68b11" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\RequireAuth.tsx": { + "mtime": 1778710280.678212, + "hash": "cd2b2e1cd2d319fc3f3977f7589f291e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\SiegeLayout.tsx": { + "mtime": 1778710280.679212, + "hash": "5dc89034188b6823763f9c6852f5f03a" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\badge.tsx": { + "mtime": 1778710280.679212, + "hash": "639942830535b4f2bb8e21e8d3a674e4" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\button.tsx": { + "mtime": 1778710280.679212, + "hash": "99376e90207bb72645519879a6ad87aa" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\checkbox.tsx": { + "mtime": 1778710280.679212, + "hash": "596afb4c85e5b432c24e2606e9623bf8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\dialog.tsx": { + "mtime": 1778710280.679212, + "hash": "b917e9be88d5dc6b1b6d2660df3be9a0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\dropdown-menu.tsx": { + "mtime": 1778710280.6804683, + "hash": "8f8f3621f203e9d7d566ed3827ddb95c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\input.tsx": { + "mtime": 1778710280.6804683, + "hash": "4f418a1677a7fa837b7a5f16b05eabea" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\label.tsx": { + "mtime": 1778710280.6804683, + "hash": "ede7445a0bd4c9380bff1fb664d21763" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\select.tsx": { + "mtime": 1778710280.6804683, + "hash": "594f45397eb2ac6bd77df7b7e37d5644" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\table.tsx": { + "mtime": 1778710280.681468, + "hash": "0e1676ab2a771ea388b5fa63036cd502" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\textarea.tsx": { + "mtime": 1778710280.681468, + "hash": "4118508b3f819ceaee3b0d5f16bbb649" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\context\\AuthContext.tsx": { + "mtime": 1778710280.681468, + "hash": "44ab8c9079dffb96a8f0826540377cb3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\buildingColors.ts": { + "mtime": 1778710280.6824672, + "hash": "b348eff15681381b572787a373b909ce" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\groupPostConditions.ts": { + "mtime": 1778710280.6824672, + "hash": "788b0f8427b263370cdab41d8850cf41" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\post-priority.ts": { + "mtime": 1778710280.6824672, + "hash": "94e7a97549b23802f43bb3f6ac6c28cc" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\postConditionTypes.ts": { + "mtime": 1778710280.6834679, + "hash": "3b06353374f1df46ea8de1cfd4afd788" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\useGroupByPreference.ts": { + "mtime": 1778710280.6834679, + "hash": "bb6b5032d31d41e56bfa0c1462240482" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\utils.ts": { + "mtime": 1778710280.6834679, + "hash": "d9837f38cc05303254571985e3164050" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\BoardPage.tsx": { + "mtime": 1778710280.6834679, + "hash": "ca60bdc402bf7fc73d45bf4a9786efa2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\ComparisonPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "5f40cf11f1c285fcc713c66f6b70cc7e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\LandingPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "0592d360b4d150e643f2ed7d853cec37" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\LoginPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "a7f86666a5e860fa06370cd44d5b2009" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\MemberDetailPage.tsx": { + "mtime": 1778710280.6849875, + "hash": "91d2961273fc9f2065dd82b95a4dd2e6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\MembersPage.tsx": { + "mtime": 1778710280.6860092, + "hash": "0e20169e021eddba33936ff03cb09ed6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\PostPrioritiesPage.tsx": { + "mtime": 1778710280.6860092, + "hash": "44ba6c946c49e4491f401a05ada7b0ce" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\PostsPage.tsx": { + "mtime": 1778710280.6860092, + "hash": "6299292c6d99e49321c62ebd458b5a3f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeCreatePage.tsx": { + "mtime": 1778710280.6860092, + "hash": "2889e8903df72e1ab56a1a1a13ef0519" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeMembersPage.tsx": { + "mtime": 1778710280.687007, + "hash": "864268a2bc137e9b39782eb85260adff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeSettingsPage.tsx": { + "mtime": 1778710280.687007, + "hash": "f594078ade4735208a55056c7cf4dd5f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegesPage.tsx": { + "mtime": 1778710280.687007, + "hash": "f93156052c5124138148122147b74acb" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SystemPage.tsx": { + "mtime": 1778710280.687007, + "hash": "9332c96da0f1502dbb14d6f1d7164aaa" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\types\\changelog.d.ts": { + "mtime": 1778710280.6940484, + "hash": "29f6e6e4d1a48ca3686c20d21c03dc3c" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-db.ps1": { + "mtime": 1778710280.7000616, + "hash": "2963ef492dbaa1e8aed3c7d0b42cb2bf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-excel-import.ps1": { + "mtime": 1778710280.7010694, + "hash": "833c292e832a70a4d642e969418cec01" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-images.ps1": { + "mtime": 1778710280.701412, + "hash": "770e3450dec21a6498dd9380f2070049" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-keyvault.ps1": { + "mtime": 1778710280.701412, + "hash": "571c851084af0db873bdc82226b59797" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-reimport.ps1": { + "mtime": 1778710280.701412, + "hash": "39d7a16633e94d6cefeb8aca40862cff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\generate-origin-pfx.ps1": { + "mtime": 1778710280.7034204, + "hash": "b0900217644486cdf9adf852befa4fde" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\rebuild.ps1": { + "mtime": 1778710280.7034204, + "hash": "1b5123763516e1ee3dbc308f2638eb4f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\import_excel.py": { + "mtime": 1778710280.70243, + "hash": "4151fee1079d2b495340976e008542dd" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\tests\\__init__.py": { + "mtime": 1778710280.70243, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\experiments\\run-graphify-dry-run.ps1": { + "mtime": 1778715097.451517, + "hash": "8a66f56768d8c9b2b04c9d03452a8285" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CHANGELOG.md": { + "mtime": 1778710280.6144302, + "hash": "0c5a48d5f48933acad20d931797847b0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CLAUDE.md": { + "mtime": 1778710280.614946, + "hash": "efb936d1d3711ed3ca65b394f9d6b9b2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CODE_OF_CONDUCT.md": { + "mtime": 1778710280.614946, + "hash": "9b2d51a163a531cb2f62e72697b0ccc1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CONTRIBUTING.md": { + "mtime": 1778710280.614946, + "hash": "f1099f1c0582333df2fabef4dccad223" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docker-compose.prod.yml": { + "mtime": 1778710280.6545522, + "hash": "e55ffd8443f4dd9cf1acb386a7956bfb" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docker-compose.yml": { + "mtime": 1778710280.6550682, + "hash": "376b6eb4a3cfab39144103477cea42cf" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\README.md": { + "mtime": 1778710280.615952, + "hash": "8b4ba27465aa3d5dfd16ed64c6cbf45f" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\SUPPORT.md": { + "mtime": 1778710280.615952, + "hash": "64c8848cde6a11b59d25bcc9b621e546" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\requirements-dev.txt": { + "mtime": 1778710280.640529, + "hash": "61ce4838a8959c3c183db9bab83b737d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\requirements.txt": { + "mtime": 1778710280.640529, + "hash": "b06051b552c2ea4732940c0dbc2b9db0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\requirements-dev.txt": { + "mtime": 1778710280.6524813, + "hash": "cf6fc69a9af8b95f5758cac0a94bb9e6" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\requirements.txt": { + "mtime": 1778710280.6524813, + "hash": "fbf3dc8cb3581931efa8dc526f44f7ef" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\IMPLEMENTATION_PLAN.md": { + "mtime": 1778710280.6550682, + "hash": "5e4f9f914ca2ce9d67d6705a5933b7ba" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\RUNBOOK.md": { + "mtime": 1778710280.6555874, + "hash": "50fc656921246e9004108c9b114a09e5" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\siege_levels.md": { + "mtime": 1778710280.6587057, + "hash": "07d9f028f42a8b94ce3365a6f72bafc4" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\WEB_DESIGN_DOCUMENT.md": { + "mtime": 1778710280.656117, + "hash": "83b709cc8ac4aa14b027eda0a0c562b8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\design-refs\\post-suggestions\\README.md": { + "mtime": 1778710280.6566384, + "hash": "de10b175d0df9256e5daeca315f7b252" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\experiments\\graphify-dry-run.md": { + "mtime": 1778711028.4433894, + "hash": "496df0deb7da1e88640f0a8bcdcb7e3b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\mockup-landing.html": { + "mtime": 1778710280.6571586, + "hash": "0548e8204463ddf92a09c5ce6f97fe34" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\mockup-login.html": { + "mtime": 1778710280.6571586, + "hash": "7e1759c2d6a5fa6a3c4e5ed58777c289" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\README.md": { + "mtime": 1778710280.6566384, + "hash": "fe28480a5cc9c486f4dc5d6be6c5f368" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\plans\\public-launch-self-hostable-and-landing-page.md": { + "mtime": 1778710280.657677, + "hash": "afed648bab4d1590d9b833607a4f7502" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\self-host\\anywhere.md": { + "mtime": 1778710280.6581955, + "hash": "2efab5a64706d9964b8fa13de3037449" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\self-host\\azure.md": { + "mtime": 1778710280.6587057, + "hash": "c9ee5c5fc8721e7c0ca2bb54da0782c9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-04-08-discord-auth-implementation.md": { + "mtime": 1778710280.6592517, + "hash": "01ee8f99120035b952a2699b8a01eb6b" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-05-08-component-versioning.md": { + "mtime": 1778710280.6597755, + "hash": "4eea9e7828ef6f2c88737f1f2feb1ee2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-05-09-post-suggestions.md": { + "mtime": 1778710280.6597755, + "hash": "3c89d2df41aebf5c5bc5add19cbd6281" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\discord-auth-plan.md": { + "mtime": 1778710280.6597755, + "hash": "bab1c00cda76f8ccaf26079a049ecf40" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\v1-release-plan.md": { + "mtime": 1778710280.6607814, + "hash": "f7ebc80091b9fc6eb0a5bf8661c0300e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\index.html": { + "mtime": 1778710280.6638145, + "hash": "dde055b245027a69a68049238ed823b3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\graphify-out-with-tests\\graph.html": { + "mtime": 1778718921.8433201, + "hash": "b6226c2e30e0ccfbc56b15297319fa65" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\graphify-out-with-tests\\GRAPH_REPORT.md": { + "mtime": 1778718921.7281322, + "hash": "2c56ab55dda9d94cb5aab4e1a21a2cf1" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\infra\\README.md": { + "mtime": 1778710280.696556, + "hash": "3e76fbd727bcceeb02eb75d416c64aff" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\README.md": { + "mtime": 1778710280.701412, + "hash": "4a0e8a05091bd257fe417671858923a2" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\requirements.txt": { + "mtime": 1778710280.70243, + "hash": "5e740ca3e2b112ec37fea64eae859ae0" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\FAQ.md": { + "mtime": 1778710280.7034204, + "hash": "5e52ba23a226df064a14d75b1fd0d715" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Getting-Started.md": { + "mtime": 1778710280.7034204, + "hash": "f9dea57e10cfeada6f10255144249741" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Home.md": { + "mtime": 1778710280.7034204, + "hash": "32652bdc5aadfc11288cc5a4df5fe4a3" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Self-Host-on-Any-VPS.md": { + "mtime": 1778710280.7034204, + "hash": "178c7e9323276c57b1ce23786431f634" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Self-Host-on-Azure.md": { + "mtime": 1778710280.7049341, + "hash": "170d3ef1fbc3b5d52c18a8b6470951f5" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\_Sidebar.md": { + "mtime": 1778710280.7049341, + "hash": "d92afc34965b5e470b581ce61e53b6ca" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\favicon.svg": { + "mtime": 1778710280.6663249, + "hash": "1544a9686a82728b10dd2d54a4c539b4" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-assignment-board.png": { + "mtime": 1778710280.6673253, + "hash": "138b785969e45c8eeec46b97c86dbfec" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-discord-image.png": { + "mtime": 1778710280.6673253, + "hash": "490ecc84ff80e40ca12651e2626bc424" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-member-management.png": { + "mtime": 1778710280.6688316, + "hash": "e87aa520a2aaecf3e9a1eea306182d0d" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-post-assignments.png": { + "mtime": 1778710280.6698372, + "hash": "79bdc954a2b7803d178cc4b3f2d7fbd8" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-siege-comparison.png": { + "mtime": 1778710280.6711512, + "hash": "913d494ae2e7465514441dec70f864c9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-validation-errors.png": { + "mtime": 1778710280.6721778, + "hash": "a6f43ec1ae7d66d5580b8b8d9d8c154e" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\hero-board.png": { + "mtime": 1778710280.6721778, + "hash": "4640413678efc867d27bceed64b60ea9" + }, + "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\og-image.png": { + "mtime": 1778710280.6731784, + "hash": "4640413678efc867d27bceed64b60ea9" + } +} \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/results.md b/evaluations/rsl-siege-manager/results.md new file mode 100644 index 00000000..7b2d6ba8 --- /dev/null +++ b/evaluations/rsl-siege-manager/results.md @@ -0,0 +1,194 @@ +# Graphify Dry-Run — Results & Decision + +**Date:** 2026-05-15 +**Tool:** [`safishamsi/graphify`](https://github.com/safishamsi/graphify) (PyPI `graphifyy`) +**Tracking issue:** #397 +**Runbook:** [`runbook.md`](./runbook.md) +**Source codebase:** [`glitchwerks/rsl-siege-manager`](https://github.com/glitchwerks/rsl-siege-manager) @ `6085fd66` +**Decision:** Do not adopt. + +--- + +## TL;DR + +The dry-run was executed twice against rsl-siege-manager at commit `6085fd66` — once excluding tests, once including them. Evaluated against the acid-test criteria from #397 (god nodes, surprising connections, and suggested questions should reflect things the user would nominate themselves), the tool failed on all three headline outputs. The without-tests run surfaces utilities and React page components alongside legitimate domain models; the with-tests run is dominated by test fixtures. Neither output justifies integrating a `PreToolUse` hook. + +--- + +## What was run + +Two runs at commit `6085fd66`: + +| Run | Scope | Nodes | Edges | Communities | Extraction quality | +|-----|-------|-------|-------|-------------|-------------------| +| A (codebase only) | `.graphifyignore` excluded `backend/tests/`, `frontend/src/**/__tests__/` | 833 | 1758 | 52 | 85% EXTRACTED / 15% INFERRED (avg confidence 0.59) | +| B (codebase + tests) | No exclusions beyond vendored deps | 1886 | 3876 | 141 | 90% EXTRACTED / 10% INFERRED (avg confidence 0.62) | + +Run cost: $0 token cost in both cases. graphify uses tree-sitter for code extraction; LLM API calls fire only for non-code files. After `.graphifyignore`, there were effectively none. + +--- + +## Evaluation against the acid test + +Issue #397 set this bar: + +> "whether GRAPH_REPORT.md's named extractions (god nodes, surprising connections, suggested questions) reflect things the user would nominate themselves — generic graph-theory output ('`index.ts` is highly connected') means it didn't work." + +Each finding below quotes the report directly. The raw artifacts are not committed (see "Artifact handling"), but the quotes are verifiable by re-running the dry-run against the same commit. + +### Finding 1 — Test fixtures dominate "core abstractions" with tests included + +Run B's god-node list, verbatim (`graphify-out-with-tests/GRAPH_REPORT.md`, lines 141–150): + +``` +1. `_make_siege()` - 124 edges +2. `_make_member()` - 92 edges +3. `_make_position()` - 85 edges +4. `SiegeMember` - 78 edges +5. `_make_building()` - 64 edges +6. `_make_group()` - 60 edges +7. `BoardPage()` - 55 edges +8. `makeSiegeMember()` - 55 edges +9. `PostsPage()` - 37 edges +10. `_session_with_siege_and_configs()` - 35 edges +``` + +Six of the top ten — positions 1, 2, 3, 5, 6, and 8 — are test factory functions (`_make_siege`, `_make_member`, `_make_position`, `_make_building`, `_make_group`, `makeSiegeMember`). Position 10 is a test session fixture. These are the highest-connectivity nodes in the graph, and they are infrastructure for verifying the codebase, not the codebase itself. + +This is the cleanest failure signal in the dataset. The god-node list is explicitly labeled "your core abstractions." No developer would nominate `_make_siege()` as a core abstraction of a siege-assignment web app. The metric — degree centrality — is measuring test coverage, not architecture. The inversion is structural: the better your test coverage, the more your test factories saturate every part of the codebase, and the higher their degree count climbs. Codebases that most need architectural insight (low coverage, high complexity) will produce the cleanest god-node lists. Codebases that least need it (high coverage, known domain) will look like run B. + +### Finding 2 — Codebase-only god nodes are surface-level + +Run A's god-node list, verbatim (`graphify-out/GRAPH_REPORT.md`, lines 55–64): + +``` +1. `SiegeMember` - 55 edges +2. `BoardPage()` - 53 edges +3. `Post Suggestions Modal Handoff` - 40 edges +4. `postsTab` - 29 edges +5. `cn()` - 29 edges +6. `PostsPage()` - 28 edges +7. `BuildingType` - 27 edges +8. `MembersPage()` - 27 edges +9. `MemberRole` - 25 edges +10. `Self-Host on Azure Wiki Page` - 23 edges +``` + +`SiegeMember`, `BuildingType`, and `MemberRole` at positions 1, 7, and 9 are legitimate domain models a developer would identify as important. That is three of ten. + +The remaining seven are less useful. `BoardPage()`, `PostsPage()`, and `MembersPage()` at positions 2, 6, and 8 are React top-level page components — they import many things because they are entry points, not because they encode domain logic. `cn()` at position 5 is a one-line Tailwind class-merging utility (`src/lib/utils.ts`). It scores 29 edges because every component that merges conditional classes imports it. This is the canonical generic-graph-theory false positive the runbook warned about: `cn()` is "highly connected" in the same way `/dev/null` would be if files wrote to it — the connection count reflects a structural pattern, not semantic importance. `Post Suggestions Modal Handoff` at position 3 is a planning document node extracted from `docs/design-refs/`, not a code entity at all. `Self-Host on Azure Wiki Page` at position 10 is a wiki article. + +The acid test asks whether these are things the user would nominate. They are not. + +### Finding 3 — Surprising connections cross language boundaries spuriously + +Both runs surface INFERRED edges between Python backend types and TypeScript frontend types, presented under the heading "Surprising Connections (you probably didn't know these)." From run A (`graphify-out/GRAPH_REPORT.md`, lines 73–74): + +``` +- `AuthError` --uses--> `Member` [INFERRED] + backend/app/api/auth.py → frontend/src/api/types.ts +``` + +And from run B (`graphify-out-with-tests/GRAPH_REPORT.md`, lines 158–159): + +``` +- `TestStartupValidation` --uses--> `MemberRole` [INFERRED] + backend/tests/test_auth.py → frontend/src/api/types.ts +``` + +A Python class does not "use" a TypeScript type at runtime. These are name-based similarity matches — `AuthError` and `Member` share a namespace with identically-named constructs in the frontend — presented as semantic relationships. The confidence is low (avg INFERRED confidence 0.59 in run A, 0.62 in run B), but the framing ("you probably didn't know these") presents them as insights worth investigating. They are not. + +The one genuinely plausible INFERRED connection in run A is: + +``` +- `PostPriorityResponse` --uses--> `PostPriorityConfig` [INFERRED] + backend/app/api/post_priority_config.py → frontend/src/api/posts.ts +``` + +The backend schema and the frontend type do mirror each other by contract. But that relationship is a deliberate design decision well-known to anyone who wrote it — not a discovery. + +### Finding 4 — Community cohesion is universally weak + +The majority of rsl-siege-manager's 52 communities (run A) score between 0.05 and 0.17 on cohesion. Run A community distribution: + +- Communities 0, 2, 3, 6: cohesion 0.05–0.06 (the four largest communities, 36–112 nodes each) +- Most remaining communities: cohesion 0.08–0.17 +- Cohesion above 0.25: six communities, all small (3–10 nodes) + +The report itself flags cohesion 0.05 as "weakly interconnected" in the Suggested Questions section: "Should `Community 0` be split into smaller, more focused modules? — Cohesion score 0.05 - nodes in this community are weakly interconnected." Community 0 has 112 nodes. + +rsl-siege-manager has a clean three-service architecture (backend / frontend / bot) that any developer can describe in a sentence. The graph algorithm is not finding that structure — it is producing communities with no legible semantic identity and flagging most of them as internally incoherent. + +### Finding 5 — Noise inflated into knowledge gaps + +Run A reports 259 isolated nodes; run B reports 752. The leading examples in both are identical (`graphify-out/GRAPH_REPORT.md`, line 213; `graphify-out-with-tests/GRAPH_REPORT.md`, line 447): + +``` +`initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, +`add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, +`make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1`, +`Add post_priority_config table`, ... +``` + +These are Alembic migration revision docstrings parsed as standalone graph nodes. A migration docstring like `"make siege date nullable"` is a change-tracking annotation, not an architectural entity. There are 17 Alembic migration files in this repo. The isolated-node count growing from 259 to 752 when tests are added is almost entirely test docstrings and test function descriptions parsed the same way. + +The report labels these as "possible documentation gaps or missing edges" — a framing that implies they are meaningful silences the developer should investigate. They are not gaps; they are noise. + +### Finding 6 — Suggested questions are self-referential + +The Suggested Questions section in both runs consists primarily of two kinds of questions: + +1. **Betweenness centrality prompts:** "Why does `_make_siege()` connect Community 12 to Community 0, Community 1, Community 3...?" These ask the developer to explain why a test fixture has high betweenness. The answer is obvious: it creates the primary domain object; every test uses it. + +2. **Inferred-edge audits:** "Are the 17 inferred relationships involving `SiegeMember` (e.g. with `Base` and `TestSeedDemoMembers`) actually correct?" This is the tool asking the developer to validate the tool's own low-confidence connections. It is not the tool answering questions about the codebase; it is the tool outsourcing its uncertainty. + +Run A's most interesting question — "What is the exact relationship between `bootstrap-images.ps1` and `scripts/bootstrap-images.ps1`?" — is itself tagged AMBIGUOUS. The answer is: they are the same script referenced by two slightly different paths in different contexts. This is a file-naming question, not an architectural one. + +--- + +## What graphify is good at + +The throughput is fine: 833 nodes in a few minutes, $0 LLM cost on a code-heavy repo. The tree-sitter extraction is genuinely fast and does pick up real entities — `SiegeMember`, `BuildingType`, and `MemberRole` in the god-node list are correct. The `graph.html` interactive visualization is well-built and easy to navigate. The EXTRACTED cross-service connections are occasionally real: `PostPriorityResponse --uses--> PostPriorityConfig` between `backend/app/api/post_priority_config.py` and `frontend/src/api/posts.ts` reflects an actual contract. + +The problem is not the underlying graph build. The problem is what the report does with it. + +--- + +## Why this is a rejection, not a tuning problem + +The headline outputs — god nodes, surprising connections, suggested questions — are what would justify wiring a `PreToolUse` hook that nudges the assistant to consult `GRAPH_REPORT.md` on every `grep`/`rg`/`find` invocation. If those outputs are mostly test fixtures (run B), surface-level import counts (run A), low-confidence cross-language inferences, and self-referential audit requests, then the hook would be steering the assistant's attention toward noise on every search. Tightening `.graphifyignore` further would fix run B's test-fixture problem, but it would not fix the architecture-of-the-metric problem visible in run A: degree centrality will always surface utilities and entry points over domain logic, regardless of what the ignore file excludes. The tool is measuring the right thing (connectivity) for the wrong purpose (identifying abstractions worth knowing about). + +--- + +## Cost incurred vs cost avoided + +**Cost incurred:** + +- ~10 minutes of CLI time across two runs. +- $0 LLM cost (tree-sitter handled all code; no non-code files survived the ignore filter in any meaningful quantity). + +**Cost avoided by not adopting:** + +The two harness mutations from `graphify claude install` documented in #397: + +1. **Global CLAUDE.md append** — a `# graphify` block appended to `~/.claude/CLAUDE.md` without a parseable fence marker, requiring manual cleanup on backout. +2. **Per-project `PreToolUse` hook** — fires on `Bash` commands containing `grep`/`rg`/`find` substrings. As noted in the runbook's Windows-specific gotchas section: the hook matcher is substring-based (`*grep*`), creating false-positive nudges on `pg_dump | grep`, `kubectl get pods | grep`, and similar. The hook also uses `python3` (not `python.exe`) which may silently no-op on Windows. + +--- + +## Artifact handling + +The raw outputs from both runs — `graph.html`, `graph.json`, `GRAPH_REPORT.md`, `cache/`, `manifest.json` (approximately 12 MB total) — are committed alongside this writeup under [`./graphify-out/`](./graphify-out/) and [`./graphify-out-with-tests/`](./graphify-out-with-tests/). The quoted findings above are auditable against the originals; the interactive `graph.html` files render the underlying force-directed graph if you want to explore. + +Reproducing the run against a different revision: see [`runbook.md`](./runbook.md) for the methodology and acid-test criteria. + +--- + +## Follow-up + +- Issue tracking is disabled on this fork, so the PR that lands this evaluation is the durable record of the decision. +- No upstream contribution intended — this is an evaluation of graphify as a consumer, not a change request to the tool. The fork exists as a stable point to reference if upstream evolves. + +--- + +🤖 _Generated by Claude Code on behalf of @cbeaulieu-gt_ diff --git a/evaluations/rsl-siege-manager/runbook.md b/evaluations/rsl-siege-manager/runbook.md new file mode 100644 index 00000000..9993518e --- /dev/null +++ b/evaluations/rsl-siege-manager/runbook.md @@ -0,0 +1,160 @@ +# Graphify Dry-Run for rsl-siege-manager + +> **Captured artifact.** This is the runbook as used during the [rsl-siege-manager evaluation](./results.md). Originally lived at `docs/experiments/graphify-dry-run.md` in that repo; relocated here so methodology and results stay together. References to siege-web-specific paths and cleanup commands are kept verbatim — they reflect the original context. + +A scoped evaluation plan for [`safishamsi/graphify`](https://github.com/safishamsi/graphify) — a tool that builds a queryable knowledge graph (code + docs + PDFs + images) from a project folder and exposes it to AI coding assistants. + +**Goal of this dry-run:** produce graphify's artifacts inside `rsl-siege-manager/graphify-out/` so I can judge whether the graph genuinely illuminates this codebase, **without** modifying my global `~/.claude/CLAUDE.md`, this repo's `.claude/settings.json`, or installing any harness hooks. Everything below is reversible by deleting one folder. + +--- + +## Why this approach + +Graphify's full install does two things: + +1. **Global**: drops a skill at `~/.claude/skills/graphify/SKILL.md` and **appends a `# graphify` block to `~/.claude/CLAUDE.md`** (string-match guarded — not a fenced/marker block, so manual cleanup is needed if I back it out). +2. **Per-project**: appends a `## graphify` section to this repo's `CLAUDE.md` and registers a `PreToolUse` hook in `.claude/settings.json` that nudges the assistant to consult `GRAPH_REPORT.md` whenever a `Bash` command contains `grep`/`rg`/`find`/etc. + +Both are reasonable but non-trivial mutations to harness configuration I tune carefully. The dry-run skips both, runs only the CLI, and lets me decide whether the artifact is worth the integration cost **after** seeing it. + +--- + +## Step 1 — Install the CLI globally + +```powershell +uv tool install graphifyy +``` + +> The PyPI package is `graphifyy` (double-y). The CLI command is `graphify`. + +Verify it's on PATH: + +```powershell +graphify --version +``` + +If "not recognized," open a new PowerShell window — `uv tool` updates PATH but the current session won't see it. + +--- + +## Step 2 — Optional: gate the first build with `.graphifyignore` + +Cheap insurance. Each non-code file (markdown, PDF, image) becomes an LLM API call during the first build. A `.graphifyignore` (same syntax as `.gitignore`, including `!` negation) keeps vendored deps and build output out of scope. + +From the rsl-siege-manager root: + +```powershell +@' +node_modules/ +dist/ +build/ +.next/ +.venv/ +coverage/ +*.generated.* +*.min.js +'@ | Set-Content -Encoding UTF8 .graphifyignore +``` + +Adjust to rsl-siege-manager's actual layout. If unsure what to ignore, skip this step — the build will still work, just bigger. + +--- + +## Step 3 — Build the graph (the only step with $ cost) + +From the rsl-siege-manager root: + +```powershell +graphify extract . +``` + +> **Estimated cost:** `$0.10–$2.00` depending on the number of docs, PDFs, and images that survive the ignore filter. Watch terminal output; `Ctrl+C` is safe at any point. + +What happens under the hood: + +| Content type | Mechanism | Cost | +| --- | --- | --- | +| Code (29 languages, AST via tree-sitter) | Local | Free | +| Docs, markdown, PDFs, images, videos | LLM API call per file | $$ | + +Watch terminal output. If it's processing far more files than expected, `Ctrl+C` and tighten `.graphifyignore` before re-running. + +Check the cost summary when it finishes: + +```powershell +Get-Content .\graphify-out\cost.json +``` + +--- + +## Step 4 — Inspect the three artifacts + +```powershell +# The headline summary the assistant would read on every query +code .\graphify-out\GRAPH_REPORT.md + +# The interactive graph (click nodes, filter, search) +Start-Process .\graphify-out\graph.html + +# The raw graph data (used by the query commands below) +Get-Content .\graphify-out\graph.json | Select-Object -First 50 +``` + +**The honest evaluation lives in `GRAPH_REPORT.md`, not `graph.html`.** The viz is dopamine — colorful and clickable on any codebase. The report's "god nodes," "surprising connections," and "suggested questions" sections are what tell me whether the LLM extraction actually *understood* rsl-siege-manager. If those sections name files/concepts I'd nominate myself, it worked. If they're generic ("`index.ts` is highly connected") or wrong, it didn't. + +--- + +## Step 5 — Try query commands without any hook wiring + +These work directly off `graphify-out/graph.json` — no skill registration, no settings.json mutation: + +```powershell +graphify query "how does authentication flow through the app?" +graphify query "what connects the database layer to the API routes?" +graphify path "" "" +graphify explain "" +``` + +**Acid test:** ask 3–5 questions I already know the answer to. If it answers them correctly, the tool can help with the ones I don't. + +--- + +## Step 6 — Decide + +| Outcome | Next move | +| --- | --- | +| Graph is genuinely illuminating | Run `graphify claude install` (accept the CLAUDE.md / `.claude/settings.json` mutations) | +| Useful but not always-on | Keep the CLI, rebuild manually when useful, query from terminal — no install | +| Generic or wrong | Delete and move on | + +--- + +## Abort / full cleanup + +Nothing outside `rsl-siege-manager/graphify-out/` was touched. To roll back completely: + +```powershell +Remove-Item -Recurse -Force .\graphify-out +Remove-Item .\.graphifyignore # if added and unwanted +Remove-Item .\docs\experiments\graphify-dry-run.md # this file +uv tool uninstall graphifyy # remove the CLI itself +``` + +After this, the repo is byte-identical to before the dry-run, and `~/.claude/CLAUDE.md` was never modified. + +--- + +## Windows-specific gotchas to watch for + +- **`/graphify extract .` will fail in PowerShell.** PowerShell treats `/` as a path separator. Use `graphify extract .` (no leading slash). The slash form only works inside an AI coding assistant's chat prompt. +- **The PreToolUse hook graphify installs uses `python3`.** Windows installers typically register `python.exe`, not `python3.exe`. If I do eventually run `graphify claude install`, the hook's `python3 -c "..."` may silently no-op (it's wrapped in `2>/dev/null || true`) — meaning the nudge never fires and I won't know. +- **The hook also relies on Bash `case` syntax.** Claude Code on Windows routes hook commands through Git Bash, so this works — but it's an implicit dependency on Git Bash being present. +- **Hook matcher is substring-based on `*grep*`.** That catches `pg_dump | grep`, `kubectl get pods | grep`, anything-grep. False-positive nudges are low cost but worth knowing. + +--- + +## Reference + +- Repo: https://github.com/safishamsi/graphify +- PyPI: https://pypi.org/project/graphifyy/ +- Repo signals at evaluation time (2026-05-13): 47k stars, 5k forks, MIT, ~5 weeks old. Star count is anomalously high for age — treat it as marketing signal, not quality signal. Evaluate the artifact, not the badges. From 3d99603e8d2d4c620d0b4ac6a98856bd955f3db1 Mon Sep 17 00:00:00 2001 From: Christopher Beaulieu Date: Fri, 15 May 2026 13:22:04 -0400 Subject: [PATCH 2/2] refactor(eval): restructure as worked/ case study for upstream alignment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructures the rsl-siege-manager evaluation to match upstream's worked/karpathy-repos/ convention before opening against safishamsi/graphify: - Move evaluations/rsl-siege-manager/ -> worked/rsl-siege-manager/ - Flatten graphify-out-with-tests/ artifacts to the case directory root (matches karpathy-repos layout: README.md, review.md, GRAPH_REPORT.md, graph.html, graph.json, manifest.json at top level). - Drop the codebase-only artifact set; keep only the tests-included run as the more realistic default (most users won't pre-configure .graphifyignore). - Rename runbook.md -> README.md (corpus description + reproduction steps). - Rename results.md -> review.md (matches karpathy-repos), and reframe from "do not adopt" verdict to neutral findings + suggested follow-ups. - Drop evaluations/README.md fork-only index. - Revert .gitignore evaluations/ exception block — no longer needed now that artifacts live at worked/rsl-siege-manager/ (no graphify-out/ in path). Co-Authored-By: Claude Opus 4.7 --- .gitignore | 5 - evaluations/README.md | 17 - .../graphify-out/GRAPH_REPORT.md | 233 - .../rsl-siege-manager/graphify-out/graph.html | 305 - .../rsl-siege-manager/graphify-out/graph.json | 26177 ---------------- .../graphify-out/manifest.json | 918 - evaluations/rsl-siege-manager/results.md | 194 - evaluations/rsl-siege-manager/runbook.md | 160 - .../rsl-siege-manager}/GRAPH_REPORT.md | 0 worked/rsl-siege-manager/README.md | 88 + .../rsl-siege-manager}/graph.html | 0 .../rsl-siege-manager}/graph.json | 0 .../rsl-siege-manager}/manifest.json | 0 worked/rsl-siege-manager/review.md | 154 + 14 files changed, 242 insertions(+), 28009 deletions(-) delete mode 100644 evaluations/README.md delete mode 100644 evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md delete mode 100644 evaluations/rsl-siege-manager/graphify-out/graph.html delete mode 100644 evaluations/rsl-siege-manager/graphify-out/graph.json delete mode 100644 evaluations/rsl-siege-manager/graphify-out/manifest.json delete mode 100644 evaluations/rsl-siege-manager/results.md delete mode 100644 evaluations/rsl-siege-manager/runbook.md rename {evaluations/rsl-siege-manager/graphify-out-with-tests => worked/rsl-siege-manager}/GRAPH_REPORT.md (100%) create mode 100644 worked/rsl-siege-manager/README.md rename {evaluations/rsl-siege-manager/graphify-out-with-tests => worked/rsl-siege-manager}/graph.html (100%) rename {evaluations/rsl-siege-manager/graphify-out-with-tests => worked/rsl-siege-manager}/graph.json (100%) rename {evaluations/rsl-siege-manager/graphify-out-with-tests => worked/rsl-siege-manager}/manifest.json (100%) create mode 100644 worked/rsl-siege-manager/review.md diff --git a/.gitignore b/.gitignore index 79df4222..0e6fc586 100644 --- a/.gitignore +++ b/.gitignore @@ -14,11 +14,6 @@ build/ *.egg .graphify/ graphify-out/ -# Committed evaluation artifacts under evaluations/ are intentional evidence — keep them -!evaluations/**/graphify-out/ -!evaluations/**/graphify-out-with-tests/ -!evaluations/**/graphify-out/** -!evaluations/**/graphify-out-with-tests/** .graphify_*.json .graphify_python .claude/ diff --git a/evaluations/README.md b/evaluations/README.md deleted file mode 100644 index 68dc1f9a..00000000 --- a/evaluations/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Graphify Evaluations - -Per-codebase evaluations of [graphify](https://github.com/safishamsi/graphify) — runbook + captured artifacts + a written verdict. - -Each subdirectory is one evaluation: - -- A `runbook.md` capturing the methodology used at the time. -- A `results.md` documenting the run output, the acid-test scoring, and the adopt / don't-adopt decision. -- The raw `graphify-out/` directories (often two: one with tests excluded, one with tests included) so quoted findings remain auditable. - -## Evaluations - -| Codebase | Verdict | Date | -|---|---|---| -| [`rsl-siege-manager/`](./rsl-siege-manager/) | Do not adopt | 2026-05-15 | - -🤖 _Generated by Claude Code on behalf of @cbeaulieu-gt_ diff --git a/evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md b/evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md deleted file mode 100644 index bbf1c312..00000000 --- a/evaluations/rsl-siege-manager/graphify-out/GRAPH_REPORT.md +++ /dev/null @@ -1,233 +0,0 @@ -# Graph Report - . (2026-05-13) - -## Corpus Check -- cluster-only mode — file stats not available - -## Summary -- 833 nodes · 1758 edges · 52 communities (48 shown, 4 thin omitted) -- Extraction: 85% EXTRACTED · 15% INFERRED · 0% AMBIGUOUS · INFERRED: 266 edges (avg confidence: 0.59) -- Token cost: 0 input · 0 output - -## Graph Freshness -- Built from commit: `6085fd66` -- Run `git rev-parse HEAD` and compare to check if the graph is stale. -- Run `graphify update .` after code changes (no API cost). - -## Community Hubs (Navigation) -- [[_COMMUNITY_Community 0|Community 0]] -- [[_COMMUNITY_Community 1|Community 1]] -- [[_COMMUNITY_Community 2|Community 2]] -- [[_COMMUNITY_Community 3|Community 3]] -- [[_COMMUNITY_Community 4|Community 4]] -- [[_COMMUNITY_Community 5|Community 5]] -- [[_COMMUNITY_Community 6|Community 6]] -- [[_COMMUNITY_Community 7|Community 7]] -- [[_COMMUNITY_Community 8|Community 8]] -- [[_COMMUNITY_Community 9|Community 9]] -- [[_COMMUNITY_Community 10|Community 10]] -- [[_COMMUNITY_Community 11|Community 11]] -- [[_COMMUNITY_Community 12|Community 12]] -- [[_COMMUNITY_Community 13|Community 13]] -- [[_COMMUNITY_Community 14|Community 14]] -- [[_COMMUNITY_Community 15|Community 15]] -- [[_COMMUNITY_Community 16|Community 16]] -- [[_COMMUNITY_Community 17|Community 17]] -- [[_COMMUNITY_Community 18|Community 18]] -- [[_COMMUNITY_Community 19|Community 19]] -- [[_COMMUNITY_Community 20|Community 20]] -- [[_COMMUNITY_Community 21|Community 21]] -- [[_COMMUNITY_Community 22|Community 22]] -- [[_COMMUNITY_Community 23|Community 23]] -- [[_COMMUNITY_Community 24|Community 24]] -- [[_COMMUNITY_Community 25|Community 25]] -- [[_COMMUNITY_Community 26|Community 26]] -- [[_COMMUNITY_Community 27|Community 27]] -- [[_COMMUNITY_Community 28|Community 28]] -- [[_COMMUNITY_Community 29|Community 29]] -- [[_COMMUNITY_Community 30|Community 30]] -- [[_COMMUNITY_Community 31|Community 31]] -- [[_COMMUNITY_Community 32|Community 32]] -- [[_COMMUNITY_Community 33|Community 33]] -- [[_COMMUNITY_Community 34|Community 34]] -- [[_COMMUNITY_Community 37|Community 37]] - -## God Nodes (most connected - your core abstractions) -1. `SiegeMember` - 55 edges -2. `BoardPage()` - 53 edges -3. `Post Suggestions Modal Handoff` - 40 edges -4. `postsTab` - 29 edges -5. `cn()` - 29 edges -6. `PostsPage()` - 28 edges -7. `BuildingType` - 27 edges -8. `MembersPage()` - 27 edges -9. `MemberRole` - 25 edges -10. `Self-Host on Azure Wiki Page` - 23 edges - -## Surprising Connections (you probably didn't know these) -- `A single post assignment suggestion produced by the greedy algorithm. Attri` --rationale_for--> `PostSuggestionEntry Schema` [EXTRACTED] - backend/app/schemas/post_suggestions.py → docs/superpowers/plans/2026-05-09-post-suggestions.md -- `Post Suggestions Modal Handoff` --calls--> `cn()` [EXTRACTED] - docs/design-refs/post-suggestions/README.md → frontend/src/lib/utils.ts -- `Discord OAuth2 Authentication Spec` --semantically_similar_to--> `Discord OAuth2 Auth Flow` [INFERRED] [semantically similar] - docs/WEB_DESIGN_DOCUMENT.md → CLAUDE.md -- `AuthError` --uses--> `Member` [INFERRED] - backend/app/api/auth.py → frontend/src/api/types.ts -- `PostPriorityResponse` --uses--> `PostPriorityConfig` [INFERRED] - backend/app/api/post_priority_config.py → frontend/src/api/posts.ts - -## Communities (52 total, 4 thin omitted) - -### Community 0 - "Community 0" -Cohesion: 0.05 -Nodes (112): getBoard(), add_group(), generate_images(), Image generation endpoints., Generate PNG images for siege assignments and members list., getNotificationBatch(), notifySiegeMembers(), postToChannel() (+104 more) - -### Community 1 - "Community 1" -Cohesion: 0.06 -Nodes (67): getMember(), getMemberRoles(), getPostConditions(), updateMemberPreferences(), getSiege(), getSiegeMembers(), getSieges(), MemberRoleInfo (+59 more) - -### Community 2 - "Community 2" -Cohesion: 0.05 -Nodes (55): API router for the Suggest Post Assignments feature. Routes: POST /sieges/{, Generate a greedy post-assignment suggestion preview. Args: siege_i, Apply a caller-filtered subset of the stored preview atomically. Uses SELEC, activateSiege(), applyAttackDay(), applyAutofill(), applyPostSuggestions(), compareSiegesSpecific() (+47 more) - -### Community 3 - "Community 3" -Cohesion: 0.05 -Nodes (52): asyncpg, FastAPI, OpenTelemetry / Azure Monitor, Playwright (backend dep), PyJWT, Backend Requirements, slowapi, SQLAlchemy (+44 more) - -### Community 4 - "Community 4" -Cohesion: 0.06 -Nodes (41): PostSuggestionStaleEntry, ChangeCell(), Classification, classify(), ExpiryCountdown, OutcomeFilter, Pill(), PRIORITY_META (+33 more) - -### Community 5 - "Community 5" -Cohesion: 0.09 -Nodes (45): Application Insights, scripts/bootstrap-images.ps1, Caddy Reverse Proxy, .github/workflows/deploy.yml, Discord OAuth2, GitHub Actions CI/CD, .github/workflows/infra-deploy.yml, Azure Managed Identity (+37 more) - -### Community 6 - "Community 6" -Cohesion: 0.06 -Nodes (36): health(), createMember(), get_member(), getMemberPreferences(), updateMember(), Send DMs for each member and record results in a fresh DB session., _send_dms(), Find member by username in the guild, open DM, send message. (+28 more) - -### Community 7 - "Community 7" -Cohesion: 0.08 -Nodes (27): lifespan(), main(), FastAPI application factory and middleware wiring., Run the FastAPI/uvicorn HTTP sidecar on port 8001., Connect and run the Discord client., Start both the Discord client and HTTP server concurrently., Application lifespan — runs startup guards before serving requests., run_discord_client() (+19 more) - -### Community 8 - "Community 8" -Cohesion: 0.1 -Nodes (17): downgrade(), initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16, upgrade(), add autofill and attack day preview columns to siege Revision ID: 0002 Revises:, make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1, Add post_priority_config table, Add description to post_priority_config, Replace power with power_level, drop sort_value (+9 more) - -### Community 9 - "Community 9" -Cohesion: 0.1 -Nodes (24): AuthError, callback(), _check_guild_membership(), _error_redirect(), _exchange_code_for_token(), _get_discord_user(), login(), logout() (+16 more) - -### Community 10 - "Community 10" -Cohesion: 0.12 -Nodes (17): apiAddBuilding(), apiCreateMember(), apiCreateSiege(), autofillBtn, buildingsTab, chevron, firstPositionSpan, positionCell (+9 more) - -### Community 11 - "Community 11" -Cohesion: 0.17 -Nodes (14): add_building(), delete_group(), deleteBuilding(), getBuildings(), updateBuilding(), get_team_count(), Return the theoretical total team slots for a building type at a given level., _create_groups_and_positions() (+6 more) - -### Community 12 - "Community 12" -Cohesion: 0.16 -Nodes (15): VersionInfo, _fetch_bot_version(), getVersion(), Return a version string for the backend. When both BUILD_NUMBER and GIT_SHA, Call the bot sidecar's /version endpoint. Returns None if unreachable., Return version information for all components., _read_backend_version(), useVersion() (+7 more) - -### Community 13 - "Community 13" -Cohesion: 0.13 -Nodes (9): BUILDING_LABELS, BuildingColorClass, ActiveTab, BoardPage(), BUILDING_TYPE_ORDER, ROLE_CHIP_COLORS, ROLE_COLORS, ROLE_FILTER_OPTIONS (+1 more) - -### Community 14 - "Community 14" -Cohesion: 0.16 -Nodes (11): getSiegeMemberPreferences(), DuplicateConditionMap, findPostPosition(), MemberWithMatches, postsTab, priorityBadgeColor(), priorityLabel(), POWER_LABELS (+3 more) - -### Community 15 - "Community 15" -Cohesion: 0.19 -Nodes (13): build_member_notification_message(), _build_section(), _position_label(), _position_sort_key(), _positions_from_keys(), _positions_to_key_set(), Build rich per-member Discord DM messages for siege assignment notifications., Convert a list of PositionInfo objects to a set of comparable tuples. (+5 more) - -### Community 16 - "Community 16" -Cohesion: 0.26 -Nodes (12): list_posts(), Build a PostResponse-compatible dict, denormalizing building_number from the rel, _serialize_post(), setPostConditions(), updatePost(), Update a single position's assignment. Raises: 404 if position not, _validate_member_active(), _get_post_for_siege_or_404() (+4 more) - -### Community 17 - "Community 17" -Cohesion: 0.23 -Nodes (11): _build_assignments_html(), _build_reserves_html(), generate_assignments_image(), generate_reserves_image(), Image generation service — renders HTML/CSS to PNG via Playwright., Build the reserves/members list HTML string. Args: members: Siege m, Render an HTML string to PNG bytes using headless Chromium., Render the assignments board as a PNG. Returns raw PNG bytes. (+3 more) - -### Community 18 - "Community 18" -Cohesion: 0.25 -Nodes (10): get_changelog_status(), markChangelogSeen(), Changelog status and mark-seen endpoints. These endpoints let the frontend trac, Raise HTTP 400 if the caller is a service principal. Args: current_, Return the authenticated user's last-seen changelog timestamp. Args:, Set the authenticated user's last-seen changelog timestamp to now. Idempote, _require_member_session(), ChangelogStatusResponse (+2 more) - -### Community 19 - "Community 19" -Cohesion: 0.22 -Nodes (5): Carousel(), CarouselProps, CarouselSlide, COLORS, SLIDES - -### Community 20 - "Community 20" -Cohesion: 0.24 -Nodes (7): AppConfig, fetchConfig(), Layout(), navLinkClass(), RequireAuth(), useAuth(), LandingOrSieges() - -### Community 21 - "Community 21" -Cohesion: 0.22 -Nodes (7): compareSieges(), ComparisonResult, MemberDiff, PositionKey, _load_assignments(), _load_member_names(), Return {member_id: [PositionKey, ...]} for non-reserve, non-disabled assigned po - -### Community 22 - "Community 22" -Cohesion: 0.24 -Nodes (9): _get_client_ip(), _parse_retry_after_seconds(), rate_limit_exceeded_handler(), _rate_limit_key(), Rate-limiting utilities shared across the application. This module owns the sin, Composite key function that honours the AUTH_DISABLED bypass. When ``AUTH_D, Parse a slowapi rate-limit detail string into a window size in seconds. slo, Return a JSON 429 response with a ``Retry-After`` header. Replaces slowapi' (+1 more) - -### Community 23 - "Community 23" -Cohesion: 0.22 -Nodes (8): DropdownMenuCheckboxItem, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut(), DropdownMenuSubContent, DropdownMenuSubTrigger - -### Community 24 - "Community 24" -Cohesion: 0.22 -Nodes (8): Endpoints for Discord guild member ↔ clan member sync., Return proposed Discord ↔ clan member matches without writing to the DB., Apply accepted sync matches, updating discord_username and discord_id., applyDiscordSync(), previewDiscordSync(), Service logic for Discord guild member → clan member matching., Return proposed matches between Discord guild members and clan members. Mat, Apply accepted sync matches, writing discord_username and discord_id. Unkno - -### Community 25 - "Community 25" -Cohesion: 0.33 -Nodes (5): AuthContext, AuthContextValue, AuthProvider(), AuthUser, queryClient - -### Community 26 - "Community 26" -Cohesion: 0.4 -Nodes (3): ChangelogStatus, fetchChangelogStatus(), DropdownMenuContent - -### Community 27 - "Community 27" -Cohesion: 0.33 -Nodes (4): apiClient, ERROR_MESSAGES, LoginPage(), MEMBERSHIP_ERRORS - -### Community 28 - "Community 28" -Cohesion: 0.33 -Nodes (5): get_config(), Public config endpoint — exposes non-sensitive runtime flags to the frontend., Return public runtime configuration flags. This endpoint is intentionally u, Settings, BaseSettings - -### Community 31 - "Community 31" -Cohesion: 0.5 -Nodes (3): configure_telemetry(), Application Insights / OpenTelemetry initialisation for the backend. Call ``con, Initialise Azure Monitor OpenTelemetry and instrument the app. The ``azure- - -### Community 33 - "Community 33" -Cohesion: 0.5 -Nodes (3): getPostPriorities(), getPosts(), updatePostPriority() - -### Community 34 - "Community 34" -Cohesion: 0.5 -Nodes (4): bulk_update_positions(), Apply multiple position updates in a single transaction. Each update dict m, Validate the logical consistency of position flag combinations., _validate_position_state() - -## Ambiguous Edges - Review These -- `bootstrap-images.ps1` → `scripts/bootstrap-images.ps1` [AMBIGUOUS] - wiki/Self-Host-on-Azure.md · relation: semantically_similar_to - -## Knowledge Gaps -- **259 isolated node(s):** `initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, `add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, `make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1`, `Add post_priority_config table`, `Add description to post_priority_config` (+254 more) - These have ≤1 connection - possible missing edges or undocumented components. -- **4 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. - -## Suggested Questions -_Questions this graph is uniquely positioned to answer:_ - -- **What is the exact relationship between `bootstrap-images.ps1` and `scripts/bootstrap-images.ps1`?** - _Edge tagged AMBIGUOUS (relation: semantically_similar_to) - confidence is low._ -- **Why does `Post Suggestions Modal Handoff` connect `Community 4` to `Community 0`, `Community 1`, `Community 2`, `Community 3`, `Community 14`?** - _High betweenness centrality (0.257) - this node is a cross-community bridge._ -- **Why does `Web Design Document` connect `Community 4` to `Community 3`?** - _High betweenness centrality (0.131) - this node is a cross-community bridge._ -- **Are the 13 inferred relationships involving `SiegeMember` (e.g. with `Base` and `Member`) actually correct?** - _`SiegeMember` has 13 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 3 inferred relationships involving `Post Suggestions Modal Handoff` (e.g. with `Suggest Post Assignments Feature` and `Post Data Model`) actually correct?** - _`Post Suggestions Modal Handoff` has 3 INFERRED edges - model-reasoned connections that need verification._ -- **What connects `initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, `add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, `make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1` to the rest of the system?** - _259 weakly-connected nodes found - possible documentation gaps or missing edges._ -- **Should `Community 0` be split into smaller, more focused modules?** - _Cohesion score 0.05 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out/graph.html b/evaluations/rsl-siege-manager/graphify-out/graph.html deleted file mode 100644 index 5c00b42e..00000000 --- a/evaluations/rsl-siege-manager/graphify-out/graph.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - -graphify - graphify-out\graph.html - - - - -
- - - - - \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out/graph.json b/evaluations/rsl-siege-manager/graphify-out/graph.json deleted file mode 100644 index 68208834..00000000 --- a/evaluations/rsl-siege-manager/graphify-out/graph.json +++ /dev/null @@ -1,26177 +0,0 @@ -{ - "directed": false, - "multigraph": false, - "graph": {}, - "nodes": [ - { - "label": "env.py", - "file_type": "code", - "source_file": "backend/alembic/env.py", - "source_location": "L1", - "community": 29, - "norm_label": "env.py", - "id": "backend_alembic_env_py" - }, - { - "label": "run_migrations_offline()", - "file_type": "code", - "source_file": "backend/alembic/env.py", - "source_location": "L24", - "community": 29, - "norm_label": "run_migrations_offline()", - "id": "alembic_env_run_migrations_offline" - }, - { - "label": "do_run_migrations()", - "file_type": "code", - "source_file": "backend/alembic/env.py", - "source_location": "L36", - "community": 29, - "norm_label": "do_run_migrations()", - "id": "alembic_env_do_run_migrations" - }, - { - "label": "run_async_migrations()", - "file_type": "code", - "source_file": "backend/alembic/env.py", - "source_location": "L42", - "community": 29, - "norm_label": "run_async_migrations()", - "id": "alembic_env_run_async_migrations" - }, - { - "label": "run_migrations_online()", - "file_type": "code", - "source_file": "backend/alembic/env.py", - "source_location": "L53", - "community": 29, - "norm_label": "run_migrations_online()", - "id": "alembic_env_run_migrations_online" - }, - { - "label": "0001_initial_schema.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0001_initial_schema.py", - "source_location": "L1", - "community": 8, - "norm_label": "0001_initial_schema.py", - "id": "backend_alembic_versions_0001_initial_schema_py" - }, - { - "label": "upgrade()", - "file_type": "code", - "source_file": "backend/alembic/versions/0001_initial_schema.py", - "source_location": "L19", - "community": 8, - "norm_label": "upgrade()", - "id": "versions_0001_initial_schema_upgrade" - }, - { - "label": "downgrade()", - "file_type": "code", - "source_file": "backend/alembic/versions/0001_initial_schema.py", - "source_location": "L273", - "community": 8, - "norm_label": "downgrade()", - "id": "versions_0001_initial_schema_downgrade" - }, - { - "label": "initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0001_initial_schema.py", - "source_location": "L1", - "community": 8, - "norm_label": "initial schema revision id: 0001 revises: create date: 2026-03-16", - "id": "versions_0001_initial_schema_rationale_1" - }, - { - "label": "0002_add_preview_columns.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0002_add_preview_columns.py", - "source_location": "L1", - "community": 8, - "norm_label": "0002_add_preview_columns.py", - "id": "backend_alembic_versions_0002_add_preview_columns_py" - }, - { - "label": "add autofill and attack day preview columns to siege Revision ID: 0002 Revises:", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0002_add_preview_columns.py", - "source_location": "L1", - "community": 8, - "norm_label": "add autofill and attack day preview columns to siege revision id: 0002 revises:", - "id": "versions_0002_add_preview_columns_rationale_1" - }, - { - "label": "0003_make_siege_date_nullable.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", - "source_location": "L1", - "community": 8, - "norm_label": "0003_make_siege_date_nullable.py", - "id": "backend_alembic_versions_0003_make_siege_date_nullable_py" - }, - { - "label": "make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", - "source_location": "L1", - "community": 8, - "norm_label": "make siege date nullable revision id: 0003 revises: 0002 create date: 2026-03-1", - "id": "versions_0003_make_siege_date_nullable_rationale_1" - }, - { - "label": "0004_add_post_priority_config.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", - "source_location": "L1", - "community": 8, - "norm_label": "0004_add_post_priority_config.py", - "id": "backend_alembic_versions_0004_add_post_priority_config_py" - }, - { - "label": "Add post_priority_config table", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", - "source_location": "L1", - "community": 8, - "norm_label": "add post_priority_config table", - "id": "versions_0004_add_post_priority_config_rationale_1" - }, - { - "label": "0005_add_description_to_post_priority_config.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", - "source_location": "L1", - "community": 8, - "norm_label": "0005_add_description_to_post_priority_config.py", - "id": "backend_alembic_versions_0005_add_description_to_post_priority_config_py" - }, - { - "label": "Add description to post_priority_config", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", - "source_location": "L1", - "community": 8, - "norm_label": "add description to post_priority_config", - "id": "versions_0005_add_description_to_post_priority_config_rationale_1" - }, - { - "label": "0006_power_level_and_drop_sort_value.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", - "source_location": "L1", - "community": 8, - "norm_label": "0006_power_level_and_drop_sort_value.py", - "id": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py" - }, - { - "label": "Replace power with power_level, drop sort_value", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", - "source_location": "L1", - "community": 8, - "norm_label": "replace power with power_level, drop sort_value", - "id": "versions_0006_power_level_and_drop_sort_value_rationale_1" - }, - { - "label": "0007_fix_group_number_max.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", - "source_location": "L1", - "community": 8, - "norm_label": "0007_fix_group_number_max.py", - "id": "backend_alembic_versions_0007_fix_group_number_max_py" - }, - { - "label": "Raise group_number_range constraint max from 9 to 10 Stronghold at level 6 requ", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", - "source_location": "L1", - "community": 8, - "norm_label": "raise group_number_range constraint max from 9 to 10 stronghold at level 6 requ", - "id": "versions_0007_fix_group_number_max_rationale_1" - }, - { - "label": "0008_add_matched_condition_id_to_position.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", - "source_location": "L1", - "community": 8, - "norm_label": "0008_add_matched_condition_id_to_position.py", - "id": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py" - }, - { - "label": "Add matched_condition_id to position Tracks which PostCondition a member was ma", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", - "source_location": "L1", - "community": 8, - "norm_label": "add matched_condition_id to position tracks which postcondition a member was ma", - "id": "versions_0008_add_matched_condition_id_to_position_rationale_1" - }, - { - "label": "0009_add_discord_id_to_member.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", - "source_location": "L1", - "community": 8, - "norm_label": "0009_add_discord_id_to_member.py", - "id": "backend_alembic_versions_0009_add_discord_id_to_member_py" - }, - { - "label": "Add discord_id to member Stores the Discord snowflake ID for each clan member,", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", - "source_location": "L1", - "community": 8, - "norm_label": "add discord_id to member stores the discord snowflake id for each clan member,", - "id": "versions_0009_add_discord_id_to_member_rationale_1" - }, - { - "label": "0010_add_last_seen_changelog_at_to_member.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L1", - "community": 8, - "norm_label": "0010_add_last_seen_changelog_at_to_member.py", - "id": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py" - }, - { - "label": "Add last_seen_changelog_at to member Tracks the timestamp of the last changelog", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L1", - "community": 8, - "norm_label": "add last_seen_changelog_at to member tracks the timestamp of the last changelog", - "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_1" - }, - { - "label": "Add nullable last_seen_changelog_at column to the member table.", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L25", - "community": 8, - "norm_label": "add nullable last_seen_changelog_at column to the member table.", - "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_25" - }, - { - "label": "Remove last_seen_changelog_at column from the member table.", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L33", - "community": 8, - "norm_label": "remove last_seen_changelog_at column from the member table.", - "id": "versions_0010_add_last_seen_changelog_at_to_member_rationale_33" - }, - { - "label": "0011_add_post_suggest_preview.py", - "file_type": "code", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L1", - "community": 8, - "norm_label": "0011_add_post_suggest_preview.py", - "id": "backend_alembic_versions_0011_add_post_suggest_preview_py" - }, - { - "label": "Add post_suggest_preview columns to siege table. Mirrors the autofill_preview /", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L1", - "community": 8, - "norm_label": "add post_suggest_preview columns to siege table. mirrors the autofill_preview /", - "id": "versions_0011_add_post_suggest_preview_rationale_1" - }, - { - "label": "Add post_suggest_preview and post_suggest_preview_expires_at columns.", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L23", - "community": 8, - "norm_label": "add post_suggest_preview and post_suggest_preview_expires_at columns.", - "id": "versions_0011_add_post_suggest_preview_rationale_23" - }, - { - "label": "Drop post_suggest_preview and post_suggest_preview_expires_at columns.", - "file_type": "rationale", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L34", - "community": 8, - "norm_label": "drop post_suggest_preview and post_suggest_preview_expires_at columns.", - "id": "versions_0011_add_post_suggest_preview_rationale_34" - }, - { - "label": "Settings", - "file_type": "code", - "source_file": "backend/app/config.py", - "source_location": "L4", - "community": 28, - "norm_label": "settings", - "id": "app_config_settings" - }, - { - "label": "BaseSettings", - "file_type": "code", - "source_file": "", - "source_location": "", - "community": 28, - "norm_label": "basesettings", - "id": "basesettings" - }, - { - "label": "lifespan()", - "file_type": "code", - "source_file": "backend/app/main.py", - "source_location": "L47", - "community": 7, - "norm_label": "lifespan()", - "id": "app_main_lifespan" - }, - { - "label": "FastAPI application factory and middleware wiring.", - "file_type": "rationale", - "source_file": "backend/app/main.py", - "source_location": "L1", - "community": 7, - "norm_label": "fastapi application factory and middleware wiring.", - "id": "app_main_rationale_1" - }, - { - "label": "Application lifespan \u2014 runs startup guards before serving requests.", - "file_type": "rationale", - "source_file": "backend/app/main.py", - "source_location": "L48", - "community": 7, - "norm_label": "application lifespan \u2014 runs startup guards before serving requests.", - "id": "app_main_rationale_48" - }, - { - "label": "middleware.py", - "file_type": "code", - "source_file": "backend/app/middleware.py", - "source_location": "L1", - "community": 30, - "norm_label": "middleware.py", - "id": "backend_app_middleware_py" - }, - { - "label": "RequestLoggingMiddleware", - "file_type": "code", - "source_file": "backend/app/middleware.py", - "source_location": "L12", - "community": 30, - "norm_label": "requestloggingmiddleware", - "id": "app_middleware_requestloggingmiddleware" - }, - { - "label": "BaseHTTPMiddleware", - "file_type": "code", - "source_file": "", - "source_location": "", - "community": 30, - "norm_label": "basehttpmiddleware", - "id": "basehttpmiddleware" - }, - { - "label": ".dispatch()", - "file_type": "code", - "source_file": "backend/app/middleware.py", - "source_location": "L13", - "community": 30, - "norm_label": ".dispatch()", - "id": "app_middleware_requestloggingmiddleware_dispatch" - }, - { - "label": "rate_limit.py", - "file_type": "code", - "source_file": "backend/app/rate_limit.py", - "source_location": "L1", - "community": 22, - "norm_label": "rate_limit.py", - "id": "backend_app_rate_limit_py" - }, - { - "label": "_get_client_ip()", - "file_type": "code", - "source_file": "backend/app/rate_limit.py", - "source_location": "L52", - "community": 22, - "norm_label": "_get_client_ip()", - "id": "app_rate_limit_get_client_ip" - }, - { - "label": "_rate_limit_key()", - "file_type": "code", - "source_file": "backend/app/rate_limit.py", - "source_location": "L154", - "community": 22, - "norm_label": "_rate_limit_key()", - "id": "app_rate_limit_rate_limit_key" - }, - { - "label": "_parse_retry_after_seconds()", - "file_type": "code", - "source_file": "backend/app/rate_limit.py", - "source_location": "L179", - "community": 22, - "norm_label": "_parse_retry_after_seconds()", - "id": "app_rate_limit_parse_retry_after_seconds" - }, - { - "label": "rate_limit_exceeded_handler()", - "file_type": "code", - "source_file": "backend/app/rate_limit.py", - "source_location": "L217", - "community": 22, - "norm_label": "rate_limit_exceeded_handler()", - "id": "app_rate_limit_rate_limit_exceeded_handler" - }, - { - "label": "Rate-limiting utilities shared across the application. This module owns the sin", - "file_type": "rationale", - "source_file": "backend/app/rate_limit.py", - "source_location": "L1", - "community": 22, - "norm_label": "rate-limiting utilities shared across the application. this module owns the sin", - "id": "app_rate_limit_rationale_1" - }, - { - "label": "Extract the real client IP from X-Forwarded-For for rate bucketing. Reads t", - "file_type": "rationale", - "source_file": "backend/app/rate_limit.py", - "source_location": "L53", - "community": 22, - "norm_label": "extract the real client ip from x-forwarded-for for rate bucketing. reads t", - "id": "app_rate_limit_rationale_53" - }, - { - "label": "Composite key function that honours the AUTH_DISABLED bypass. When ``AUTH_D", - "file_type": "rationale", - "source_file": "backend/app/rate_limit.py", - "source_location": "L155", - "community": 22, - "norm_label": "composite key function that honours the auth_disabled bypass. when ``auth_d", - "id": "app_rate_limit_rationale_155" - }, - { - "label": "Parse a slowapi rate-limit detail string into a window size in seconds. slo", - "file_type": "rationale", - "source_file": "backend/app/rate_limit.py", - "source_location": "L180", - "community": 22, - "norm_label": "parse a slowapi rate-limit detail string into a window size in seconds. slo", - "id": "app_rate_limit_rationale_180" - }, - { - "label": "Return a JSON 429 response with a ``Retry-After`` header. Replaces slowapi'", - "file_type": "rationale", - "source_file": "backend/app/rate_limit.py", - "source_location": "L218", - "community": 22, - "norm_label": "return a json 429 response with a ``retry-after`` header. replaces slowapi'", - "id": "app_rate_limit_rationale_218" - }, - { - "label": "configure_telemetry()", - "file_type": "code", - "source_file": "backend/app/telemetry.py", - "source_location": "L28", - "community": 31, - "norm_label": "configure_telemetry()", - "id": "app_telemetry_configure_telemetry" - }, - { - "label": "Application Insights / OpenTelemetry initialisation for the backend. Call ``con", - "file_type": "rationale", - "source_file": "backend/app/telemetry.py", - "source_location": "L1", - "community": 31, - "norm_label": "application insights / opentelemetry initialisation for the backend. call ``con", - "id": "app_telemetry_rationale_1" - }, - { - "label": "Initialise Azure Monitor OpenTelemetry and instrument the app. The ``azure-", - "file_type": "rationale", - "source_file": "backend/app/telemetry.py", - "source_location": "L32", - "community": 31, - "norm_label": "initialise azure monitor opentelemetry and instrument the app. the ``azure-", - "id": "app_telemetry_rationale_32" - }, - { - "label": "attack_day.py", - "file_type": "code", - "source_file": "backend/app/api/attack_day.py", - "source_location": "L1", - "community": 2, - "norm_label": "attack_day.py", - "id": "backend_app_api_attack_day_py" - }, - { - "label": "auth.py", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L1", - "community": 9, - "norm_label": "auth.py", - "id": "backend_app_api_auth_py" - }, - { - "label": "AuthError", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L27", - "community": 9, - "norm_label": "autherror", - "id": "api_auth_autherror" - }, - { - "label": "_exchange_code_for_token()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L41", - "community": 9, - "norm_label": "_exchange_code_for_token()", - "id": "api_auth_exchange_code_for_token" - }, - { - "label": "_get_discord_user()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L59", - "community": 9, - "norm_label": "_get_discord_user()", - "id": "api_auth_get_discord_user" - }, - { - "label": "_check_guild_membership()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L70", - "community": 9, - "norm_label": "_check_guild_membership()", - "id": "api_auth_check_guild_membership" - }, - { - "label": "login()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L77", - "community": 9, - "norm_label": "login()", - "id": "api_auth_login" - }, - { - "label": "callback()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L112", - "community": 9, - "norm_label": "callback()", - "id": "api_auth_callback" - }, - { - "label": "logout()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L203", - "community": 9, - "norm_label": "logout()", - "id": "api_auth_logout" - }, - { - "label": "me()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L210", - "community": 9, - "norm_label": "me()", - "id": "api_auth_me" - }, - { - "label": "_error_redirect()", - "file_type": "code", - "source_file": "backend/app/api/auth.py", - "source_location": "L222", - "community": 9, - "norm_label": "_error_redirect()", - "id": "api_auth_error_redirect" - }, - { - "label": "Discord OAuth2 authentication endpoints.", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L1", - "community": 9, - "norm_label": "discord oauth2 authentication endpoints.", - "id": "api_auth_rationale_1" - }, - { - "label": "Error codes returned in login redirect query parameters.", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L28", - "community": 9, - "norm_label": "error codes returned in login redirect query parameters.", - "id": "api_auth_rationale_28" - }, - { - "label": "Exchange an authorization code for a Discord access token.", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L42", - "community": 9, - "norm_label": "exchange an authorization code for a discord access token.", - "id": "api_auth_rationale_42" - }, - { - "label": "Fetch the authenticated Discord user's profile (identify scope).", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L60", - "community": 9, - "norm_label": "fetch the authenticated discord user's profile (identify scope).", - "id": "api_auth_rationale_60" - }, - { - "label": "Check guild membership via the bot sidecar. Raises on connection failure.", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L71", - "community": 9, - "norm_label": "check guild membership via the bot sidecar. raises on connection failure.", - "id": "api_auth_rationale_71" - }, - { - "label": "Initiate Discord OAuth2 flow. Generates a CSRF state token, stores it in a", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L78", - "community": 9, - "norm_label": "initiate discord oauth2 flow. generates a csrf state token, stores it in a", - "id": "api_auth_rationale_78" - }, - { - "label": "Handle Discord OAuth2 callback. Validates CSRF state, exchanges the authori", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L118", - "community": 9, - "norm_label": "handle discord oauth2 callback. validates csrf state, exchanges the authori", - "id": "api_auth_rationale_118" - }, - { - "label": "Clear the session cookie, ending the user's session.", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L204", - "community": 9, - "norm_label": "clear the session cookie, ending the user's session.", - "id": "api_auth_rationale_204" - }, - { - "label": "Return identity information for the currently authenticated caller.", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L213", - "community": 9, - "norm_label": "return identity information for the currently authenticated caller.", - "id": "api_auth_rationale_213" - }, - { - "label": "Return a redirect to the login page with an error query parameter.", - "file_type": "rationale", - "source_file": "backend/app/api/auth.py", - "source_location": "L223", - "community": 9, - "norm_label": "return a redirect to the login page with an error query parameter.", - "id": "api_auth_rationale_223" - }, - { - "label": "autofill.py", - "file_type": "code", - "source_file": "backend/app/api/autofill.py", - "source_location": "L1", - "community": 2, - "norm_label": "autofill.py", - "id": "backend_app_api_autofill_py" - }, - { - "label": "board.py", - "file_type": "code", - "source_file": "backend/app/api/board.py", - "source_location": "L1", - "community": 0, - "norm_label": "board.py", - "id": "backend_app_api_board_py" - }, - { - "label": "bulk_update_positions()", - "file_type": "code", - "source_file": "backend/app/api/board.py", - "source_location": "L38", - "community": 34, - "norm_label": "bulk_update_positions()", - "id": "api_board_bulk_update_positions" - }, - { - "label": "buildings.py", - "file_type": "code", - "source_file": "backend/app/api/buildings.py", - "source_location": "L1", - "community": 11, - "norm_label": "buildings.py", - "id": "backend_app_api_buildings_py" - }, - { - "label": "list_buildings()", - "file_type": "code", - "source_file": "backend/app/api/buildings.py", - "source_location": "L18", - "community": 11, - "norm_label": "list_buildings()", - "id": "api_buildings_list_buildings" - }, - { - "label": "add_building()", - "file_type": "code", - "source_file": "backend/app/api/buildings.py", - "source_location": "L26", - "community": 11, - "norm_label": "add_building()", - "id": "api_buildings_add_building" - }, - { - "label": "add_group()", - "file_type": "code", - "source_file": "backend/app/api/buildings.py", - "source_location": "L59", - "community": 0, - "norm_label": "add_group()", - "id": "api_buildings_add_group" - }, - { - "label": "delete_group()", - "file_type": "code", - "source_file": "backend/app/api/buildings.py", - "source_location": "L69", - "community": 11, - "norm_label": "delete_group()", - "id": "api_buildings_delete_group" - }, - { - "label": "changelog.py", - "file_type": "code", - "source_file": "backend/app/api/changelog.py", - "source_location": "L1", - "community": 18, - "norm_label": "changelog.py", - "id": "backend_app_api_changelog_py" - }, - { - "label": "_require_member_session()", - "file_type": "code", - "source_file": "backend/app/api/changelog.py", - "source_location": "L24", - "community": 18, - "norm_label": "_require_member_session()", - "id": "api_changelog_require_member_session" - }, - { - "label": "get_changelog_status()", - "file_type": "code", - "source_file": "backend/app/api/changelog.py", - "source_location": "L43", - "community": 18, - "norm_label": "get_changelog_status()", - "id": "api_changelog_get_changelog_status" - }, - { - "label": "Changelog status and mark-seen endpoints. These endpoints let the frontend trac", - "file_type": "rationale", - "source_file": "backend/app/api/changelog.py", - "source_location": "L1", - "community": 18, - "norm_label": "changelog status and mark-seen endpoints. these endpoints let the frontend trac", - "id": "api_changelog_rationale_1" - }, - { - "label": "Raise HTTP 400 if the caller is a service principal. Args: current_", - "file_type": "rationale", - "source_file": "backend/app/api/changelog.py", - "source_location": "L25", - "community": 18, - "norm_label": "raise http 400 if the caller is a service principal. args: current_", - "id": "api_changelog_rationale_25" - }, - { - "label": "Return the authenticated user's last-seen changelog timestamp. Args:", - "file_type": "rationale", - "source_file": "backend/app/api/changelog.py", - "source_location": "L47", - "community": 18, - "norm_label": "return the authenticated user's last-seen changelog timestamp. args:", - "id": "api_changelog_rationale_47" - }, - { - "label": "Set the authenticated user's last-seen changelog timestamp to now. Idempote", - "file_type": "rationale", - "source_file": "backend/app/api/changelog.py", - "source_location": "L73", - "community": 18, - "norm_label": "set the authenticated user's last-seen changelog timestamp to now. idempote", - "id": "api_changelog_rationale_73" - }, - { - "label": "comparison.py", - "file_type": "code", - "source_file": "backend/app/api/comparison.py", - "source_location": "L1", - "community": 21, - "norm_label": "comparison.py", - "id": "backend_app_api_comparison_py" - }, - { - "label": "compare_with_most_recent()", - "file_type": "code", - "source_file": "backend/app/api/comparison.py", - "source_location": "L14", - "community": 21, - "norm_label": "compare_with_most_recent()", - "id": "api_comparison_compare_with_most_recent" - }, - { - "label": "compare_with_specific()", - "file_type": "code", - "source_file": "backend/app/api/comparison.py", - "source_location": "L31", - "community": 21, - "norm_label": "compare_with_specific()", - "id": "api_comparison_compare_with_specific" - }, - { - "label": "get_config()", - "file_type": "code", - "source_file": "backend/app/api/config.py", - "source_location": "L11", - "community": 28, - "norm_label": "get_config()", - "id": "api_config_get_config" - }, - { - "label": "Public config endpoint \u2014 exposes non-sensitive runtime flags to the frontend.", - "file_type": "rationale", - "source_file": "backend/app/api/config.py", - "source_location": "L1", - "community": 28, - "norm_label": "public config endpoint \u2014 exposes non-sensitive runtime flags to the frontend.", - "id": "api_config_rationale_1" - }, - { - "label": "Return public runtime configuration flags. This endpoint is intentionally u", - "file_type": "rationale", - "source_file": "backend/app/api/config.py", - "source_location": "L12", - "community": 28, - "norm_label": "return public runtime configuration flags. this endpoint is intentionally u", - "id": "api_config_rationale_12" - }, - { - "label": "discord_sync.py", - "file_type": "code", - "source_file": "backend/app/api/discord_sync.py", - "source_location": "L1", - "community": 24, - "norm_label": "discord_sync.py", - "id": "backend_app_api_discord_sync_py" - }, - { - "label": "Endpoints for Discord guild member \u2194 clan member sync.", - "file_type": "rationale", - "source_file": "backend/app/api/discord_sync.py", - "source_location": "L1", - "community": 24, - "norm_label": "endpoints for discord guild member \u2194 clan member sync.", - "id": "api_discord_sync_rationale_1" - }, - { - "label": "Return proposed Discord \u2194 clan member matches without writing to the DB.", - "file_type": "rationale", - "source_file": "backend/app/api/discord_sync.py", - "source_location": "L17", - "community": 24, - "norm_label": "return proposed discord \u2194 clan member matches without writing to the db.", - "id": "api_discord_sync_rationale_17" - }, - { - "label": "Apply accepted sync matches, updating discord_username and discord_id.", - "file_type": "rationale", - "source_file": "backend/app/api/discord_sync.py", - "source_location": "L26", - "community": 24, - "norm_label": "apply accepted sync matches, updating discord_username and discord_id.", - "id": "api_discord_sync_rationale_26" - }, - { - "label": "health.py", - "file_type": "code", - "source_file": "backend/app/api/health.py", - "source_location": "L1", - "community": 6, - "norm_label": "health.py", - "id": "backend_app_api_health_py" - }, - { - "label": "health()", - "file_type": "code", - "source_file": "backend/app/api/health.py", - "source_location": "L11", - "community": 6, - "norm_label": "health()", - "id": "api_health_health" - }, - { - "label": "images.py", - "file_type": "code", - "source_file": "backend/app/api/images.py", - "source_location": "L1", - "community": 0, - "norm_label": "images.py", - "id": "backend_app_api_images_py" - }, - { - "label": "BaseModel", - "file_type": "code", - "source_file": "", - "source_location": "", - "community": 0, - "norm_label": "basemodel", - "id": "basemodel" - }, - { - "label": "generate_images()", - "file_type": "code", - "source_file": "backend/app/api/images.py", - "source_location": "L31", - "community": 0, - "norm_label": "generate_images()", - "id": "api_images_generate_images" - }, - { - "label": "Image generation endpoints.", - "file_type": "rationale", - "source_file": "backend/app/api/images.py", - "source_location": "L1", - "community": 0, - "norm_label": "image generation endpoints.", - "id": "api_images_rationale_1" - }, - { - "label": "Generate PNG images for siege assignments and members list.", - "file_type": "rationale", - "source_file": "backend/app/api/images.py", - "source_location": "L35", - "community": 0, - "norm_label": "generate png images for siege assignments and members list.", - "id": "api_images_rationale_35" - }, - { - "label": "lifecycle.py", - "file_type": "code", - "source_file": "backend/app/api/lifecycle.py", - "source_location": "L1", - "community": 2, - "norm_label": "lifecycle.py", - "id": "backend_app_api_lifecycle_py" - }, - { - "label": "members.py", - "file_type": "code", - "source_file": "backend/app/api/members.py", - "source_location": "L1", - "community": 6, - "norm_label": "members.py", - "id": "backend_app_api_members_py" - }, - { - "label": "list_members()", - "file_type": "code", - "source_file": "backend/app/api/members.py", - "source_location": "L18", - "community": 6, - "norm_label": "list_members()", - "id": "api_members_list_members" - }, - { - "label": "get_member()", - "file_type": "code", - "source_file": "backend/app/api/members.py", - "source_location": "L34", - "community": 6, - "norm_label": "get_member()", - "id": "api_members_get_member" - }, - { - "label": "delete_member()", - "file_type": "code", - "source_file": "backend/app/api/members.py", - "source_location": "L51", - "community": 6, - "norm_label": "delete_member()", - "id": "api_members_delete_member" - }, - { - "label": "notifications.py", - "file_type": "code", - "source_file": "backend/app/api/notifications.py", - "source_location": "L1", - "community": 0, - "norm_label": "notifications.py", - "id": "backend_app_api_notifications_py" - }, - { - "label": "_send_dms()", - "file_type": "code", - "source_file": "backend/app/api/notifications.py", - "source_location": "L64", - "community": 6, - "norm_label": "_send_dms()", - "id": "api_notifications_send_dms" - }, - { - "label": "Notification endpoints \u2014 send DMs and post images to Discord.", - "file_type": "rationale", - "source_file": "backend/app/api/notifications.py", - "source_location": "L1", - "community": 0, - "norm_label": "notification endpoints \u2014 send dms and post images to discord.", - "id": "api_notifications_rationale_1" - }, - { - "label": "Send DMs for each member and record results in a fresh DB session.", - "file_type": "rationale", - "source_file": "backend/app/api/notifications.py", - "source_location": "L65", - "community": 6, - "norm_label": "send dms for each member and record results in a fresh db session.", - "id": "api_notifications_rationale_65" - }, - { - "label": "Send DM notifications to all siege members asynchronously.", - "file_type": "rationale", - "source_file": "backend/app/api/notifications.py", - "source_location": "L142", - "community": 0, - "norm_label": "send dm notifications to all siege members asynchronously.", - "id": "api_notifications_rationale_142" - }, - { - "label": "Get the status and results of a notification batch.", - "file_type": "rationale", - "source_file": "backend/app/api/notifications.py", - "source_location": "L310", - "community": 0, - "norm_label": "get the status and results of a notification batch.", - "id": "api_notifications_rationale_310" - }, - { - "label": "Generate images and post them + a summary message to Discord channels.", - "file_type": "rationale", - "source_file": "backend/app/api/notifications.py", - "source_location": "L371", - "community": 0, - "norm_label": "generate images and post them + a summary message to discord channels.", - "id": "api_notifications_rationale_371" - }, - { - "label": "posts.py", - "file_type": "code", - "source_file": "backend/app/api/posts.py", - "source_location": "L1", - "community": 16, - "norm_label": "posts.py", - "id": "backend_app_api_posts_py" - }, - { - "label": "_serialize_post()", - "file_type": "code", - "source_file": "backend/app/api/posts.py", - "source_location": "L12", - "community": 16, - "norm_label": "_serialize_post()", - "id": "api_posts_serialize_post" - }, - { - "label": "list_posts()", - "file_type": "code", - "source_file": "backend/app/api/posts.py", - "source_location": "L29", - "community": 16, - "norm_label": "list_posts()", - "id": "api_posts_list_posts" - }, - { - "label": "Build a PostResponse-compatible dict, denormalizing building_number from the rel", - "file_type": "rationale", - "source_file": "backend/app/api/posts.py", - "source_location": "L13", - "community": 16, - "norm_label": "build a postresponse-compatible dict, denormalizing building_number from the rel", - "id": "api_posts_rationale_13" - }, - { - "label": "PostPriorityResponse", - "file_type": "code", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L12", - "community": 0, - "norm_label": "postpriorityresponse", - "id": "api_post_priority_config_postpriorityresponse" - }, - { - "label": "PostPriorityUpdate", - "file_type": "code", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L20", - "community": 0, - "norm_label": "postpriorityupdate", - "id": "api_post_priority_config_postpriorityupdate" - }, - { - "label": "list_post_priorities()", - "file_type": "code", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L26", - "community": 0, - "norm_label": "list_post_priorities()", - "id": "api_post_priority_config_list_post_priorities" - }, - { - "label": "post_suggestions.py", - "file_type": "code", - "source_file": "backend/app/api/post_suggestions.py", - "source_location": "L1", - "community": 2, - "norm_label": "post_suggestions.py", - "id": "backend_app_api_post_suggestions_py" - }, - { - "label": "API router for the Suggest Post Assignments feature. Routes: POST /sieges/{", - "file_type": "rationale", - "source_file": "backend/app/api/post_suggestions.py", - "source_location": "L1", - "community": 2, - "norm_label": "api router for the suggest post assignments feature. routes: post /sieges/{", - "id": "api_post_suggestions_rationale_1" - }, - { - "label": "Generate a greedy post-assignment suggestion preview. Args: siege_i", - "file_type": "rationale", - "source_file": "backend/app/api/post_suggestions.py", - "source_location": "L37", - "community": 2, - "norm_label": "generate a greedy post-assignment suggestion preview. args: siege_i", - "id": "api_post_suggestions_rationale_37" - }, - { - "label": "Apply a caller-filtered subset of the stored preview atomically. Uses SELEC", - "file_type": "rationale", - "source_file": "backend/app/api/post_suggestions.py", - "source_location": "L62", - "community": 2, - "norm_label": "apply a caller-filtered subset of the stored preview atomically. uses selec", - "id": "api_post_suggestions_rationale_62" - }, - { - "label": "reference.py", - "file_type": "code", - "source_file": "backend/app/api/reference.py", - "source_location": "L1", - "community": 1, - "norm_label": "reference.py", - "id": "backend_app_api_reference_py" - }, - { - "label": "sieges.py", - "file_type": "code", - "source_file": "backend/app/api/sieges.py", - "source_location": "L1", - "community": 2, - "norm_label": "sieges.py", - "id": "backend_app_api_sieges_py" - }, - { - "label": "list_sieges()", - "file_type": "code", - "source_file": "backend/app/api/sieges.py", - "source_location": "L13", - "community": 2, - "norm_label": "list_sieges()", - "id": "api_sieges_list_sieges" - }, - { - "label": "get_siege()", - "file_type": "code", - "source_file": "backend/app/api/sieges.py", - "source_location": "L40", - "community": 2, - "norm_label": "get_siege()", - "id": "api_sieges_get_siege" - }, - { - "label": "delete_siege()", - "file_type": "code", - "source_file": "backend/app/api/sieges.py", - "source_location": "L65", - "community": 2, - "norm_label": "delete_siege()", - "id": "api_sieges_delete_siege" - }, - { - "label": "SiegeMemberCreate", - "file_type": "code", - "source_file": "backend/app/api/siege_members.py", - "source_location": "L12", - "community": 0, - "norm_label": "siegemembercreate", - "id": "api_siege_members_siegemembercreate" - }, - { - "label": "list_siege_members()", - "file_type": "code", - "source_file": "backend/app/api/siege_members.py", - "source_location": "L28", - "community": 1, - "norm_label": "list_siege_members()", - "id": "api_siege_members_list_siege_members" - }, - { - "label": "validation.py", - "file_type": "code", - "source_file": "backend/app/api/validation.py", - "source_location": "L1", - "community": 2, - "norm_label": "validation.py", - "id": "backend_app_api_validation_py" - }, - { - "label": "_read_backend_version()", - "file_type": "code", - "source_file": "backend/app/api/version.py", - "source_location": "L19", - "community": 12, - "norm_label": "_read_backend_version()", - "id": "api_version_read_backend_version" - }, - { - "label": "_fetch_bot_version()", - "file_type": "code", - "source_file": "backend/app/api/version.py", - "source_location": "L42", - "community": 12, - "norm_label": "_fetch_bot_version()", - "id": "api_version_fetch_bot_version" - }, - { - "label": "Return a version string for the backend. When both BUILD_NUMBER and GIT_SHA", - "file_type": "rationale", - "source_file": "backend/app/api/version.py", - "source_location": "L20", - "community": 12, - "norm_label": "return a version string for the backend. when both build_number and git_sha", - "id": "api_version_rationale_20" - }, - { - "label": "Call the bot sidecar's /version endpoint. Returns None if unreachable.", - "file_type": "rationale", - "source_file": "backend/app/api/version.py", - "source_location": "L43", - "community": 12, - "norm_label": "call the bot sidecar's /version endpoint. returns none if unreachable.", - "id": "api_version_rationale_43" - }, - { - "label": "Return version information for all components.", - "file_type": "rationale", - "source_file": "backend/app/api/version.py", - "source_location": "L57", - "community": 12, - "norm_label": "return version information for all components.", - "id": "api_version_rationale_57" - }, - { - "label": "base.py", - "file_type": "code", - "source_file": "backend/app/db/base.py", - "source_location": "L1", - "community": 0, - "norm_label": "base.py", - "id": "backend_app_db_base_py" - }, - { - "label": "DeclarativeBase", - "file_type": "code", - "source_file": "", - "source_location": "", - "community": 0, - "norm_label": "declarativebase", - "id": "declarativebase" - }, - { - "label": "seeds.py", - "file_type": "code", - "source_file": "backend/app/db/seeds.py", - "source_location": "L1", - "community": 7, - "norm_label": "seeds.py", - "id": "backend_app_db_seeds_py" - }, - { - "label": "seed_post_conditions()", - "file_type": "code", - "source_file": "backend/app/db/seeds.py", - "source_location": "L7", - "community": 7, - "norm_label": "seed_post_conditions()", - "id": "db_seeds_seed_post_conditions" - }, - { - "label": "seed_building_type_config()", - "file_type": "code", - "source_file": "backend/app/db/seeds.py", - "source_location": "L63", - "community": 7, - "norm_label": "seed_building_type_config()", - "id": "db_seeds_seed_building_type_config" - }, - { - "label": "seed_post_priority_config()", - "file_type": "code", - "source_file": "backend/app/db/seeds.py", - "source_location": "L91", - "community": 7, - "norm_label": "seed_post_priority_config()", - "id": "db_seeds_seed_post_priority_config" - }, - { - "label": "Seed functions for reference/static data tables.", - "file_type": "rationale", - "source_file": "backend/app/db/seeds.py", - "source_location": "L1", - "community": 7, - "norm_label": "seed functions for reference/static data tables.", - "id": "db_seeds_rationale_1" - }, - { - "label": "Insert all 36 PostCondition rows. Safe to re-run (ON CONFLICT DO NOTHING).", - "file_type": "rationale", - "source_file": "backend/app/db/seeds.py", - "source_location": "L8", - "community": 7, - "norm_label": "insert all 36 postcondition rows. safe to re-run (on conflict do nothing).", - "id": "db_seeds_rationale_8" - }, - { - "label": "Insert all 5 BuildingTypeConfig rows. Safe to re-run (ON CONFLICT DO NOTHING).", - "file_type": "rationale", - "source_file": "backend/app/db/seeds.py", - "source_location": "L64", - "community": 7, - "norm_label": "insert all 5 buildingtypeconfig rows. safe to re-run (on conflict do nothing).", - "id": "db_seeds_rationale_64" - }, - { - "label": "Insert all 18 PostPriorityConfig rows with default priority=2. Safe to re-r", - "file_type": "rationale", - "source_file": "backend/app/db/seeds.py", - "source_location": "L92", - "community": 7, - "norm_label": "insert all 18 postpriorityconfig rows with default priority=2. safe to re-r", - "id": "db_seeds_rationale_92" - }, - { - "label": "session.py", - "file_type": "code", - "source_file": "backend/app/db/session.py", - "source_location": "L1", - "community": 35, - "norm_label": "session.py", - "id": "backend_app_db_session_py" - }, - { - "label": "get_db()", - "file_type": "code", - "source_file": "backend/app/db/session.py", - "source_location": "L12", - "community": 35, - "norm_label": "get_db()", - "id": "db_session_get_db" - }, - { - "label": "AuthenticatedUser", - "file_type": "code", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L23", - "community": 9, - "norm_label": "authenticateduser", - "id": "dependencies_auth_authenticateduser" - }, - { - "label": "get_current_user()", - "file_type": "code", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L33", - "community": 9, - "norm_label": "get_current_user()", - "id": "dependencies_auth_get_current_user" - }, - { - "label": "FastAPI dependency for request authentication. Checks three paths in order: 1.", - "file_type": "rationale", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L1", - "community": 9, - "norm_label": "fastapi dependency for request authentication. checks three paths in order: 1.", - "id": "dependencies_auth_rationale_1" - }, - { - "label": "Represents the currently authenticated user or service principal.", - "file_type": "rationale", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L24", - "community": 9, - "norm_label": "represents the currently authenticated user or service principal.", - "id": "dependencies_auth_rationale_24" - }, - { - "label": "Resolve the caller's identity from the incoming request. Tries three mechan", - "file_type": "rationale", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L37", - "community": 9, - "norm_label": "resolve the caller's identity from the incoming request. tries three mechan", - "id": "dependencies_auth_rationale_37" - }, - { - "label": "Base", - "file_type": "code", - "source_file": "", - "source_location": "", - "community": 0, - "norm_label": "base", - "id": "base" - }, - { - "label": "BuildingGroup", - "file_type": "code", - "source_file": "backend/app/models/building_group.py", - "source_location": "L13", - "community": 0, - "norm_label": "buildinggroup", - "id": "models_building_group_buildinggroup" - }, - { - "label": "building_type_config.py", - "file_type": "code", - "source_file": "backend/app/models/building_type_config.py", - "source_location": "L1", - "community": 0, - "norm_label": "building_type_config.py", - "id": "backend_app_models_building_type_config_py" - }, - { - "label": "enums.py", - "file_type": "code", - "source_file": "backend/app/models/enums.py", - "source_location": "L1", - "community": 0, - "norm_label": "enums.py", - "id": "backend_app_models_enums_py" - }, - { - "label": "PowerLevel", - "file_type": "code", - "source_file": "backend/app/models/enums.py", - "source_location": "L25", - "community": 0, - "norm_label": "powerlevel", - "id": "models_enums_powerlevel" - }, - { - "label": "NotificationBatchStatus", - "file_type": "code", - "source_file": "backend/app/models/enums.py", - "source_location": "L33", - "community": 0, - "norm_label": "notificationbatchstatus", - "id": "models_enums_notificationbatchstatus" - }, - { - "label": "member.py", - "file_type": "code", - "source_file": "backend/app/models/member.py", - "source_location": "L1", - "community": 0, - "norm_label": "member.py", - "id": "backend_app_models_member_py" - }, - { - "label": "member_post_preference.py", - "file_type": "code", - "source_file": "backend/app/models/member_post_preference.py", - "source_location": "L1", - "community": 38, - "norm_label": "member_post_preference.py", - "id": "backend_app_models_member_post_preference_py" - }, - { - "label": "notification_batch_result.py", - "file_type": "code", - "source_file": "backend/app/models/notification_batch_result.py", - "source_location": "L1", - "community": 0, - "norm_label": "notification_batch_result.py", - "id": "backend_app_models_notification_batch_result_py" - }, - { - "label": "position.py", - "file_type": "code", - "source_file": "backend/app/models/position.py", - "source_location": "L1", - "community": 0, - "norm_label": "position.py", - "id": "backend_app_models_position_py" - }, - { - "label": "Position", - "file_type": "code", - "source_file": "backend/app/models/position.py", - "source_location": "L14", - "community": 0, - "norm_label": "position", - "id": "models_position_position" - }, - { - "label": "post.py", - "file_type": "code", - "source_file": "backend/app/models/post.py", - "source_location": "L1", - "community": 0, - "norm_label": "post.py", - "id": "backend_app_models_post_py" - }, - { - "label": "post_active_condition.py", - "file_type": "code", - "source_file": "backend/app/models/post_active_condition.py", - "source_location": "L1", - "community": 39, - "norm_label": "post_active_condition.py", - "id": "backend_app_models_post_active_condition_py" - }, - { - "label": "siege.py", - "file_type": "code", - "source_file": "backend/app/models/siege.py", - "source_location": "L1", - "community": 0, - "norm_label": "siege.py", - "id": "backend_app_models_siege_py" - }, - { - "label": "PositionBoardResponse", - "file_type": "code", - "source_file": "backend/app/schemas/board.py", - "source_location": "L6", - "community": 0, - "norm_label": "positionboardresponse", - "id": "schemas_board_positionboardresponse" - }, - { - "label": "GroupBoardResponse", - "file_type": "code", - "source_file": "backend/app/schemas/board.py", - "source_location": "L17", - "community": 0, - "norm_label": "groupboardresponse", - "id": "schemas_board_groupboardresponse" - }, - { - "label": "BuildingBoardResponse", - "file_type": "code", - "source_file": "backend/app/schemas/board.py", - "source_location": "L25", - "community": 0, - "norm_label": "buildingboardresponse", - "id": "schemas_board_buildingboardresponse" - }, - { - "label": "PositionUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/board.py", - "source_location": "L40", - "community": 0, - "norm_label": "positionupdate", - "id": "schemas_board_positionupdate" - }, - { - "label": "BulkPositionUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/board.py", - "source_location": "L47", - "community": 0, - "norm_label": "bulkpositionupdate", - "id": "schemas_board_bulkpositionupdate" - }, - { - "label": "BuildingCreate", - "file_type": "code", - "source_file": "backend/app/schemas/building.py", - "source_location": "L6", - "community": 0, - "norm_label": "buildingcreate", - "id": "schemas_building_buildingcreate" - }, - { - "label": "BuildingUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/building.py", - "source_location": "L12", - "community": 0, - "norm_label": "buildingupdate", - "id": "schemas_building_buildingupdate" - }, - { - "label": "GroupCreate", - "file_type": "code", - "source_file": "backend/app/schemas/building.py", - "source_location": "L43", - "community": 0, - "norm_label": "groupcreate", - "id": "schemas_building_groupcreate" - }, - { - "label": "ChangelogStatusResponse", - "file_type": "code", - "source_file": "backend/app/schemas/changelog.py", - "source_location": "L8", - "community": 18, - "norm_label": "changelogstatusresponse", - "id": "schemas_changelog_changelogstatusresponse" - }, - { - "label": "Response schemas for the changelog endpoints.", - "file_type": "rationale", - "source_file": "backend/app/schemas/changelog.py", - "source_location": "L1", - "community": 18, - "norm_label": "response schemas for the changelog endpoints.", - "id": "schemas_changelog_rationale_1" - }, - { - "label": "Response shape for both GET /changelog/status and POST /changelog/mark-seen.", - "file_type": "rationale", - "source_file": "backend/app/schemas/changelog.py", - "source_location": "L9", - "community": 18, - "norm_label": "response shape for both get /changelog/status and post /changelog/mark-seen.", - "id": "schemas_changelog_rationale_9" - }, - { - "label": "common.py", - "file_type": "code", - "source_file": "backend/app/schemas/common.py", - "source_location": "L1", - "community": 0, - "norm_label": "common.py", - "id": "backend_app_schemas_common_py" - }, - { - "label": "ErrorResponse", - "file_type": "code", - "source_file": "backend/app/schemas/common.py", - "source_location": "L4", - "community": 0, - "norm_label": "errorresponse", - "id": "schemas_common_errorresponse" - }, - { - "label": "MemberBase", - "file_type": "code", - "source_file": "backend/app/schemas/member.py", - "source_location": "L8", - "community": 0, - "norm_label": "memberbase", - "id": "schemas_member_memberbase" - }, - { - "label": "MemberCreate", - "file_type": "code", - "source_file": "backend/app/schemas/member.py", - "source_location": "L15", - "community": 0, - "norm_label": "membercreate", - "id": "schemas_member_membercreate" - }, - { - "label": "MemberUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/member.py", - "source_location": "L19", - "community": 0, - "norm_label": "memberupdate", - "id": "schemas_member_memberupdate" - }, - { - "label": "MemberResponse", - "file_type": "code", - "source_file": "backend/app/schemas/member.py", - "source_location": "L27", - "community": 0, - "norm_label": "memberresponse", - "id": "schemas_member_memberresponse" - }, - { - "label": "MemberPreferencesUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/member.py", - "source_location": "L35", - "community": 0, - "norm_label": "memberpreferencesupdate", - "id": "schemas_member_memberpreferencesupdate" - }, - { - "label": "SyncApply", - "file_type": "code", - "source_file": "backend/app/schemas/member.py", - "source_location": "L59", - "community": 0, - "norm_label": "syncapply", - "id": "schemas_member_syncapply" - }, - { - "label": "SyncApplyResponse", - "file_type": "code", - "source_file": "backend/app/schemas/member.py", - "source_location": "L65", - "community": 0, - "norm_label": "syncapplyresponse", - "id": "schemas_member_syncapplyresponse" - }, - { - "label": "PostResponse", - "file_type": "code", - "source_file": "backend/app/schemas/post.py", - "source_location": "L6", - "community": 0, - "norm_label": "postresponse", - "id": "schemas_post_postresponse" - }, - { - "label": "PostUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/post.py", - "source_location": "L17", - "community": 0, - "norm_label": "postupdate", - "id": "schemas_post_postupdate" - }, - { - "label": "PostConditionsUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/post.py", - "source_location": "L22", - "community": 0, - "norm_label": "postconditionsupdate", - "id": "schemas_post_postconditionsupdate" - }, - { - "label": "PostConditionResponse", - "file_type": "code", - "source_file": "backend/app/schemas/post_condition.py", - "source_location": "L4", - "community": 0, - "norm_label": "postconditionresponse", - "id": "schemas_post_condition_postconditionresponse" - }, - { - "label": "PostSuggestionApplyRequest", - "file_type": "code", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L79", - "community": 2, - "norm_label": "postsuggestionapplyrequest", - "id": "schemas_post_suggestions_postsuggestionapplyrequest" - }, - { - "label": "StaleEntry", - "file_type": "code", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L91", - "community": 2, - "norm_label": "staleentry", - "id": "schemas_post_suggestions_staleentry" - }, - { - "label": "Pydantic schemas for the Suggest Post Assignments feature. These schemas define", - "file_type": "rationale", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L1", - "community": 2, - "norm_label": "pydantic schemas for the suggest post assignments feature. these schemas define", - "id": "schemas_post_suggestions_rationale_1" - }, - { - "label": "A single post assignment suggestion produced by the greedy algorithm. Attri", - "file_type": "rationale", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L13", - "community": 4, - "norm_label": "a single post assignment suggestion produced by the greedy algorithm. attri", - "id": "schemas_post_suggestions_rationale_13" - }, - { - "label": "The full preview result returned by POST /post-suggestions. Attributes:", - "file_type": "rationale", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L66", - "community": 2, - "norm_label": "the full preview result returned by post /post-suggestions. attributes:", - "id": "schemas_post_suggestions_rationale_66" - }, - { - "label": "Request body for POST /post-suggestions/apply. Attributes: apply_po", - "file_type": "rationale", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L80", - "community": 2, - "norm_label": "request body for post /post-suggestions/apply. attributes: apply_po", - "id": "schemas_post_suggestions_rationale_80" - }, - { - "label": "A single stale-state violation detected during apply revalidation. Attribut", - "file_type": "rationale", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L92", - "community": 2, - "norm_label": "a single stale-state violation detected during apply revalidation. attribut", - "id": "schemas_post_suggestions_rationale_92" - }, - { - "label": "Response body for a successful POST /post-suggestions/apply. Attributes:", - "file_type": "rationale", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L117", - "community": 2, - "norm_label": "response body for a successful post /post-suggestions/apply. attributes:", - "id": "schemas_post_suggestions_rationale_117" - }, - { - "label": "SiegeCreate", - "file_type": "code", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L8", - "community": 0, - "norm_label": "siegecreate", - "id": "schemas_siege_siegecreate" - }, - { - "label": "SiegeUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L12", - "community": 0, - "norm_label": "siegeupdate", - "id": "schemas_siege_siegeupdate" - }, - { - "label": "SiegeResponse", - "file_type": "code", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L16", - "community": 0, - "norm_label": "siegeresponse", - "id": "schemas_siege_siegeresponse" - }, - { - "label": "SiegeMemberResponse", - "file_type": "code", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L6", - "community": 0, - "norm_label": "siegememberresponse", - "id": "schemas_siege_member_siegememberresponse" - }, - { - "label": "resolve_member_fields()", - "file_type": "code", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L19", - "community": 1, - "norm_label": "resolve_member_fields()", - "id": "schemas_siege_member_resolve_member_fields" - }, - { - "label": "SiegeMemberUpdate", - "file_type": "code", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L27", - "community": 0, - "norm_label": "siegememberupdate", - "id": "schemas_siege_member_siegememberupdate" - }, - { - "label": "VersionResponse", - "file_type": "code", - "source_file": "backend/app/schemas/version.py", - "source_location": "L4", - "community": 12, - "norm_label": "versionresponse", - "id": "schemas_version_versionresponse" - }, - { - "label": "_build_preview()", - "file_type": "code", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L114", - "community": 2, - "norm_label": "_build_preview()", - "id": "services_attack_day_build_preview" - }, - { - "label": "_now_utc()", - "file_type": "code", - "source_file": "backend/app/services/autofill.py", - "source_location": "L23", - "community": 2, - "norm_label": "_now_utc()", - "id": "services_autofill_now_utc" - }, - { - "label": "_get_siege_for_position()", - "file_type": "code", - "source_file": "backend/app/services/board.py", - "source_location": "L89", - "community": 0, - "norm_label": "_get_siege_for_position()", - "id": "services_board_get_siege_for_position" - }, - { - "label": "_validate_position_state()", - "file_type": "code", - "source_file": "backend/app/services/board.py", - "source_location": "L97", - "community": 34, - "norm_label": "_validate_position_state()", - "id": "services_board_validate_position_state" - }, - { - "label": "_validate_member_active()", - "file_type": "code", - "source_file": "backend/app/services/board.py", - "source_location": "L112", - "community": 16, - "norm_label": "_validate_member_active()", - "id": "services_board_validate_member_active" - }, - { - "label": "Return the full nested board structure for a siege. Raises 404 if the siege", - "file_type": "rationale", - "source_file": "backend/app/services/board.py", - "source_location": "L16", - "community": 0, - "norm_label": "return the full nested board structure for a siege. raises 404 if the siege", - "id": "services_board_rationale_16" - }, - { - "label": "Validate the logical consistency of position flag combinations.", - "file_type": "rationale", - "source_file": "backend/app/services/board.py", - "source_location": "L98", - "community": 34, - "norm_label": "validate the logical consistency of position flag combinations.", - "id": "services_board_rationale_98" - }, - { - "label": "Update a single position's assignment. Raises: 404 if position not", - "file_type": "rationale", - "source_file": "backend/app/services/board.py", - "source_location": "L123", - "community": 16, - "norm_label": "update a single position's assignment. raises: 404 if position not", - "id": "services_board_rationale_123" - }, - { - "label": "Apply multiple position updates in a single transaction. Each update dict m", - "file_type": "rationale", - "source_file": "backend/app/services/board.py", - "source_location": "L172", - "community": 34, - "norm_label": "apply multiple position updates in a single transaction. each update dict m", - "id": "services_board_rationale_172" - }, - { - "label": "BotClient", - "file_type": "code", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L8", - "community": 6, - "norm_label": "botclient", - "id": "services_bot_client_botclient" - }, - { - "label": "._make_client()", - "file_type": "code", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L11", - "community": 6, - "norm_label": "._make_client()", - "id": "services_bot_client_botclient_make_client" - }, - { - "label": "HTTP client for the Discord bot sidecar API.", - "file_type": "rationale", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L1", - "community": 6, - "norm_label": "http client for the discord bot sidecar api.", - "id": "services_bot_client_rationale_1" - }, - { - "label": "Send DM via bot. Returns True on success, False on error.", - "file_type": "rationale", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L19", - "community": 6, - "norm_label": "send dm via bot. returns true on success, false on error.", - "id": "services_bot_client_rationale_19" - }, - { - "label": "Post text to channel. Returns True on success, False on error.", - "file_type": "rationale", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L32", - "community": 6, - "norm_label": "post text to channel. returns true on success, false on error.", - "id": "services_bot_client_rationale_32" - }, - { - "label": "Post image to channel. Returns the CDN URL on success, None on error.", - "file_type": "rationale", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L45", - "community": 6, - "norm_label": "post image to channel. returns the cdn url on success, none on error.", - "id": "services_bot_client_rationale_45" - }, - { - "label": "Check guild membership via bot sidecar. Returns the member dict (includi", - "file_type": "rationale", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L72", - "community": 6, - "norm_label": "check guild membership via bot sidecar. returns the member dict (includi", - "id": "services_bot_client_rationale_72" - }, - { - "label": "_rebuild_groups_for_level()", - "file_type": "code", - "source_file": "backend/app/services/buildings.py", - "source_location": "L17", - "community": 11, - "norm_label": "_rebuild_groups_for_level()", - "id": "services_buildings_rebuild_groups_for_level" - }, - { - "label": "_get_building_type_config()", - "file_type": "code", - "source_file": "backend/app/services/buildings.py", - "source_location": "L114", - "community": 11, - "norm_label": "_get_building_type_config()", - "id": "services_buildings_get_building_type_config" - }, - { - "label": "_require_planning_or_not_locked()", - "file_type": "code", - "source_file": "backend/app/services/buildings.py", - "source_location": "L141", - "community": 11, - "norm_label": "_require_planning_or_not_locked()", - "id": "services_buildings_require_planning_or_not_locked" - }, - { - "label": "_create_groups_and_positions()", - "file_type": "code", - "source_file": "backend/app/services/buildings.py", - "source_location": "L150", - "community": 11, - "norm_label": "_create_groups_and_positions()", - "id": "services_buildings_create_groups_and_positions" - }, - { - "label": "Rebuild groups and positions so they match the level-appropriate configuration.", - "file_type": "rationale", - "source_file": "backend/app/services/buildings.py", - "source_location": "L23", - "community": 11, - "norm_label": "rebuild groups and positions so they match the level-appropriate configuration.", - "id": "services_buildings_rationale_23" - }, - { - "label": "Raise 400 if the siege is locked for layout changes.", - "file_type": "rationale", - "source_file": "backend/app/services/buildings.py", - "source_location": "L142", - "community": 11, - "norm_label": "raise 400 if the siege is locked for layout changes.", - "id": "services_buildings_rationale_142" - }, - { - "label": "Auto-create BuildingGroups and Positions from config.", - "file_type": "rationale", - "source_file": "backend/app/services/buildings.py", - "source_location": "L156", - "community": 11, - "norm_label": "auto-create buildinggroups and positions from config.", - "id": "services_buildings_rationale_156" - }, - { - "label": "building_capacity.py", - "file_type": "code", - "source_file": "backend/app/services/building_capacity.py", - "source_location": "L1", - "community": 11, - "norm_label": "building_capacity.py", - "id": "backend_app_services_building_capacity_py" - }, - { - "label": "get_team_count()", - "file_type": "code", - "source_file": "backend/app/services/building_capacity.py", - "source_location": "L13", - "community": 11, - "norm_label": "get_team_count()", - "id": "services_building_capacity_get_team_count" - }, - { - "label": "Return the theoretical total team slots for a building type at a given level.", - "file_type": "rationale", - "source_file": "backend/app/services/building_capacity.py", - "source_location": "L14", - "community": 11, - "norm_label": "return the theoretical total team slots for a building type at a given level.", - "id": "services_building_capacity_rationale_14" - }, - { - "label": "_load_assignments()", - "file_type": "code", - "source_file": "backend/app/services/comparison.py", - "source_location": "L13", - "community": 21, - "norm_label": "_load_assignments()", - "id": "services_comparison_load_assignments" - }, - { - "label": "_load_member_names()", - "file_type": "code", - "source_file": "backend/app/services/comparison.py", - "source_location": "L45", - "community": 21, - "norm_label": "_load_member_names()", - "id": "services_comparison_load_member_names" - }, - { - "label": "get_most_recent_completed()", - "file_type": "code", - "source_file": "backend/app/services/comparison.py", - "source_location": "L52", - "community": 21, - "norm_label": "get_most_recent_completed()", - "id": "services_comparison_get_most_recent_completed" - }, - { - "label": "Return {member_id: [PositionKey, ...]} for non-reserve, non-disabled assigned po", - "file_type": "rationale", - "source_file": "backend/app/services/comparison.py", - "source_location": "L14", - "community": 21, - "norm_label": "return {member_id: [positionkey, ...]} for non-reserve, non-disabled assigned po", - "id": "services_comparison_rationale_14" - }, - { - "label": "Service logic for Discord guild member \u2192 clan member matching.", - "file_type": "rationale", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L1", - "community": 24, - "norm_label": "service logic for discord guild member \u2192 clan member matching.", - "id": "services_discord_sync_rationale_1" - }, - { - "label": "Return proposed matches between Discord guild members and clan members. Mat", - "file_type": "rationale", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L12", - "community": 24, - "norm_label": "return proposed matches between discord guild members and clan members. mat", - "id": "services_discord_sync_rationale_12" - }, - { - "label": "Apply accepted sync matches, writing discord_username and discord_id. Unkno", - "file_type": "rationale", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L153", - "community": 24, - "norm_label": "apply accepted sync matches, writing discord_username and discord_id. unkno", - "id": "services_discord_sync_rationale_153" - }, - { - "label": "image_gen.py", - "file_type": "code", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L1", - "community": 17, - "norm_label": "image_gen.py", - "id": "backend_app_services_image_gen_py" - }, - { - "label": "SiegeMemberWithName", - "file_type": "code", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L14", - "community": 0, - "norm_label": "siegememberwithname", - "id": "services_image_gen_siegememberwithname" - }, - { - "label": "_build_assignments_html()", - "file_type": "code", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L61", - "community": 17, - "norm_label": "_build_assignments_html()", - "id": "services_image_gen_build_assignments_html" - }, - { - "label": "_build_reserves_html()", - "file_type": "code", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L233", - "community": 17, - "norm_label": "_build_reserves_html()", - "id": "services_image_gen_build_reserves_html" - }, - { - "label": "_render_html_to_png()", - "file_type": "code", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L331", - "community": 17, - "norm_label": "_render_html_to_png()", - "id": "services_image_gen_render_html_to_png" - }, - { - "label": "generate_assignments_image()", - "file_type": "code", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L350", - "community": 17, - "norm_label": "generate_assignments_image()", - "id": "services_image_gen_generate_assignments_image" - }, - { - "label": "generate_reserves_image()", - "file_type": "code", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L360", - "community": 17, - "norm_label": "generate_reserves_image()", - "id": "services_image_gen_generate_reserves_image" - }, - { - "label": "Image generation service \u2014 renders HTML/CSS to PNG via Playwright.", - "file_type": "rationale", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L1", - "community": 17, - "norm_label": "image generation service \u2014 renders html/css to png via playwright.", - "id": "services_image_gen_rationale_1" - }, - { - "label": "Build the full assignments board HTML string. Args: board: Validate", - "file_type": "rationale", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L66", - "community": 17, - "norm_label": "build the full assignments board html string. args: board: validate", - "id": "services_image_gen_rationale_66" - }, - { - "label": "Build the reserves/members list HTML string. Args: members: Siege m", - "file_type": "rationale", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L237", - "community": 17, - "norm_label": "build the reserves/members list html string. args: members: siege m", - "id": "services_image_gen_rationale_237" - }, - { - "label": "Render an HTML string to PNG bytes using headless Chromium.", - "file_type": "rationale", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L332", - "community": 17, - "norm_label": "render an html string to png bytes using headless chromium.", - "id": "services_image_gen_rationale_332" - }, - { - "label": "Render the assignments board as a PNG. Returns raw PNG bytes.", - "file_type": "rationale", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L355", - "community": 17, - "norm_label": "render the assignments board as a png. returns raw png bytes.", - "id": "services_image_gen_rationale_355" - }, - { - "label": "Render the members/reserves list as a PNG. Returns raw PNG bytes.", - "file_type": "rationale", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L364", - "community": 17, - "norm_label": "render the members/reserves list as a png. returns raw png bytes.", - "id": "services_image_gen_rationale_364" - }, - { - "label": "Transition a planning siege to active status. Raises: 404 if siege", - "file_type": "rationale", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L18", - "community": 2, - "norm_label": "transition a planning siege to active status. raises: 404 if siege", - "id": "services_lifecycle_rationale_18" - }, - { - "label": "Transition an active siege to complete status. Raises: 404 if siege", - "file_type": "rationale", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L62", - "community": 2, - "norm_label": "transition an active siege to complete status. raises: 404 if siege", - "id": "services_lifecycle_rationale_62" - }, - { - "label": "Transition a completed siege back to planning status. Raises: 404 i", - "file_type": "rationale", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L86", - "community": 2, - "norm_label": "transition a completed siege back to planning status. raises: 404 i", - "id": "services_lifecycle_rationale_86" - }, - { - "label": "Deep-copy a siege into a new planning siege. Rules: - New siege: same d", - "file_type": "rationale", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L110", - "community": 0, - "norm_label": "deep-copy a siege into a new planning siege. rules: - new siege: same d", - "id": "services_lifecycle_rationale_110" - }, - { - "label": "deactivate_member()", - "file_type": "code", - "source_file": "backend/app/services/members.py", - "source_location": "L81", - "community": 6, - "norm_label": "deactivate_member()", - "id": "services_members_deactivate_member" - }, - { - "label": "notification_message.py", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L1", - "community": 15, - "norm_label": "notification_message.py", - "id": "backend_app_services_notification_message_py" - }, - { - "label": "PositionInfo", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L60", - "community": 0, - "norm_label": "positioninfo", - "id": "services_notification_message_positioninfo" - }, - { - "label": "_position_sort_key()", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L74", - "community": 15, - "norm_label": "_position_sort_key()", - "id": "services_notification_message_position_sort_key" - }, - { - "label": "_position_label()", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L84", - "community": 15, - "norm_label": "_position_label()", - "id": "services_notification_message_position_label" - }, - { - "label": "_positions_to_key_set()", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L110", - "community": 15, - "norm_label": "_positions_to_key_set()", - "id": "services_notification_message_positions_to_key_set" - }, - { - "label": "_positions_from_keys()", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L117", - "community": 15, - "norm_label": "_positions_from_keys()", - "id": "services_notification_message_positions_from_keys" - }, - { - "label": "_build_section()", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L126", - "community": 15, - "norm_label": "_build_section()", - "id": "services_notification_message_build_section" - }, - { - "label": "build_member_notification_message()", - "file_type": "code", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L153", - "community": 15, - "norm_label": "build_member_notification_message()", - "id": "services_notification_message_build_member_notification_message" - }, - { - "label": "Build rich per-member Discord DM messages for siege assignment notifications.", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L1", - "community": 15, - "norm_label": "build rich per-member discord dm messages for siege assignment notifications.", - "id": "services_notification_message_rationale_1" - }, - { - "label": "Minimal description of a single assigned position.", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L61", - "community": 0, - "norm_label": "minimal description of a single assigned position.", - "id": "services_notification_message_rationale_61" - }, - { - "label": "Return a sortable tuple for consistent ordering within a section. Sorts by:", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L75", - "community": 15, - "norm_label": "return a sortable tuple for consistent ordering within a section. sorts by:", - "id": "services_notification_message_rationale_75" - }, - { - "label": "Format a human-readable label for a position. Posts always use the short ``", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L85", - "community": 15, - "norm_label": "format a human-readable label for a position. posts always use the short ``", - "id": "services_notification_message_rationale_85" - }, - { - "label": "Convert a list of PositionInfo objects to a set of comparable tuples.", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L111", - "community": 15, - "norm_label": "convert a list of positioninfo objects to a set of comparable tuples.", - "id": "services_notification_message_rationale_111" - }, - { - "label": "Filter ``positions`` to those whose key is in ``keys``, preserving PositionInfo", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L118", - "community": 15, - "norm_label": "filter ``positions`` to those whose key is in ``keys``, preserving positioninfo", - "id": "services_notification_message_rationale_118" - }, - { - "label": "Render one diff section as a header line followed by plain position lines.", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L131", - "community": 15, - "norm_label": "render one diff section as a header line followed by plain position lines.", - "id": "services_notification_message_rationale_131" - }, - { - "label": "Build a rich Discord DM message for a single siege member. Args: si", - "file_type": "rationale", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L161", - "community": 15, - "norm_label": "build a rich discord dm message for a single siege member. args: si", - "id": "services_notification_message_rationale_161" - }, - { - "label": "_get_siege_or_404()", - "file_type": "code", - "source_file": "backend/app/services/posts.py", - "source_location": "L15", - "community": 16, - "norm_label": "_get_siege_or_404()", - "id": "services_posts_get_siege_or_404" - }, - { - "label": "_get_post_for_siege_or_404()", - "file_type": "code", - "source_file": "backend/app/services/posts.py", - "source_location": "L23", - "community": 16, - "norm_label": "_get_post_for_siege_or_404()", - "id": "services_posts_get_post_for_siege_or_404" - }, - { - "label": "Return all Post records for a siege with active_conditions loaded. Raises:", - "file_type": "rationale", - "source_file": "backend/app/services/posts.py", - "source_location": "L37", - "community": 16, - "norm_label": "return all post records for a siege with active_conditions loaded. raises:", - "id": "services_posts_rationale_37" - }, - { - "label": "Update a post's priority and/or description. Raises: 404 if post no", - "file_type": "rationale", - "source_file": "backend/app/services/posts.py", - "source_location": "L55", - "community": 16, - "norm_label": "update a post's priority and/or description. raises: 404 if post no", - "id": "services_posts_rationale_55" - }, - { - "label": "Replace all active conditions on a post. Raises: 404 if post not fo", - "file_type": "rationale", - "source_file": "backend/app/services/posts.py", - "source_location": "L79", - "community": 16, - "norm_label": "replace all active conditions on a post. raises: 404 if post not fo", - "id": "services_posts_rationale_79" - }, - { - "label": "_get_target_position()", - "file_type": "code", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L517", - "community": 2, - "norm_label": "_get_target_position()", - "id": "services_post_suggestions_get_target_position" - }, - { - "label": "_null_entry()", - "file_type": "code", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L537", - "community": 2, - "norm_label": "_null_entry()", - "id": "services_post_suggestions_null_entry" - }, - { - "label": "Service implementing the Suggest Post Assignments feature. Public API: prev", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L1", - "community": 2, - "norm_label": "service implementing the suggest post assignments feature. public api: prev", - "id": "services_post_suggestions_rationale_1" - }, - { - "label": "Return the current UTC datetime (naive, matching DB TIMESTAMP columns).", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L71", - "community": 2, - "norm_label": "return the current utc datetime (naive, matching db timestamp columns).", - "id": "services_post_suggestions_rationale_71" - }, - { - "label": "Generate a greedy post assignment suggestion and persist it as a preview. T", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L79", - "community": 2, - "norm_label": "generate a greedy post assignment suggestion and persist it as a preview. t", - "id": "services_post_suggestions_rationale_79" - }, - { - "label": "Apply a subset of a stored post-suggestion preview atomically. The whole se", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L340", - "community": 2, - "norm_label": "apply a subset of a stored post-suggestion preview atomically. the whole se", - "id": "services_post_suggestions_rationale_340" - }, - { - "label": "Return the single target position from a post building, or None. Posts have", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L518", - "community": 2, - "norm_label": "return the single target position from a post building, or none. posts have", - "id": "services_post_suggestions_rationale_518" - }, - { - "label": "Build a PostSuggestionEntry with no suggestion (skipped post). Args:", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L546", - "community": 2, - "norm_label": "build a postsuggestionentry with no suggestion (skipped post). args:", - "id": "services_post_suggestions_rationale_546" - }, - { - "label": "# NOTE: _validate_position_state() from bulk_update_positions is NOT", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L418", - "community": 2, - "norm_label": "# note: _validate_position_state() from bulk_update_positions is not", - "id": "services_post_suggestions_rationale_418" - }, - { - "label": "# NOTE: session.refresh(pos) is not called post-write because the apply", - "file_type": "rationale", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L489", - "community": 2, - "norm_label": "# note: session.refresh(pos) is not called post-write because the apply", - "id": "services_post_suggestions_rationale_489" - }, - { - "label": "scrolls_per_player()", - "file_type": "code", - "source_file": "backend/app/services/sieges.py", - "source_location": "L19", - "community": 2, - "norm_label": "scrolls_per_player()", - "id": "services_sieges_scrolls_per_player" - }, - { - "label": "compute_scroll_count()", - "file_type": "code", - "source_file": "backend/app/services/sieges.py", - "source_location": "L28", - "community": 2, - "norm_label": "compute_scroll_count()", - "id": "services_sieges_compute_scroll_count" - }, - { - "label": "Return the per-player scroll limit for a siege. Matches the UI formula: 4 s", - "file_type": "rationale", - "source_file": "backend/app/services/sieges.py", - "source_location": "L20", - "community": 2, - "norm_label": "return the per-player scroll limit for a siege. matches the ui formula: 4 s", - "id": "services_sieges_rationale_20" - }, - { - "label": "Compute total scroll count from the theoretical capacity of every building.", - "file_type": "rationale", - "source_file": "backend/app/services/sieges.py", - "source_location": "L29", - "community": 2, - "norm_label": "compute total scroll count from the theoretical capacity of every building.", - "id": "services_sieges_rationale_29" - }, - { - "label": "seed.py", - "file_type": "code", - "source_file": "backend/scripts/seed.py", - "source_location": "L1", - "community": 7, - "norm_label": "seed.py", - "id": "backend_scripts_seed_py" - }, - { - "label": "seed_demo.py", - "file_type": "code", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L1", - "community": 7, - "norm_label": "seed_demo.py", - "id": "backend_scripts_seed_demo_py" - }, - { - "label": "get_or_create_members()", - "file_type": "code", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L95", - "community": 7, - "norm_label": "get_or_create_members()", - "id": "scripts_seed_demo_get_or_create_members" - }, - { - "label": "get_or_create_demo_siege()", - "file_type": "code", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L114", - "community": 7, - "norm_label": "get_or_create_demo_siege()", - "id": "scripts_seed_demo_get_or_create_demo_siege" - }, - { - "label": "seed_buildings_and_positions()", - "file_type": "code", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L133", - "community": 0, - "norm_label": "seed_buildings_and_positions()", - "id": "scripts_seed_demo_seed_buildings_and_positions" - }, - { - "label": "get_or_create_second_siege()", - "file_type": "code", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L203", - "community": 7, - "norm_label": "get_or_create_second_siege()", - "id": "scripts_seed_demo_get_or_create_second_siege" - }, - { - "label": "seed_siege_members()", - "file_type": "code", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L220", - "community": 7, - "norm_label": "seed_siege_members()", - "id": "scripts_seed_demo_seed_siege_members" - }, - { - "label": "Return existing demo members or create them.", - "file_type": "rationale", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L96", - "community": 7, - "norm_label": "return existing demo members or create them.", - "id": "scripts_seed_demo_rationale_96" - }, - { - "label": "Return the existing demo siege or create a new one.", - "file_type": "rationale", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L115", - "community": 7, - "norm_label": "return the existing demo siege or create a new one.", - "id": "scripts_seed_demo_rationale_115" - }, - { - "label": "Create buildings, groups, and positions; assign members round-robin. member", - "file_type": "rationale", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L139", - "community": 0, - "norm_label": "create buildings, groups, and positions; assign members round-robin. member", - "id": "scripts_seed_demo_rationale_139" - }, - { - "label": "Return the existing planning siege or create one one week after the first.", - "file_type": "rationale", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L204", - "community": 7, - "norm_label": "return the existing planning siege or create one one week after the first.", - "id": "scripts_seed_demo_rationale_204" - }, - { - "label": "Enrol members in the siege with attack day assignments.", - "file_type": "rationale", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L225", - "community": 7, - "norm_label": "enrol members in the siege with attack day assignments.", - "id": "scripts_seed_demo_rationale_225" - }, - { - "label": "config.py", - "file_type": "code", - "source_file": "bot/app/config.py", - "source_location": "L1", - "community": 28, - "norm_label": "config.py", - "id": "bot_app_config_py" - }, - { - "label": "discord_client.py", - "file_type": "code", - "source_file": "bot/app/discord_client.py", - "source_location": "L1", - "community": 6, - "norm_label": "discord_client.py", - "id": "bot_app_discord_client_py" - }, - { - "label": "SiegeBot", - "file_type": "code", - "source_file": "bot/app/discord_client.py", - "source_location": "L6", - "community": 6, - "norm_label": "siegebot", - "id": "app_discord_client_siegebot" - }, - { - "label": ".__init__()", - "file_type": "code", - "source_file": "bot/app/discord_client.py", - "source_location": "L9", - "community": 6, - "norm_label": ".__init__()", - "id": "app_discord_client_siegebot_init" - }, - { - "label": ".on_ready()", - "file_type": "code", - "source_file": "bot/app/discord_client.py", - "source_location": "L14", - "community": 6, - "norm_label": ".on_ready()", - "id": "app_discord_client_siegebot_on_ready" - }, - { - "label": "._require_guild()", - "file_type": "code", - "source_file": "bot/app/discord_client.py", - "source_location": "L17", - "community": 6, - "norm_label": "._require_guild()", - "id": "app_discord_client_siegebot_require_guild" - }, - { - "label": "Discord client for the Siege Assignment System.", - "file_type": "rationale", - "source_file": "bot/app/discord_client.py", - "source_location": "L7", - "community": 6, - "norm_label": "discord client for the siege assignment system.", - "id": "app_discord_client_rationale_7" - }, - { - "label": "Find member by username in the guild, open DM, send message.", - "file_type": "rationale", - "source_file": "bot/app/discord_client.py", - "source_location": "L23", - "community": 6, - "norm_label": "find member by username in the guild, open dm, send message.", - "id": "app_discord_client_rationale_23" - }, - { - "label": "Find text channel by name, post message.", - "file_type": "rationale", - "source_file": "bot/app/discord_client.py", - "source_location": "L34", - "community": 6, - "norm_label": "find text channel by name, post message.", - "id": "app_discord_client_rationale_34" - }, - { - "label": "Find text channel by name, post image as Discord file attachment. Retur", - "file_type": "rationale", - "source_file": "bot/app/discord_client.py", - "source_location": "L47", - "community": 6, - "norm_label": "find text channel by name, post image as discord file attachment. retur", - "id": "app_discord_client_rationale_47" - }, - { - "label": "Return list of guild members as dicts with id, username, and display_name.", - "file_type": "rationale", - "source_file": "bot/app/discord_client.py", - "source_location": "L62", - "community": 6, - "norm_label": "return list of guild members as dicts with id, username, and display_name.", - "id": "app_discord_client_rationale_62" - }, - { - "label": "http_api.py", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L1", - "community": 6, - "norm_label": "http_api.py", - "id": "bot_app_http_api_py" - }, - { - "label": "set_bot()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L22", - "community": 6, - "norm_label": "set_bot()", - "id": "app_http_api_set_bot" - }, - { - "label": "_get_bot()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L27", - "community": 6, - "norm_label": "_get_bot()", - "id": "app_http_api_get_bot" - }, - { - "label": "verify_api_key()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L36", - "community": 6, - "norm_label": "verify_api_key()", - "id": "app_http_api_verify_api_key" - }, - { - "label": "NotifyRequest", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L46", - "community": 6, - "norm_label": "notifyrequest", - "id": "app_http_api_notifyrequest" - }, - { - "label": "PostMessageRequest", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L51", - "community": 6, - "norm_label": "postmessagerequest", - "id": "app_http_api_postmessagerequest" - }, - { - "label": "version()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L57", - "community": 12, - "norm_label": "version()", - "id": "app_http_api_version" - }, - { - "label": "notify()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L83", - "community": 6, - "norm_label": "notify()", - "id": "app_http_api_notify" - }, - { - "label": "post_message()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L97", - "community": 6, - "norm_label": "post_message()", - "id": "app_http_api_post_message" - }, - { - "label": "post_image()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L111", - "community": 6, - "norm_label": "post_image()", - "id": "app_http_api_post_image" - }, - { - "label": "get_guild_member()", - "file_type": "code", - "source_file": "bot/app/http_api.py", - "source_location": "L136", - "community": 6, - "norm_label": "get_guild_member()", - "id": "app_http_api_get_guild_member" - }, - { - "label": "Validate the Bearer token against the configured bot API key.", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L37", - "community": 6, - "norm_label": "validate the bearer token against the configured bot api key.", - "id": "app_http_api_rationale_37" - }, - { - "label": "Return the bot version \u2014 no authentication required. Returns ``1.0.1+42.abc", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L58", - "community": 12, - "norm_label": "return the bot version \u2014 no authentication required. returns ``1.0.1+42.abc", - "id": "app_http_api_rationale_58" - }, - { - "label": "Health check \u2014 no authentication required.", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L78", - "community": 6, - "norm_label": "health check \u2014 no authentication required.", - "id": "app_http_api_rationale_78" - }, - { - "label": "Send a DM notification to a guild member.", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L87", - "community": 6, - "norm_label": "send a dm notification to a guild member.", - "id": "app_http_api_rationale_87" - }, - { - "label": "Post a text message to a guild channel.", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L101", - "community": 6, - "norm_label": "post a text message to a guild channel.", - "id": "app_http_api_rationale_101" - }, - { - "label": "Post an image to a guild channel.", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L116", - "community": 6, - "norm_label": "post an image to a guild channel.", - "id": "app_http_api_rationale_116" - }, - { - "label": "Retrieve guild member list.", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L130", - "community": 6, - "norm_label": "retrieve guild member list.", - "id": "app_http_api_rationale_130" - }, - { - "label": "Look up a single guild member by Discord user ID. Returns ``{\"is_member\": f", - "file_type": "rationale", - "source_file": "bot/app/http_api.py", - "source_location": "L140", - "community": 6, - "norm_label": "look up a single guild member by discord user id. returns ``{\"is_member\": f", - "id": "app_http_api_rationale_140" - }, - { - "label": "main.py", - "file_type": "code", - "source_file": "bot/app/main.py", - "source_location": "L1", - "community": 7, - "norm_label": "main.py", - "id": "bot_app_main_py" - }, - { - "label": "run_http_server()", - "file_type": "code", - "source_file": "bot/app/main.py", - "source_location": "L18", - "community": 7, - "norm_label": "run_http_server()", - "id": "app_main_run_http_server" - }, - { - "label": "run_discord_client()", - "file_type": "code", - "source_file": "bot/app/main.py", - "source_location": "L30", - "community": 7, - "norm_label": "run_discord_client()", - "id": "app_main_run_discord_client" - }, - { - "label": "main()", - "file_type": "code", - "source_file": "bot/app/main.py", - "source_location": "L36", - "community": 7, - "norm_label": "main()", - "id": "app_main_main" - }, - { - "label": "Run the FastAPI/uvicorn HTTP sidecar on port 8001.", - "file_type": "rationale", - "source_file": "bot/app/main.py", - "source_location": "L19", - "community": 7, - "norm_label": "run the fastapi/uvicorn http sidecar on port 8001.", - "id": "app_main_rationale_19" - }, - { - "label": "Connect and run the Discord client.", - "file_type": "rationale", - "source_file": "bot/app/main.py", - "source_location": "L31", - "community": 7, - "norm_label": "connect and run the discord client.", - "id": "app_main_rationale_31" - }, - { - "label": "Start both the Discord client and HTTP server concurrently.", - "file_type": "rationale", - "source_file": "bot/app/main.py", - "source_location": "L37", - "community": 7, - "norm_label": "start both the discord client and http server concurrently.", - "id": "app_main_rationale_37" - }, - { - "label": "telemetry.py", - "file_type": "code", - "source_file": "bot/app/telemetry.py", - "source_location": "L1", - "community": 31, - "norm_label": "telemetry.py", - "id": "bot_app_telemetry_py" - }, - { - "label": "__init__.py", - "file_type": "code", - "source_file": "bot/app/__init__.py", - "source_location": "L1", - "community": 40, - "norm_label": "__init__.py", - "id": "bot_app_init_py" - }, - { - "label": "eslint.config.js", - "file_type": "code", - "source_file": "frontend/eslint.config.js", - "source_location": "L1", - "community": 41, - "norm_label": "eslint.config.js", - "id": "frontend_eslint_config_js" - }, - { - "label": "playwright.config.ts", - "file_type": "code", - "source_file": "frontend/playwright.config.ts", - "source_location": "L1", - "community": 42, - "norm_label": "playwright.config.ts", - "id": "frontend_playwright_config_ts" - }, - { - "label": "postcss.config.js", - "file_type": "code", - "source_file": "frontend/postcss.config.js", - "source_location": "L1", - "community": 43, - "norm_label": "postcss.config.js", - "id": "frontend_postcss_config_js" - }, - { - "label": "tailwind.config.ts", - "file_type": "code", - "source_file": "frontend/tailwind.config.ts", - "source_location": "L1", - "community": 20, - "norm_label": "tailwind.config.ts", - "id": "frontend_tailwind_config_ts" - }, - { - "label": "vite.config.ts", - "file_type": "code", - "source_file": "frontend/vite.config.ts", - "source_location": "L1", - "community": 36, - "norm_label": "vite.config.ts", - "id": "frontend_vite_config_ts" - }, - { - "label": "vitest.config.ts", - "file_type": "code", - "source_file": "frontend/vitest.config.ts", - "source_location": "L1", - "community": 36, - "norm_label": "vitest.config.ts", - "id": "frontend_vitest_config_ts" - }, - { - "label": "board.spec.ts", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L1", - "community": 10, - "norm_label": "board.spec.ts", - "id": "frontend_e2e_board_spec_ts" - }, - { - "label": "apiCreateSiege()", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L13", - "community": 10, - "norm_label": "apicreatesiege()", - "id": "e2e_board_spec_apicreatesiege" - }, - { - "label": "apiAddBuilding()", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L27", - "community": 10, - "norm_label": "apiaddbuilding()", - "id": "e2e_board_spec_apiaddbuilding" - }, - { - "label": "apiCreateMember()", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L52", - "community": 10, - "norm_label": "apicreatemember()", - "id": "e2e_board_spec_apicreatemember" - }, - { - "label": "buildingsTab", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L127", - "community": 10, - "norm_label": "buildingstab", - "id": "e2e_board_spec_buildingstab" - }, - { - "label": "postsTab", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L128", - "community": 14, - "norm_label": "poststab", - "id": "e2e_board_spec_poststab" - }, - { - "label": "search", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L179", - "community": 10, - "norm_label": "search", - "id": "e2e_board_spec_search" - }, - { - "label": "roleSelect", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L198", - "community": 10, - "norm_label": "roleselect", - "id": "e2e_board_spec_roleselect" - }, - { - "label": "firstPositionSpan", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L238", - "community": 10, - "norm_label": "firstpositionspan", - "id": "e2e_board_spec_firstpositionspan" - }, - { - "label": "positionCell", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L239", - "community": 10, - "norm_label": "positioncell", - "id": "e2e_board_spec_positioncell" - }, - { - "label": "chevron", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L244", - "community": 10, - "norm_label": "chevron", - "id": "e2e_board_spec_chevron" - }, - { - "label": "autofillBtn", - "file_type": "code", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L367", - "community": 10, - "norm_label": "autofillbtn", - "id": "e2e_board_spec_autofillbtn" - }, - { - "label": "members.spec.ts", - "file_type": "code", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L1", - "community": 32, - "norm_label": "members.spec.ts", - "id": "frontend_e2e_members_spec_ts" - }, - { - "label": "ensureMemberSlotsAvailable()", - "file_type": "code", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L20", - "community": 32, - "norm_label": "ensurememberslotsavailable()", - "id": "e2e_members_spec_ensurememberslotsavailable" - }, - { - "label": "activeCheckbox", - "file_type": "code", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L125", - "community": 32, - "norm_label": "activecheckbox", - "id": "e2e_members_spec_activecheckbox" - }, - { - "label": "editLinks", - "file_type": "code", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L131", - "community": 32, - "norm_label": "editlinks", - "id": "e2e_members_spec_editlinks" - }, - { - "label": "siege-lifecycle.spec.ts", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L1", - "community": 10, - "norm_label": "siege-lifecycle.spec.ts", - "id": "frontend_e2e_siege_lifecycle_spec_ts" - }, - { - "label": "dateInput", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L121", - "community": 10, - "norm_label": "dateinput", - "id": "e2e_siege_lifecycle_spec_dateinput" - }, - { - "label": "url", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L153", - "community": 10, - "norm_label": "url", - "id": "e2e_siege_lifecycle_spec_url" - }, - { - "label": "tabStrip", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L181", - "community": 10, - "norm_label": "tabstrip", - "id": "e2e_siege_lifecycle_spec_tabstrip" - }, - { - "label": "boardLink", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L203", - "community": 10, - "norm_label": "boardlink", - "id": "e2e_siege_lifecycle_spec_boardlink" - }, - { - "label": "memberRow", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L369", - "community": 10, - "norm_label": "memberrow", - "id": "e2e_siege_lifecycle_spec_memberrow" - }, - { - "label": "activeBadge", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L382", - "community": 10, - "norm_label": "activebadge", - "id": "e2e_siege_lifecycle_spec_activebadge" - }, - { - "label": "errorBadge", - "file_type": "code", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L383", - "community": 10, - "norm_label": "errorbadge", - "id": "e2e_siege_lifecycle_spec_errorbadge" - }, - { - "label": "smoke.spec.ts", - "file_type": "code", - "source_file": "frontend/e2e/smoke.spec.ts", - "source_location": "L1", - "community": 44, - "norm_label": "smoke.spec.ts", - "id": "frontend_e2e_smoke_spec_ts" - }, - { - "label": "App.tsx", - "file_type": "code", - "source_file": "frontend/src/App.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "app.tsx", - "id": "frontend_src_app_tsx" - }, - { - "label": "App()", - "file_type": "code", - "source_file": "frontend/src/App.tsx", - "source_location": "L19", - "community": 1, - "norm_label": "app()", - "id": "src_app_app" - }, - { - "label": "main.tsx", - "file_type": "code", - "source_file": "frontend/src/main.tsx", - "source_location": "L1", - "community": 25, - "norm_label": "main.tsx", - "id": "frontend_src_main_tsx" - }, - { - "label": "queryClient", - "file_type": "code", - "source_file": "frontend/src/main.tsx", - "source_location": "L9", - "community": 25, - "norm_label": "queryclient", - "id": "src_main_queryclient" - }, - { - "label": "vite-env.d.ts", - "file_type": "code", - "source_file": "frontend/src/vite-env.d.ts", - "source_location": "L1", - "community": 45, - "norm_label": "vite-env.d.ts", - "id": "frontend_src_vite_env_d_ts" - }, - { - "label": "board.ts", - "file_type": "code", - "source_file": "frontend/src/api/board.ts", - "source_location": "L1", - "community": 0, - "norm_label": "board.ts", - "id": "frontend_src_api_board_ts" - }, - { - "label": "getBoard()", - "file_type": "code", - "source_file": "frontend/src/api/board.ts", - "source_location": "L4", - "community": 0, - "norm_label": "getboard()", - "id": "api_board_getboard" - }, - { - "label": "changelog.ts", - "file_type": "code", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L1", - "community": 26, - "norm_label": "changelog.ts", - "id": "frontend_src_api_changelog_ts" - }, - { - "label": "ChangelogStatus", - "file_type": "code", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L3", - "community": 26, - "norm_label": "changelogstatus", - "id": "api_changelog_changelogstatus" - }, - { - "label": "fetchChangelogStatus()", - "file_type": "code", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L7", - "community": 26, - "norm_label": "fetchchangelogstatus()", - "id": "api_changelog_fetchchangelogstatus" - }, - { - "label": "markChangelogSeen()", - "file_type": "code", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L12", - "community": 18, - "norm_label": "markchangelogseen()", - "id": "api_changelog_markchangelogseen" - }, - { - "label": "client.ts", - "file_type": "code", - "source_file": "frontend/src/api/client.ts", - "source_location": "L1", - "community": 27, - "norm_label": "client.ts", - "id": "frontend_src_api_client_ts" - }, - { - "label": "apiClient", - "file_type": "code", - "source_file": "frontend/src/api/client.ts", - "source_location": "L3", - "community": 27, - "norm_label": "apiclient", - "id": "api_client_apiclient" - }, - { - "label": "config.ts", - "file_type": "code", - "source_file": "frontend/src/api/config.ts", - "source_location": "L1", - "community": 20, - "norm_label": "config.ts", - "id": "frontend_src_api_config_ts" - }, - { - "label": "AppConfig", - "file_type": "code", - "source_file": "frontend/src/api/config.ts", - "source_location": "L3", - "community": 20, - "norm_label": "appconfig", - "id": "api_config_appconfig" - }, - { - "label": "fetchConfig()", - "file_type": "code", - "source_file": "frontend/src/api/config.ts", - "source_location": "L7", - "community": 20, - "norm_label": "fetchconfig()", - "id": "api_config_fetchconfig" - }, - { - "label": "members.ts", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L1", - "community": 1, - "norm_label": "members.ts", - "id": "frontend_src_api_members_ts" - }, - { - "label": "getMember()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L17", - "community": 1, - "norm_label": "getmember()", - "id": "api_members_getmember" - }, - { - "label": "createMember()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L22", - "community": 6, - "norm_label": "createmember()", - "id": "api_members_createmember" - }, - { - "label": "updateMember()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L32", - "community": 6, - "norm_label": "updatemember()", - "id": "api_members_updatemember" - }, - { - "label": "deleteMember()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L46", - "community": 1, - "norm_label": "deletemember()", - "id": "api_members_deletemember" - }, - { - "label": "getMemberPreferences()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L50", - "community": 6, - "norm_label": "getmemberpreferences()", - "id": "api_members_getmemberpreferences" - }, - { - "label": "updateMemberPreferences()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L59", - "community": 1, - "norm_label": "updatememberpreferences()", - "id": "api_members_updatememberpreferences" - }, - { - "label": "getPostConditions()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L72", - "community": 1, - "norm_label": "getpostconditions()", - "id": "api_members_getpostconditions" - }, - { - "label": "getMemberRoles()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L77", - "community": 1, - "norm_label": "getmemberroles()", - "id": "api_members_getmemberroles" - }, - { - "label": "previewDiscordSync()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L82", - "community": 24, - "norm_label": "previewdiscordsync()", - "id": "api_members_previewdiscordsync" - }, - { - "label": "applyDiscordSync()", - "file_type": "code", - "source_file": "frontend/src/api/members.ts", - "source_location": "L89", - "community": 24, - "norm_label": "applydiscordsync()", - "id": "api_members_applydiscordsync" - }, - { - "label": "notifySiegeMembers()", - "file_type": "code", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L8", - "community": 0, - "norm_label": "notifysiegemembers()", - "id": "api_notifications_notifysiegemembers" - }, - { - "label": "getNotificationBatch()", - "file_type": "code", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L17", - "community": 0, - "norm_label": "getnotificationbatch()", - "id": "api_notifications_getnotificationbatch" - }, - { - "label": "postToChannel()", - "file_type": "code", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L27", - "community": 0, - "norm_label": "posttochannel()", - "id": "api_notifications_posttochannel" - }, - { - "label": "posts.ts", - "file_type": "code", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L1", - "community": 33, - "norm_label": "posts.ts", - "id": "frontend_src_api_posts_ts" - }, - { - "label": "PostPriorityConfig", - "file_type": "code", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L4", - "community": 0, - "norm_label": "postpriorityconfig", - "id": "api_posts_postpriorityconfig" - }, - { - "label": "getPostPriorities()", - "file_type": "code", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L11", - "community": 33, - "norm_label": "getpostpriorities()", - "id": "api_posts_getpostpriorities" - }, - { - "label": "updatePostPriority()", - "file_type": "code", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L16", - "community": 33, - "norm_label": "updatepostpriority()", - "id": "api_posts_updatepostpriority" - }, - { - "label": "getPosts()", - "file_type": "code", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L27", - "community": 33, - "norm_label": "getposts()", - "id": "api_posts_getposts" - }, - { - "label": "updatePost()", - "file_type": "code", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L32", - "community": 16, - "norm_label": "updatepost()", - "id": "api_posts_updatepost" - }, - { - "label": "setPostConditions()", - "file_type": "code", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L44", - "community": 16, - "norm_label": "setpostconditions()", - "id": "api_posts_setpostconditions" - }, - { - "label": "sieges.ts", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L1", - "community": 2, - "norm_label": "sieges.ts", - "id": "frontend_src_api_sieges_ts" - }, - { - "label": "getSieges()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L20", - "community": 1, - "norm_label": "getsieges()", - "id": "api_sieges_getsieges" - }, - { - "label": "getSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L27", - "community": 1, - "norm_label": "getsiege()", - "id": "api_sieges_getsiege" - }, - { - "label": "createSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L32", - "community": 0, - "norm_label": "createsiege()", - "id": "api_sieges_createsiege" - }, - { - "label": "updateSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L37", - "community": 2, - "norm_label": "updatesiege()", - "id": "api_sieges_updatesiege" - }, - { - "label": "deleteSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L45", - "community": 2, - "norm_label": "deletesiege()", - "id": "api_sieges_deletesiege" - }, - { - "label": "activateSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L49", - "community": 2, - "norm_label": "activatesiege()", - "id": "api_sieges_activatesiege" - }, - { - "label": "completeSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L54", - "community": 2, - "norm_label": "completesiege()", - "id": "api_sieges_completesiege" - }, - { - "label": "cloneSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L59", - "community": 0, - "norm_label": "clonesiege()", - "id": "api_sieges_clonesiege" - }, - { - "label": "reopenSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L64", - "community": 2, - "norm_label": "reopensiege()", - "id": "api_sieges_reopensiege" - }, - { - "label": "validateSiege()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L69", - "community": 2, - "norm_label": "validatesiege()", - "id": "api_sieges_validatesiege" - }, - { - "label": "getBuildings()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L76", - "community": 11, - "norm_label": "getbuildings()", - "id": "api_sieges_getbuildings" - }, - { - "label": "createBuilding()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L83", - "community": 2, - "norm_label": "createbuilding()", - "id": "api_sieges_createbuilding" - }, - { - "label": "updateBuilding()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L94", - "community": 11, - "norm_label": "updatebuilding()", - "id": "api_sieges_updatebuilding" - }, - { - "label": "deleteBuilding()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L106", - "community": 11, - "norm_label": "deletebuilding()", - "id": "api_sieges_deletebuilding" - }, - { - "label": "getSiegeMembers()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L120", - "community": 1, - "norm_label": "getsiegemembers()", - "id": "api_sieges_getsiegemembers" - }, - { - "label": "getSiegeMemberPreferences()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L127", - "community": 14, - "norm_label": "getsiegememberpreferences()", - "id": "api_sieges_getsiegememberpreferences" - }, - { - "label": "previewAutofill()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L165", - "community": 2, - "norm_label": "previewautofill()", - "id": "api_sieges_previewautofill" - }, - { - "label": "applyAutofill()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L174", - "community": 2, - "norm_label": "applyautofill()", - "id": "api_sieges_applyautofill" - }, - { - "label": "previewAttackDay()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L183", - "community": 2, - "norm_label": "previewattackday()", - "id": "api_sieges_previewattackday" - }, - { - "label": "applyAttackDay()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L192", - "community": 2, - "norm_label": "applyattackday()", - "id": "api_sieges_applyattackday" - }, - { - "label": "compareSieges()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L201", - "community": 21, - "norm_label": "comparesieges()", - "id": "api_sieges_comparesieges" - }, - { - "label": "compareSiegesSpecific()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L210", - "community": 2, - "norm_label": "comparesiegesspecific()", - "id": "api_sieges_comparesiegesspecific" - }, - { - "label": "previewPostSuggestions()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L220", - "community": 2, - "norm_label": "previewpostsuggestions()", - "id": "api_sieges_previewpostsuggestions" - }, - { - "label": "applyPostSuggestions()", - "file_type": "code", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L229", - "community": 2, - "norm_label": "applypostsuggestions()", - "id": "api_sieges_applypostsuggestions" - }, - { - "label": "types.ts", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L1", - "community": 0, - "norm_label": "types.ts", - "id": "frontend_src_api_types_ts" - }, - { - "label": "MemberRole", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L2", - "community": 0, - "norm_label": "memberrole", - "id": "api_types_memberrole" - }, - { - "label": "SiegeStatus", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L3", - "community": 0, - "norm_label": "siegestatus", - "id": "api_types_siegestatus" - }, - { - "label": "BuildingType", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L4", - "community": 0, - "norm_label": "buildingtype", - "id": "api_types_buildingtype" - }, - { - "label": "Member", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L12", - "community": 0, - "norm_label": "member", - "id": "api_types_member" - }, - { - "label": "SyncMatch", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L23", - "community": 0, - "norm_label": "syncmatch", - "id": "api_types_syncmatch" - }, - { - "label": "SyncPreviewResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L32", - "community": 0, - "norm_label": "syncpreviewresponse", - "id": "api_types_syncpreviewresponse" - }, - { - "label": "SyncApplyItem", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L38", - "community": 1, - "norm_label": "syncapplyitem", - "id": "api_types_syncapplyitem" - }, - { - "label": "PostCondition", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L44", - "community": 0, - "norm_label": "postcondition", - "id": "api_types_postcondition" - }, - { - "label": "Siege", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L51", - "community": 0, - "norm_label": "siege", - "id": "api_types_siege" - }, - { - "label": "Building", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L62", - "community": 0, - "norm_label": "building", - "id": "api_types_building" - }, - { - "label": "MemberPreferenceSummary", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L72", - "community": 0, - "norm_label": "memberpreferencesummary", - "id": "api_types_memberpreferencesummary" - }, - { - "label": "PositionResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L79", - "community": 0, - "norm_label": "positionresponse", - "id": "api_types_positionresponse" - }, - { - "label": "BuildingGroupResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L89", - "community": 0, - "norm_label": "buildinggroupresponse", - "id": "api_types_buildinggroupresponse" - }, - { - "label": "BuildingResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L96", - "community": 0, - "norm_label": "buildingresponse", - "id": "api_types_buildingresponse" - }, - { - "label": "BoardResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L105", - "community": 0, - "norm_label": "boardresponse", - "id": "api_types_boardresponse" - }, - { - "label": "SiegeMember", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L111", - "community": 1, - "norm_label": "siegemember", - "id": "api_types_siegemember" - }, - { - "label": "Post", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L129", - "community": 0, - "norm_label": "post", - "id": "api_types_post" - }, - { - "label": "ValidationIssue", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L140", - "community": 2, - "norm_label": "validationissue", - "id": "api_types_validationissue" - }, - { - "label": "ValidationResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L146", - "community": 2, - "norm_label": "validationresult", - "id": "api_types_validationresult" - }, - { - "label": "AutofillAssignment", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L152", - "community": 2, - "norm_label": "autofillassignment", - "id": "api_types_autofillassignment" - }, - { - "label": "AutofillPreviewResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L158", - "community": 2, - "norm_label": "autofillpreviewresult", - "id": "api_types_autofillpreviewresult" - }, - { - "label": "AutofillApplyResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L163", - "community": 2, - "norm_label": "autofillapplyresult", - "id": "api_types_autofillapplyresult" - }, - { - "label": "AttackDayAssignment", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L168", - "community": 2, - "norm_label": "attackdayassignment", - "id": "api_types_attackdayassignment" - }, - { - "label": "AttackDayPreviewResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L173", - "community": 2, - "norm_label": "attackdaypreviewresult", - "id": "api_types_attackdaypreviewresult" - }, - { - "label": "AttackDayApplyResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L178", - "community": 2, - "norm_label": "attackdayapplyresult", - "id": "api_types_attackdayapplyresult" - }, - { - "label": "PositionKey", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L183", - "community": 21, - "norm_label": "positionkey", - "id": "api_types_positionkey" - }, - { - "label": "MemberDiff", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L190", - "community": 21, - "norm_label": "memberdiff", - "id": "api_types_memberdiff" - }, - { - "label": "ComparisonResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L198", - "community": 21, - "norm_label": "comparisonresult", - "id": "api_types_comparisonresult" - }, - { - "label": "NotificationResultItem", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L205", - "community": 0, - "norm_label": "notificationresultitem", - "id": "api_types_notificationresultitem" - }, - { - "label": "NotificationBatchResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L214", - "community": 0, - "norm_label": "notificationbatchresponse", - "id": "api_types_notificationbatchresponse" - }, - { - "label": "NotifyResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L220", - "community": 0, - "norm_label": "notifyresponse", - "id": "api_types_notifyresponse" - }, - { - "label": "GenerateImagesResponse", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L227", - "community": 0, - "norm_label": "generateimagesresponse", - "id": "api_types_generateimagesresponse" - }, - { - "label": "VersionInfo", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L233", - "community": 12, - "norm_label": "versioninfo", - "id": "api_types_versioninfo" - }, - { - "label": "BuildingTypeInfo", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L241", - "community": 2, - "norm_label": "buildingtypeinfo", - "id": "api_types_buildingtypeinfo" - }, - { - "label": "MemberRoleInfo", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L249", - "community": 1, - "norm_label": "memberroleinfo", - "id": "api_types_memberroleinfo" - }, - { - "label": "PostSuggestionSkipReason", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L256", - "community": 0, - "norm_label": "postsuggestionskipreason", - "id": "api_types_postsuggestionskipreason" - }, - { - "label": "PostSuggestionPreviewResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L279", - "community": 2, - "norm_label": "postsuggestionpreviewresult", - "id": "api_types_postsuggestionpreviewresult" - }, - { - "label": "PostSuggestionStaleReason", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L284", - "community": 0, - "norm_label": "postsuggestionstalereason", - "id": "api_types_postsuggestionstalereason" - }, - { - "label": "PostSuggestionStaleEntry", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L291", - "community": 4, - "norm_label": "postsuggestionstaleentry", - "id": "api_types_postsuggestionstaleentry" - }, - { - "label": "PostSuggestionApplyResult", - "file_type": "code", - "source_file": "frontend/src/api/types.ts", - "source_location": "L298", - "community": 2, - "norm_label": "postsuggestionapplyresult", - "id": "api_types_postsuggestionapplyresult" - }, - { - "label": "getVersion()", - "file_type": "code", - "source_file": "frontend/src/api/version.ts", - "source_location": "L5", - "community": 12, - "norm_label": "getversion()", - "id": "api_version_getversion" - }, - { - "label": "useVersion()", - "file_type": "code", - "source_file": "frontend/src/api/version.ts", - "source_location": "L10", - "community": 12, - "norm_label": "useversion()", - "id": "api_version_useversion" - }, - { - "label": "CarouselSlide", - "file_type": "code", - "source_file": "frontend/src/components/Carousel.tsx", - "source_location": "L10", - "community": 19, - "norm_label": "carouselslide", - "id": "components_carousel_carouselslide" - }, - { - "label": "CarouselProps", - "file_type": "code", - "source_file": "frontend/src/components/Carousel.tsx", - "source_location": "L22", - "community": 19, - "norm_label": "carouselprops", - "id": "components_carousel_carouselprops" - }, - { - "label": "Carousel()", - "file_type": "code", - "source_file": "frontend/src/components/Carousel.tsx", - "source_location": "L35", - "community": 19, - "norm_label": "carousel()", - "id": "components_carousel_carousel" - }, - { - "label": "ChangelogDropdown.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L1", - "community": 26, - "norm_label": "changelogdropdown.tsx", - "id": "frontend_src_components_changelogdropdown_tsx" - }, - { - "label": "hasUnread()", - "file_type": "code", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L29", - "community": 26, - "norm_label": "hasunread()", - "id": "components_changelogdropdown_hasunread" - }, - { - "label": "DiscordSyncModal.tsx", - "file_type": "code", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "discordsyncmodal.tsx", - "id": "frontend_src_components_discordsyncmodal_tsx" - }, - { - "label": "ConfidenceVariant", - "file_type": "code", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L31", - "community": 1, - "norm_label": "confidencevariant", - "id": "components_discordsyncmodal_confidencevariant" - }, - { - "label": "CONFIDENCE_LABEL", - "file_type": "code", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L39", - "community": 1, - "norm_label": "confidence_label", - "id": "components_discordsyncmodal_confidence_label" - }, - { - "label": "Props", - "file_type": "code", - "source_file": "frontend/src/components/GroupByToggle.tsx", - "source_location": "L11", - "community": 1, - "norm_label": "props", - "id": "components_groupbytoggle_props" - }, - { - "label": "GroupByToggle()", - "file_type": "code", - "source_file": "frontend/src/components/GroupByToggle.tsx", - "source_location": "L31", - "community": 1, - "norm_label": "groupbytoggle()", - "id": "components_groupbytoggle_groupbytoggle" - }, - { - "label": "Layout.tsx", - "file_type": "code", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L1", - "community": 20, - "norm_label": "layout.tsx", - "id": "frontend_src_components_layout_tsx" - }, - { - "label": "navLinkClass()", - "file_type": "code", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L9", - "community": 20, - "norm_label": "navlinkclass()", - "id": "components_layout_navlinkclass" - }, - { - "label": "Layout()", - "file_type": "code", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L17", - "community": 20, - "norm_label": "layout()", - "id": "components_layout_layout" - }, - { - "label": "MemberWithMatches", - "file_type": "code", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L57", - "community": 14, - "norm_label": "memberwithmatches", - "id": "components_poststab_memberwithmatches" - }, - { - "label": "DuplicateConditionMap", - "file_type": "code", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L64", - "community": 14, - "norm_label": "duplicateconditionmap", - "id": "components_poststab_duplicateconditionmap" - }, - { - "label": "buildDuplicateConditionMap()", - "file_type": "code", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L68", - "community": 14, - "norm_label": "buildduplicateconditionmap()", - "id": "components_poststab_buildduplicateconditionmap" - }, - { - "label": "findPostPosition()", - "file_type": "code", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L85", - "community": 14, - "norm_label": "findpostposition()", - "id": "components_poststab_findpostposition" - }, - { - "label": "MemberAssignRow()", - "file_type": "code", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L100", - "community": 14, - "norm_label": "memberassignrow()", - "id": "components_poststab_memberassignrow" - }, - { - "label": "OutcomeFilter", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L30", - "community": 4, - "norm_label": "outcomefilter", - "id": "components_postsuggestionsmodal_outcomefilter" - }, - { - "label": "Classification", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L32", - "community": 4, - "norm_label": "classification", - "id": "components_postsuggestionsmodal_classification" - }, - { - "label": "PRIORITY_META", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L42", - "community": 4, - "norm_label": "priority_meta", - "id": "components_postsuggestionsmodal_priority_meta" - }, - { - "label": "getPriorityMeta()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L64", - "community": 4, - "norm_label": "getprioritymeta()", - "id": "components_postsuggestionsmodal_getprioritymeta" - }, - { - "label": "SKIP_REASON_LABEL", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L70", - "community": 4, - "norm_label": "skip_reason_label", - "id": "components_postsuggestionsmodal_skip_reason_label" - }, - { - "label": "STALE_REASON_LABEL", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L82", - "community": 4, - "norm_label": "stale_reason_label", - "id": "components_postsuggestionsmodal_stale_reason_label" - }, - { - "label": "TileConfig", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L93", - "community": 4, - "norm_label": "tileconfig", - "id": "components_postsuggestionsmodal_tileconfig" - }, - { - "label": "classify()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L159", - "community": 4, - "norm_label": "classify()", - "id": "components_postsuggestionsmodal_classify" - }, - { - "label": "Pill()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L169", - "community": 4, - "norm_label": "pill()", - "id": "components_postsuggestionsmodal_pill" - }, - { - "label": "ChangeCell()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L197", - "community": 4, - "norm_label": "changecell()", - "id": "components_postsuggestionsmodal_changecell" - }, - { - "label": "SkipIcon()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L248", - "community": 4, - "norm_label": "skipicon()", - "id": "components_postsuggestionsmodal_skipicon" - }, - { - "label": "ConditionCell()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L259", - "community": 4, - "norm_label": "conditioncell()", - "id": "components_postsuggestionsmodal_conditioncell" - }, - { - "label": "SummaryTile()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L290", - "community": 4, - "norm_label": "summarytile()", - "id": "components_postsuggestionsmodal_summarytile" - }, - { - "label": "StateLoading()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L345", - "community": 4, - "norm_label": "stateloading()", - "id": "components_postsuggestionsmodal_stateloading" - }, - { - "label": "StateEmpty()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L355", - "community": 4, - "norm_label": "stateempty()", - "id": "components_postsuggestionsmodal_stateempty" - }, - { - "label": "StateStaleConflict()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L379", - "community": 4, - "norm_label": "statestaleconflict()", - "id": "components_postsuggestionsmodal_statestaleconflict" - }, - { - "label": "ExpiryCountdown", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L476", - "community": 4, - "norm_label": "expirycountdown", - "id": "components_postsuggestionsmodal_expirycountdown" - }, - { - "label": "useExpiryCountdown()", - "file_type": "code", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L486", - "community": 4, - "norm_label": "useexpirycountdown()", - "id": "components_postsuggestionsmodal_useexpirycountdown" - }, - { - "label": "RequireAuth.tsx", - "file_type": "code", - "source_file": "frontend/src/components/RequireAuth.tsx", - "source_location": "L1", - "community": 20, - "norm_label": "requireauth.tsx", - "id": "frontend_src_components_requireauth_tsx" - }, - { - "label": "RequireAuth()", - "file_type": "code", - "source_file": "frontend/src/components/RequireAuth.tsx", - "source_location": "L4", - "community": 20, - "norm_label": "requireauth()", - "id": "components_requireauth_requireauth" - }, - { - "label": "SiegeLayout.tsx", - "file_type": "code", - "source_file": "frontend/src/components/SiegeLayout.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "siegelayout.tsx", - "id": "frontend_src_components_siegelayout_tsx" - }, - { - "label": "SiegeLayout()", - "file_type": "code", - "source_file": "frontend/src/components/SiegeLayout.tsx", - "source_location": "L13", - "community": 1, - "norm_label": "siegelayout()", - "id": "components_siegelayout_siegelayout" - }, - { - "label": "badge.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "badge.tsx", - "id": "frontend_src_components_ui_badge_tsx" - }, - { - "label": "badgeVariants", - "file_type": "code", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L5", - "community": 1, - "norm_label": "badgevariants", - "id": "ui_badge_badgevariants" - }, - { - "label": "BadgeProps", - "file_type": "code", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L29", - "community": 1, - "norm_label": "badgeprops", - "id": "ui_badge_badgeprops" - }, - { - "label": "Badge()", - "file_type": "code", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L34", - "community": 1, - "norm_label": "badge()", - "id": "ui_badge_badge" - }, - { - "label": "button.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "button.tsx", - "id": "frontend_src_components_ui_button_tsx" - }, - { - "label": "buttonVariants", - "file_type": "code", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L6", - "community": 1, - "norm_label": "buttonvariants", - "id": "ui_button_buttonvariants" - }, - { - "label": "ButtonProps", - "file_type": "code", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L36", - "community": 1, - "norm_label": "buttonprops", - "id": "ui_button_buttonprops" - }, - { - "label": "Button", - "file_type": "code", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L43", - "community": 1, - "norm_label": "button", - "id": "ui_button_button" - }, - { - "label": "Checkbox", - "file_type": "code", - "source_file": "frontend/src/components/ui/checkbox.tsx", - "source_location": "L6", - "community": 1, - "norm_label": "checkbox", - "id": "ui_checkbox_checkbox" - }, - { - "label": "dialog.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "dialog.tsx", - "id": "frontend_src_components_ui_dialog_tsx" - }, - { - "label": "DialogOverlay", - "file_type": "code", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L11", - "community": 1, - "norm_label": "dialogoverlay", - "id": "ui_dialog_dialogoverlay" - }, - { - "label": "DialogContent", - "file_type": "code", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L26", - "community": 1, - "norm_label": "dialogcontent", - "id": "ui_dialog_dialogcontent" - }, - { - "label": "DialogHeader()", - "file_type": "code", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L50", - "community": 1, - "norm_label": "dialogheader()", - "id": "ui_dialog_dialogheader" - }, - { - "label": "DialogFooter()", - "file_type": "code", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L66", - "community": 1, - "norm_label": "dialogfooter()", - "id": "ui_dialog_dialogfooter" - }, - { - "label": "DialogTitle", - "file_type": "code", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L82", - "community": 1, - "norm_label": "dialogtitle", - "id": "ui_dialog_dialogtitle" - }, - { - "label": "DialogDescription", - "file_type": "code", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L97", - "community": 1, - "norm_label": "dialogdescription", - "id": "ui_dialog_dialogdescription" - }, - { - "label": "dropdown-menu.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L1", - "community": 23, - "norm_label": "dropdown-menu.tsx", - "id": "frontend_src_components_ui_dropdown_menu_tsx" - }, - { - "label": "DropdownMenuSubTrigger", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L20", - "community": 23, - "norm_label": "dropdownmenusubtrigger", - "id": "ui_dropdown_menu_dropdownmenusubtrigger" - }, - { - "label": "DropdownMenuSubContent", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L42", - "community": 23, - "norm_label": "dropdownmenusubcontent", - "id": "ui_dropdown_menu_dropdownmenusubcontent" - }, - { - "label": "DropdownMenuContent", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L58", - "community": 26, - "norm_label": "dropdownmenucontent", - "id": "ui_dropdown_menu_dropdownmenucontent" - }, - { - "label": "DropdownMenuItem", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L76", - "community": 23, - "norm_label": "dropdownmenuitem", - "id": "ui_dropdown_menu_dropdownmenuitem" - }, - { - "label": "DropdownMenuCheckboxItem", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L94", - "community": 23, - "norm_label": "dropdownmenucheckboxitem", - "id": "ui_dropdown_menu_dropdownmenucheckboxitem" - }, - { - "label": "DropdownMenuRadioItem", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L118", - "community": 23, - "norm_label": "dropdownmenuradioitem", - "id": "ui_dropdown_menu_dropdownmenuradioitem" - }, - { - "label": "DropdownMenuLabel", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L140", - "community": 23, - "norm_label": "dropdownmenulabel", - "id": "ui_dropdown_menu_dropdownmenulabel" - }, - { - "label": "DropdownMenuSeparator", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L158", - "community": 23, - "norm_label": "dropdownmenuseparator", - "id": "ui_dropdown_menu_dropdownmenuseparator" - }, - { - "label": "DropdownMenuShortcut()", - "file_type": "code", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L170", - "community": 23, - "norm_label": "dropdownmenushortcut()", - "id": "ui_dropdown_menu_dropdownmenushortcut" - }, - { - "label": "input.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/input.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "input.tsx", - "id": "frontend_src_components_ui_input_tsx" - }, - { - "label": "InputProps", - "file_type": "code", - "source_file": "frontend/src/components/ui/input.tsx", - "source_location": "L4", - "community": 1, - "norm_label": "inputprops", - "id": "ui_input_inputprops" - }, - { - "label": "Input", - "file_type": "code", - "source_file": "frontend/src/components/ui/input.tsx", - "source_location": "L6", - "community": 1, - "norm_label": "input", - "id": "ui_input_input" - }, - { - "label": "label.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/label.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "label.tsx", - "id": "frontend_src_components_ui_label_tsx" - }, - { - "label": "Label", - "file_type": "code", - "source_file": "frontend/src/components/ui/label.tsx", - "source_location": "L5", - "community": 1, - "norm_label": "label", - "id": "ui_label_label" - }, - { - "label": "select.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "select.tsx", - "id": "frontend_src_components_ui_select_tsx" - }, - { - "label": "SelectTrigger", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L10", - "community": 1, - "norm_label": "selecttrigger", - "id": "ui_select_selecttrigger" - }, - { - "label": "SelectScrollUpButton", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L30", - "community": 1, - "norm_label": "selectscrollupbutton", - "id": "ui_select_selectscrollupbutton" - }, - { - "label": "SelectScrollDownButton", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L47", - "community": 1, - "norm_label": "selectscrolldownbutton", - "id": "ui_select_selectscrolldownbutton" - }, - { - "label": "SelectContent", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L65", - "community": 1, - "norm_label": "selectcontent", - "id": "ui_select_selectcontent" - }, - { - "label": "SelectLabel", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L97", - "community": 1, - "norm_label": "selectlabel", - "id": "ui_select_selectlabel" - }, - { - "label": "SelectItem", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L109", - "community": 1, - "norm_label": "selectitem", - "id": "ui_select_selectitem" - }, - { - "label": "SelectSeparator", - "file_type": "code", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L131", - "community": 1, - "norm_label": "selectseparator", - "id": "ui_select_selectseparator" - }, - { - "label": "table.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "table.tsx", - "id": "frontend_src_components_ui_table_tsx" - }, - { - "label": "Table", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L4", - "community": 1, - "norm_label": "table", - "id": "ui_table_table" - }, - { - "label": "TableBody", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L26", - "community": 1, - "norm_label": "tablebody", - "id": "ui_table_tablebody" - }, - { - "label": "TableFooter", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L38", - "community": 1, - "norm_label": "tablefooter", - "id": "ui_table_tablefooter" - }, - { - "label": "TableRow", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L53", - "community": 1, - "norm_label": "tablerow", - "id": "ui_table_tablerow" - }, - { - "label": "TableHead", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L68", - "community": 1, - "norm_label": "tablehead", - "id": "ui_table_tablehead" - }, - { - "label": "TableCell", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L83", - "community": 1, - "norm_label": "tablecell", - "id": "ui_table_tablecell" - }, - { - "label": "TableCaption", - "file_type": "code", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L98", - "community": 1, - "norm_label": "tablecaption", - "id": "ui_table_tablecaption" - }, - { - "label": "textarea.tsx", - "file_type": "code", - "source_file": "frontend/src/components/ui/textarea.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "textarea.tsx", - "id": "frontend_src_components_ui_textarea_tsx" - }, - { - "label": "TextareaProps", - "file_type": "code", - "source_file": "frontend/src/components/ui/textarea.tsx", - "source_location": "L4", - "community": 1, - "norm_label": "textareaprops", - "id": "ui_textarea_textareaprops" - }, - { - "label": "Textarea", - "file_type": "code", - "source_file": "frontend/src/components/ui/textarea.tsx", - "source_location": "L6", - "community": 1, - "norm_label": "textarea", - "id": "ui_textarea_textarea" - }, - { - "label": "AuthContext.tsx", - "file_type": "code", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L1", - "community": 25, - "norm_label": "authcontext.tsx", - "id": "frontend_src_context_authcontext_tsx" - }, - { - "label": "AuthUser", - "file_type": "code", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L11", - "community": 25, - "norm_label": "authuser", - "id": "context_authcontext_authuser" - }, - { - "label": "AuthContextValue", - "file_type": "code", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L18", - "community": 25, - "norm_label": "authcontextvalue", - "id": "context_authcontext_authcontextvalue" - }, - { - "label": "AuthContext", - "file_type": "code", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L25", - "community": 25, - "norm_label": "authcontext", - "id": "context_authcontext_authcontext" - }, - { - "label": "AuthProvider()", - "file_type": "code", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L27", - "community": 25, - "norm_label": "authprovider()", - "id": "context_authcontext_authprovider" - }, - { - "label": "useAuth()", - "file_type": "code", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L63", - "community": 20, - "norm_label": "useauth()", - "id": "context_authcontext_useauth" - }, - { - "label": "buildingColors.ts", - "file_type": "code", - "source_file": "frontend/src/lib/buildingColors.ts", - "source_location": "L1", - "community": 13, - "norm_label": "buildingcolors.ts", - "id": "frontend_src_lib_buildingcolors_ts" - }, - { - "label": "BuildingColorClass", - "file_type": "code", - "source_file": "frontend/src/lib/buildingColors.ts", - "source_location": "L3", - "community": 13, - "norm_label": "buildingcolorclass", - "id": "lib_buildingcolors_buildingcolorclass" - }, - { - "label": "BUILDING_LABELS", - "file_type": "code", - "source_file": "frontend/src/lib/buildingColors.ts", - "source_location": "L49", - "community": 13, - "norm_label": "building_labels", - "id": "lib_buildingcolors_building_labels" - }, - { - "label": "groupPostConditions.ts", - "file_type": "code", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L1", - "community": 1, - "norm_label": "grouppostconditions.ts", - "id": "frontend_src_lib_grouppostconditions_ts" - }, - { - "label": "GroupByMode", - "file_type": "code", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L17", - "community": 1, - "norm_label": "groupbymode", - "id": "lib_grouppostconditions_groupbymode" - }, - { - "label": "ConditionGroup", - "file_type": "code", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L20", - "community": 1, - "norm_label": "conditiongroup", - "id": "lib_grouppostconditions_conditiongroup" - }, - { - "label": "groupByLevel()", - "file_type": "code", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L53", - "community": 1, - "norm_label": "groupbylevel()", - "id": "lib_grouppostconditions_groupbylevel" - }, - { - "label": "groupByType()", - "file_type": "code", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L74", - "community": 1, - "norm_label": "groupbytype()", - "id": "lib_grouppostconditions_groupbytype" - }, - { - "label": "post-priority.ts", - "file_type": "code", - "source_file": "frontend/src/lib/post-priority.ts", - "source_location": "L1", - "community": 14, - "norm_label": "post-priority.ts", - "id": "frontend_src_lib_post_priority_ts" - }, - { - "label": "priorityLabel()", - "file_type": "code", - "source_file": "frontend/src/lib/post-priority.ts", - "source_location": "L23", - "community": 14, - "norm_label": "prioritylabel()", - "id": "lib_post_priority_prioritylabel" - }, - { - "label": "priorityBadgeColor()", - "file_type": "code", - "source_file": "frontend/src/lib/post-priority.ts", - "source_location": "L27", - "community": 14, - "norm_label": "prioritybadgecolor()", - "id": "lib_post_priority_prioritybadgecolor" - }, - { - "label": "useGroupByPreference.ts", - "file_type": "code", - "source_file": "frontend/src/lib/useGroupByPreference.ts", - "source_location": "L1", - "community": 1, - "norm_label": "usegroupbypreference.ts", - "id": "frontend_src_lib_usegroupbypreference_ts" - }, - { - "label": "VALID_MODES", - "file_type": "code", - "source_file": "frontend/src/lib/useGroupByPreference.ts", - "source_location": "L14", - "community": 1, - "norm_label": "valid_modes", - "id": "lib_usegroupbypreference_valid_modes" - }, - { - "label": "utils.ts", - "file_type": "code", - "source_file": "frontend/src/lib/utils.ts", - "source_location": "L1", - "community": 1, - "norm_label": "utils.ts", - "id": "frontend_src_lib_utils_ts" - }, - { - "label": "cn()", - "file_type": "code", - "source_file": "frontend/src/lib/utils.ts", - "source_location": "L4", - "community": 1, - "norm_label": "cn()", - "id": "lib_utils_cn" - }, - { - "label": "ROLE_LABELS", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L58", - "community": 14, - "norm_label": "role_labels", - "id": "pages_boardpage_role_labels" - }, - { - "label": "ROLE_PRIORITY", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L65", - "community": 14, - "norm_label": "role_priority", - "id": "pages_boardpage_role_priority" - }, - { - "label": "ROLE_COLORS", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L72", - "community": 13, - "norm_label": "role_colors", - "id": "pages_boardpage_role_colors" - }, - { - "label": "ROLE_BADGE_COLORS", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L79", - "community": 14, - "norm_label": "role_badge_colors", - "id": "pages_boardpage_role_badge_colors" - }, - { - "label": "ROLE_CHIP_COLORS", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L87", - "community": 13, - "norm_label": "role_chip_colors", - "id": "pages_boardpage_role_chip_colors" - }, - { - "label": "POWER_LABELS", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L94", - "community": 14, - "norm_label": "power_labels", - "id": "pages_boardpage_power_labels" - }, - { - "label": "BUILDING_TYPE_ORDER", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L103", - "community": 13, - "norm_label": "building_type_order", - "id": "pages_boardpage_building_type_order" - }, - { - "label": "DraggableMemberRow()", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L254", - "community": 13, - "norm_label": "draggablememberrow()", - "id": "pages_boardpage_draggablememberrow" - }, - { - "label": "MemberDragOverlay()", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L322", - "community": 13, - "norm_label": "memberdragoverlay()", - "id": "pages_boardpage_memberdragoverlay" - }, - { - "label": "RoleFilter", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L347", - "community": 13, - "norm_label": "rolefilter", - "id": "pages_boardpage_rolefilter" - }, - { - "label": "ROLE_FILTER_OPTIONS", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L349", - "community": 13, - "norm_label": "role_filter_options", - "id": "pages_boardpage_role_filter_options" - }, - { - "label": "MemberBucket()", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L357", - "community": 13, - "norm_label": "memberbucket()", - "id": "pages_boardpage_memberbucket" - }, - { - "label": "BuildingTableRow()", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L457", - "community": 13, - "norm_label": "buildingtablerow()", - "id": "pages_boardpage_buildingtablerow" - }, - { - "label": "BuildingTypeSection()", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L553", - "community": 13, - "norm_label": "buildingtypesection()", - "id": "pages_boardpage_buildingtypesection" - }, - { - "label": "ConditionalDndContext()", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L679", - "community": 13, - "norm_label": "conditionaldndcontext()", - "id": "pages_boardpage_conditionaldndcontext" - }, - { - "label": "ActiveTab", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L711", - "community": 13, - "norm_label": "activetab", - "id": "pages_boardpage_activetab" - }, - { - "label": "BoardPage()", - "file_type": "code", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L713", - "community": 13, - "norm_label": "boardpage()", - "id": "pages_boardpage_boardpage" - }, - { - "label": "formatPosition()", - "file_type": "code", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L17", - "community": 1, - "norm_label": "formatposition()", - "id": "pages_comparisonpage_formatposition" - }, - { - "label": "PositionTag()", - "file_type": "code", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L26", - "community": 1, - "norm_label": "positiontag()", - "id": "pages_comparisonpage_positiontag" - }, - { - "label": "MemberPositionsCell()", - "file_type": "code", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L41", - "community": 1, - "norm_label": "memberpositionscell()", - "id": "pages_comparisonpage_memberpositionscell" - }, - { - "label": "ComparisonPage()", - "file_type": "code", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L67", - "community": 1, - "norm_label": "comparisonpage()", - "id": "pages_comparisonpage_comparisonpage" - }, - { - "label": "LandingPage.tsx", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L1", - "community": 19, - "norm_label": "landingpage.tsx", - "id": "frontend_src_pages_landingpage_tsx" - }, - { - "label": "LandingOrSieges()", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L10", - "community": 20, - "norm_label": "landingorsieges()", - "id": "pages_landingpage_landingorsieges" - }, - { - "label": "SLIDES", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L26", - "community": 19, - "norm_label": "slides", - "id": "pages_landingpage_slides" - }, - { - "label": "ShieldIcon()", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L68", - "community": 19, - "norm_label": "shieldicon()", - "id": "pages_landingpage_shieldicon" - }, - { - "label": "GitHubIcon()", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L88", - "community": 19, - "norm_label": "githubicon()", - "id": "pages_landingpage_githubicon" - }, - { - "label": "CheckIcon()", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L108", - "community": 19, - "norm_label": "checkicon()", - "id": "pages_landingpage_checkicon" - }, - { - "label": "ExternalLinkIcon()", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L128", - "community": 19, - "norm_label": "externallinkicon()", - "id": "pages_landingpage_externallinkicon" - }, - { - "label": "COLORS", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L150", - "community": 19, - "norm_label": "colors", - "id": "pages_landingpage_colors" - }, - { - "label": "LandingPage()", - "file_type": "code", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L157", - "community": 19, - "norm_label": "landingpage()", - "id": "pages_landingpage_landingpage" - }, - { - "label": "ERROR_MESSAGES", - "file_type": "code", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L7", - "community": 27, - "norm_label": "error_messages", - "id": "pages_loginpage_error_messages" - }, - { - "label": "MEMBERSHIP_ERRORS", - "file_type": "code", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L15", - "community": 27, - "norm_label": "membership_errors", - "id": "pages_loginpage_membership_errors" - }, - { - "label": "MobileBanner()", - "file_type": "code", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L18", - "community": 27, - "norm_label": "mobilebanner()", - "id": "pages_loginpage_mobilebanner" - }, - { - "label": "LoginPage()", - "file_type": "code", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L34", - "community": 27, - "norm_label": "loginpage()", - "id": "pages_loginpage_loginpage" - }, - { - "label": "MemberDetailPage.tsx", - "file_type": "code", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "memberdetailpage.tsx", - "id": "frontend_src_pages_memberdetailpage_tsx" - }, - { - "label": "ROLE_OPTIONS", - "file_type": "code", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L41", - "community": 1, - "norm_label": "role_options", - "id": "pages_memberdetailpage_role_options" - }, - { - "label": "RoleBadgeVariant", - "file_type": "code", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L43", - "community": 1, - "norm_label": "rolebadgevariant", - "id": "pages_memberspage_rolebadgevariant" - }, - { - "label": "ROLE_VARIANTS", - "file_type": "code", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L45", - "community": 1, - "norm_label": "role_variants", - "id": "pages_memberspage_role_variants" - }, - { - "label": "MembersPage()", - "file_type": "code", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L52", - "community": 1, - "norm_label": "memberspage()", - "id": "pages_memberspage_memberspage" - }, - { - "label": "PostPrioritiesPage.tsx", - "file_type": "code", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "postprioritiespage.tsx", - "id": "frontend_src_pages_postprioritiespage_tsx" - }, - { - "label": "DescriptionCell()", - "file_type": "code", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L30", - "community": 1, - "norm_label": "descriptioncell()", - "id": "pages_postprioritiespage_descriptioncell" - }, - { - "label": "Tab", - "file_type": "code", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L64", - "community": 1, - "norm_label": "tab", - "id": "pages_postprioritiespage_tab" - }, - { - "label": "PostRow()", - "file_type": "code", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L30", - "community": 1, - "norm_label": "postrow()", - "id": "pages_postspage_postrow" - }, - { - "label": "PostsPage()", - "file_type": "code", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L265", - "community": 1, - "norm_label": "postspage()", - "id": "pages_postspage_postspage" - }, - { - "label": "nextTuesdayFrom()", - "file_type": "code", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L19", - "community": 1, - "norm_label": "nexttuesdayfrom()", - "id": "pages_siegecreatepage_nexttuesdayfrom" - }, - { - "label": "formatDateLocal()", - "file_type": "code", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L27", - "community": 1, - "norm_label": "formatdatelocal()", - "id": "pages_siegecreatepage_formatdatelocal" - }, - { - "label": "suggestNextSiegeDate()", - "file_type": "code", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L34", - "community": 1, - "norm_label": "suggestnextsiegedate()", - "id": "pages_siegecreatepage_suggestnextsiegedate" - }, - { - "label": "SiegeCreatePage()", - "file_type": "code", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L46", - "community": 1, - "norm_label": "siegecreatepage()", - "id": "pages_siegecreatepage_siegecreatepage" - }, - { - "label": "AttackDaySelect()", - "file_type": "code", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L41", - "community": 1, - "norm_label": "attackdayselect()", - "id": "pages_siegememberspage_attackdayselect" - }, - { - "label": "SiegeSettingsPage.tsx", - "file_type": "code", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "siegesettingspage.tsx", - "id": "frontend_src_pages_siegesettingspage_tsx" - }, - { - "label": "SiegesPage.tsx", - "file_type": "code", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L1", - "community": 1, - "norm_label": "siegespage.tsx", - "id": "frontend_src_pages_siegespage_tsx" - }, - { - "label": "StatusBadgeVariant", - "file_type": "code", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L17", - "community": 1, - "norm_label": "statusbadgevariant", - "id": "pages_siegespage_statusbadgevariant" - }, - { - "label": "STATUS_VARIANTS", - "file_type": "code", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L19", - "community": 1, - "norm_label": "status_variants", - "id": "pages_siegespage_status_variants" - }, - { - "label": "STATUS_LABELS", - "file_type": "code", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L25", - "community": 1, - "norm_label": "status_labels", - "id": "pages_siegespage_status_labels" - }, - { - "label": "SiegesPage()", - "file_type": "code", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L31", - "community": 1, - "norm_label": "siegespage()", - "id": "pages_siegespage_siegespage" - }, - { - "label": "UI_LIBRARIES", - "file_type": "code", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L6", - "community": 12, - "norm_label": "ui_libraries", - "id": "pages_systempage_ui_libraries" - }, - { - "label": "SectionPanel()", - "file_type": "code", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L16", - "community": 12, - "norm_label": "sectionpanel()", - "id": "pages_systempage_sectionpanel" - }, - { - "label": "DataRow()", - "file_type": "code", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L47", - "community": 12, - "norm_label": "datarow()", - "id": "pages_systempage_datarow" - }, - { - "label": "LibraryRow()", - "file_type": "code", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L80", - "community": 12, - "norm_label": "libraryrow()", - "id": "pages_systempage_libraryrow" - }, - { - "label": "SystemPage()", - "file_type": "code", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L100", - "community": 12, - "norm_label": "systempage()", - "id": "pages_systempage_systempage" - }, - { - "label": "changelog.d.ts", - "file_type": "code", - "source_file": "frontend/src/types/changelog.d.ts", - "source_location": "L1", - "community": 37, - "norm_label": "changelog.d.ts", - "id": "frontend_src_types_changelog_d_ts" - }, - { - "label": "ChangelogEntry", - "file_type": "code", - "source_file": "frontend/src/types/changelog.d.ts", - "source_location": "L13", - "community": 37, - "norm_label": "changelogentry", - "id": "types_changelog_d_changelogentry" - }, - { - "label": "bootstrap-db.ps1", - "file_type": "code", - "source_file": "scripts/bootstrap-db.ps1", - "source_location": "L1", - "community": 46, - "norm_label": "bootstrap-db.ps1", - "id": "scripts_bootstrap_db_ps1" - }, - { - "label": "bootstrap-excel-import.ps1", - "file_type": "code", - "source_file": "scripts/bootstrap-excel-import.ps1", - "source_location": "L1", - "community": 5, - "norm_label": "bootstrap-excel-import.ps1", - "id": "scripts_bootstrap_excel_import_ps1" - }, - { - "label": "bootstrap-images.ps1", - "file_type": "code", - "source_file": "scripts/bootstrap-images.ps1", - "source_location": "L1", - "community": 5, - "norm_label": "bootstrap-images.ps1", - "id": "scripts_bootstrap_images_ps1" - }, - { - "label": "bootstrap-keyvault.ps1", - "file_type": "code", - "source_file": "scripts/bootstrap-keyvault.ps1", - "source_location": "L1", - "community": 47, - "norm_label": "bootstrap-keyvault.ps1", - "id": "scripts_bootstrap_keyvault_ps1" - }, - { - "label": "bootstrap-reimport.ps1", - "file_type": "code", - "source_file": "scripts/bootstrap-reimport.ps1", - "source_location": "L1", - "community": 48, - "norm_label": "bootstrap-reimport.ps1", - "id": "scripts_bootstrap_reimport_ps1" - }, - { - "label": "generate-origin-pfx.ps1", - "file_type": "code", - "source_file": "scripts/generate-origin-pfx.ps1", - "source_location": "L1", - "community": 49, - "norm_label": "generate-origin-pfx.ps1", - "id": "scripts_generate_origin_pfx_ps1" - }, - { - "label": "rebuild.ps1", - "file_type": "code", - "source_file": "scripts/rebuild.ps1", - "source_location": "L1", - "community": 50, - "norm_label": "rebuild.ps1", - "id": "scripts_rebuild_ps1" - }, - { - "label": "import_excel.py", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1", - "community": 0, - "norm_label": "import_excel.py", - "id": "scripts_excel_import_import_excel_py" - }, - { - "label": "ParsedMember", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L160", - "community": 0, - "norm_label": "parsedmember", - "id": "excel_import_import_excel_parsedmember" - }, - { - "label": "ParsedAssignment", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L169", - "community": 0, - "norm_label": "parsedassignment", - "id": "excel_import_import_excel_parsedassignment" - }, - { - "label": "ParsedReserve", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L178", - "community": 0, - "norm_label": "parsedreserve", - "id": "excel_import_import_excel_parsedreserve" - }, - { - "label": "ParsedPostConfig", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L185", - "community": 0, - "norm_label": "parsedpostconfig", - "id": "excel_import_import_excel_parsedpostconfig" - }, - { - "label": "ParsedPostConditions", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L192", - "community": 0, - "norm_label": "parsedpostconditions", - "id": "excel_import_import_excel_parsedpostconditions" - }, - { - "label": "ImportStats", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L198", - "community": 0, - "norm_label": "importstats", - "id": "excel_import_import_excel_importstats" - }, - { - "label": "parse_filename_date()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L224", - "community": 0, - "norm_label": "parse_filename_date()", - "id": "excel_import_import_excel_parse_filename_date" - }, - { - "label": "map_role()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L236", - "community": 0, - "norm_label": "map_role()", - "id": "excel_import_import_excel_map_role" - }, - { - "label": "map_building_alias()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L241", - "community": 0, - "norm_label": "map_building_alias()", - "id": "excel_import_import_excel_map_building_alias" - }, - { - "label": "parse_members_sheet()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L265", - "community": 0, - "norm_label": "parse_members_sheet()", - "id": "excel_import_import_excel_parse_members_sheet" - }, - { - "label": "parse_assignments_sheet()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L337", - "community": 0, - "norm_label": "parse_assignments_sheet()", - "id": "excel_import_import_excel_parse_assignments_sheet" - }, - { - "label": "parse_reserves_sheet()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L445", - "community": 0, - "norm_label": "parse_reserves_sheet()", - "id": "excel_import_import_excel_parse_reserves_sheet" - }, - { - "label": "parse_posts_sheet_config()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L489", - "community": 0, - "norm_label": "parse_posts_sheet_config()", - "id": "excel_import_import_excel_parse_posts_sheet_config" - }, - { - "label": "parse_posts_sheet_conditions()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L534", - "community": 0, - "norm_label": "parse_posts_sheet_conditions()", - "id": "excel_import_import_excel_parse_posts_sheet_conditions" - }, - { - "label": "build_group_structure()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L570", - "community": 0, - "norm_label": "build_group_structure()", - "id": "excel_import_import_excel_build_group_structure" - }, - { - "label": "compute_building_group_structure()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L592", - "community": 0, - "norm_label": "compute_building_group_structure()", - "id": "excel_import_import_excel_compute_building_group_structure" - }, - { - "label": "infer_building_level()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L677", - "community": 0, - "norm_label": "infer_building_level()", - "id": "excel_import_import_excel_infer_building_level" - }, - { - "label": "create_building_with_groups_and_positions()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L719", - "community": 0, - "norm_label": "create_building_with_groups_and_positions()", - "id": "excel_import_import_excel_create_building_with_groups_and_positions" - }, - { - "label": "import_file()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L776", - "community": 0, - "norm_label": "import_file()", - "id": "excel_import_import_excel_import_file" - }, - { - "label": "collect_xlsm_files()", - "file_type": "code", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1146", - "community": 7, - "norm_label": "collect_xlsm_files()", - "id": "excel_import_import_excel_collect_xlsm_files" - }, - { - "label": "Excel import script for Raid Shadow Legends Siege Assignment Web App. Imports h", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1", - "community": 0, - "norm_label": "excel import script for raid shadow legends siege assignment web app. imports h", - "id": "excel_import_import_excel_rationale_1" - }, - { - "label": "Extract the siege date from a filename like clan_siege_MM_DD_YYYY.xlsm.", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L225", - "community": 0, - "norm_label": "extract the siege date from a filename like clan_siege_mm_dd_yyyy.xlsm.", - "id": "excel_import_import_excel_rationale_225" - }, - { - "label": "Map a display role string to its enum value.", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L237", - "community": 0, - "norm_label": "map a display role string to its enum value.", - "id": "excel_import_import_excel_rationale_237" - }, - { - "label": "Map a raw building type string to its canonical enum value and optional building", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L242", - "community": 0, - "norm_label": "map a raw building type string to its canonical enum value and optional building", - "id": "excel_import_import_excel_rationale_242" - }, - { - "label": "Parse the 'Members' worksheet. Expected columns: A: name, B: level (i", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L266", - "community": 0, - "norm_label": "parse the 'members' worksheet. expected columns: a: name, b: level (i", - "id": "excel_import_import_excel_rationale_266" - }, - { - "label": "Parse the 'Assignments' worksheet in its visual grid format. Layout:", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L338", - "community": 0, - "norm_label": "parse the 'assignments' worksheet in its visual grid format. layout:", - "id": "excel_import_import_excel_rationale_338" - }, - { - "label": "Parse the 'Reserves' worksheet. Expected columns: A: member_name, B:", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L446", - "community": 0, - "norm_label": "parse the 'reserves' worksheet. expected columns: a: member_name, b:", - "id": "excel_import_import_excel_rationale_446" - }, - { - "label": "Parse post priority and descriptions from the Posts sheet, rows 2\u201317, columns B\u2013", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L490", - "community": 0, - "norm_label": "parse post priority and descriptions from the posts sheet, rows 2\u201317, columns b\u2013", - "id": "excel_import_import_excel_rationale_490" - }, - { - "label": "Parse post active conditions from the Posts sheet, rows 34\u201351, columns D\u2013F.", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L535", - "community": 0, - "norm_label": "parse post active conditions from the posts sheet, rows 34\u201351, columns d\u2013f.", - "id": "excel_import_import_excel_rationale_535" - }, - { - "label": "Return a list of slot_counts for each group of the given building type. e.g", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L571", - "community": 0, - "norm_label": "return a list of slot_counts for each group of the given building type. e.g", - "id": "excel_import_import_excel_rationale_571" - }, - { - "label": "Scan the given list of ParsedAssignments and return {group_number: slot_count}", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L597", - "community": 0, - "norm_label": "scan the given list of parsedassignments and return {group_number: slot_count}", - "id": "excel_import_import_excel_rationale_597" - }, - { - "label": "Sum all slot counts in group_structure and look up the level for that building t", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L678", - "community": 0, - "norm_label": "sum all slot counts in group_structure and look up the level for that building t", - "id": "excel_import_import_excel_rationale_678" - }, - { - "label": "Return (member, created). Looks up by name (case-insensitive). Creates if no", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L691", - "community": 7, - "norm_label": "return (member, created). looks up by name (case-insensitive). creates if no", - "id": "excel_import_import_excel_rationale_691" - }, - { - "label": "Create a Building, its BuildingGroups, and their Positions. Uses the provid", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L727", - "community": 0, - "norm_label": "create a building, its buildinggroups, and their positions. uses the provid", - "id": "excel_import_import_excel_rationale_727" - }, - { - "label": "Import a single .xlsm file. Returns ImportStats.", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L781", - "community": 0, - "norm_label": "import a single .xlsm file. returns importstats.", - "id": "excel_import_import_excel_rationale_781" - }, - { - "label": "Import a list of .xlsm files into the database.", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1073", - "community": 0, - "norm_label": "import a list of .xlsm files into the database.", - "id": "excel_import_import_excel_rationale_1073" - }, - { - "label": "Return a sorted list of .xlsm files from a file path or directory.", - "file_type": "rationale", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1147", - "community": 7, - "norm_label": "return a sorted list of .xlsm files from a file path or directory.", - "id": "excel_import_import_excel_rationale_1147" - }, - { - "label": "run-graphify-dry-run.ps1", - "file_type": "code", - "source_file": "scripts/experiments/run-graphify-dry-run.ps1", - "source_location": "L1", - "community": 51, - "norm_label": "run-graphify-dry-run.ps1", - "id": "scripts_experiments_run_graphify_dry_run_ps1" - }, - { - "label": "CHANGELOG v1.2.0", - "file_type": "document", - "source_file": "CHANGELOG.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "changelog v1.2.0", - "id": "changelog_v120" - }, - { - "label": "CHANGELOG v1.1.0", - "file_type": "document", - "source_file": "CHANGELOG.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "changelog v1.1.0", - "id": "changelog_v110" - }, - { - "label": "CHANGELOG v1.0.0", - "file_type": "document", - "source_file": "CHANGELOG.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "changelog v1.0.0", - "id": "changelog_v100" - }, - { - "label": "Suggest Post Assignments Feature", - "file_type": "concept", - "source_file": "CHANGELOG.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "suggest post assignments feature", - "id": "changelog_suggest_post_assignments" - }, - { - "label": "Group Post Conditions by Level or Type", - "file_type": "concept", - "source_file": "CHANGELOG.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "group post conditions by level or type", - "id": "changelog_group_post_conditions" - }, - { - "label": "Rate-limited Discord OAuth2 Endpoints", - "file_type": "concept", - "source_file": "CHANGELOG.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "rate-limited discord oauth2 endpoints", - "id": "changelog_rate_limited_discord_oauth" - }, - { - "label": "Project Overview (CLAUDE.md)", - "file_type": "document", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "project overview (claude.md)", - "id": "claude_project_overview" - }, - { - "label": "Backend Service (FastAPI)", - "file_type": "concept", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "backend service (fastapi)", - "id": "claude_backend_service" - }, - { - "label": "Frontend Service (React)", - "file_type": "concept", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "frontend service (react)", - "id": "claude_frontend_service" - }, - { - "label": "Bot Service (discord.py + FastAPI sidecar)", - "file_type": "concept", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "bot service (discord.py + fastapi sidecar)", - "id": "claude_bot_service" - }, - { - "label": "Discord OAuth2 Auth Flow", - "file_type": "concept", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "discord oauth2 auth flow", - "id": "claude_discord_oauth2" - }, - { - "label": "PostgreSQL Database", - "file_type": "concept", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "postgresql database", - "id": "claude_postgresql" - }, - { - "label": "Alembic Migrations", - "file_type": "concept", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "alembic migrations", - "id": "claude_alembic" - }, - { - "label": "Playwright Image Generation", - "file_type": "concept", - "source_file": "CLAUDE.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "playwright image generation", - "id": "claude_playwright" - }, - { - "label": "Docker Compose Stack", - "file_type": "code", - "source_file": "docker-compose.yml", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "docker compose stack", - "id": "dockercompose_stack" - }, - { - "label": "PostgreSQL Service (docker-compose)", - "file_type": "code", - "source_file": "docker-compose.yml", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "postgresql service (docker-compose)", - "id": "dockercompose_postgres" - }, - { - "label": "Backend Service (docker-compose)", - "file_type": "code", - "source_file": "docker-compose.yml", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "backend service (docker-compose)", - "id": "dockercompose_backend" - }, - { - "label": "Frontend Service (docker-compose)", - "file_type": "code", - "source_file": "docker-compose.yml", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "frontend service (docker-compose)", - "id": "dockercompose_frontend" - }, - { - "label": "Bot Service (docker-compose)", - "file_type": "code", - "source_file": "docker-compose.yml", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "bot service (docker-compose)", - "id": "dockercompose_bot" - }, - { - "label": "Docker Compose Production Overlay", - "file_type": "code", - "source_file": "docker-compose.prod.yml", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "docker compose production overlay", - "id": "dockercomposeprod_overlay" - }, - { - "label": "Backend Requirements", - "file_type": "code", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "backend requirements", - "id": "backend_requirements" - }, - { - "label": "FastAPI", - "file_type": "concept", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "fastapi", - "id": "backend_fastapi" - }, - { - "label": "SQLAlchemy", - "file_type": "concept", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "sqlalchemy", - "id": "backend_sqlalchemy" - }, - { - "label": "asyncpg", - "file_type": "concept", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "asyncpg", - "id": "backend_asyncpg" - }, - { - "label": "PyJWT", - "file_type": "concept", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "pyjwt", - "id": "backend_pyjwt" - }, - { - "label": "slowapi", - "file_type": "concept", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "slowapi", - "id": "backend_slowapi" - }, - { - "label": "Playwright (backend dep)", - "file_type": "concept", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "playwright (backend dep)", - "id": "backend_playwright_dep" - }, - { - "label": "OpenTelemetry / Azure Monitor", - "file_type": "concept", - "source_file": "backend/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "opentelemetry / azure monitor", - "id": "backend_otel" - }, - { - "label": "Bot Requirements", - "file_type": "code", - "source_file": "bot/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "bot requirements", - "id": "bot_requirements" - }, - { - "label": "Bot Dev Requirements", - "file_type": "code", - "source_file": "bot/requirements-dev.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "bot dev requirements", - "id": "bot_requirements_dev" - }, - { - "label": "discord.py", - "file_type": "concept", - "source_file": "bot/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "discord.py", - "id": "bot_discordpy" - }, - { - "label": "FastAPI (bot sidecar)", - "file_type": "concept", - "source_file": "bot/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "fastapi (bot sidecar)", - "id": "bot_fastapi" - }, - { - "label": "Implementation Plan", - "file_type": "document", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "implementation plan", - "id": "impl_plan" - }, - { - "label": "Phase 0: Foundation", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "phase 0: foundation", - "id": "impl_plan_phase0" - }, - { - "label": "Phase 1: Database Schema", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "phase 1: database schema", - "id": "impl_plan_phase1" - }, - { - "label": "Phase 2: Core Backend CRUD", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "phase 2: core backend crud", - "id": "impl_plan_phase2" - }, - { - "label": "Phase 3: Assignment Board Backend", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "phase 3: assignment board backend", - "id": "impl_plan_phase3" - }, - { - "label": "Phase 4: Business Logic", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "phase 4: business logic", - "id": "impl_plan_phase4" - }, - { - "label": "Phase 5: Discord Bot + Image Gen", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "phase 5: discord bot + image gen", - "id": "impl_plan_phase5" - }, - { - "label": "Phase 6: Frontend Core", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "phase 6: frontend core", - "id": "impl_plan_phase6" - }, - { - "label": "BuildingTypeConfig Reference", - "file_type": "concept", - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "buildingtypeconfig reference", - "id": "impl_plan_buildingtypeconfig" - }, - { - "label": "Operations Runbook", - "file_type": "document", - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "operations runbook", - "id": "runbook" - }, - { - "label": "Azure Container Apps", - "file_type": "concept", - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "azure container apps", - "id": "runbook_azure_container_apps" - }, - { - "label": "Azure Key Vault", - "file_type": "concept", - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "azure key vault", - "id": "runbook_azure_keyvault" - }, - { - "label": "Azure PostgreSQL Flexible Server", - "file_type": "concept", - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "azure postgresql flexible server", - "id": "runbook_azure_postgresql" - }, - { - "label": "Application Insights / OpenTelemetry", - "file_type": "concept", - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "application insights / opentelemetry", - "id": "runbook_app_insights" - }, - { - "label": "Log Analytics Workspace", - "file_type": "concept", - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "log analytics workspace", - "id": "runbook_log_analytics" - }, - { - "label": "Web Design Document", - "file_type": "document", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "web design document", - "id": "wdd" - }, - { - "label": "Siege Data Model", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "siege data model", - "id": "wdd_siege_model" - }, - { - "label": "Building Data Model", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "building data model", - "id": "wdd_building_model" - }, - { - "label": "Member Data Model", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "member data model", - "id": "wdd_member_model" - }, - { - "label": "Position Data Model", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "position data model", - "id": "wdd_position_model" - }, - { - "label": "Post Data Model", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "post data model", - "id": "wdd_post_model" - }, - { - "label": "PostCondition Data Model", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "postcondition data model", - "id": "wdd_postcondition_model" - }, - { - "label": "16 Validation Rules", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "16 validation rules", - "id": "wdd_validation_rules" - }, - { - "label": "Auto-fill Algorithm", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "auto-fill algorithm", - "id": "wdd_autofill_algorithm" - }, - { - "label": "Attack Day Algorithm", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "attack day algorithm", - "id": "wdd_attack_day_algorithm" - }, - { - "label": "Discord OAuth2 Authentication Spec", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "discord oauth2 authentication spec", - "id": "wdd_discord_auth" - }, - { - "label": "Notify Members Data Flow", - "file_type": "concept", - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "notify members data flow", - "id": "wdd_notification_flow" - }, - { - "label": "Siege Building Levels Reference", - "file_type": "document", - "source_file": "docs/siege_levels.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "siege building levels reference", - "id": "siege_levels" - }, - { - "label": "Post Suggestions Modal Handoff", - "file_type": "document", - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "post suggestions modal handoff", - "id": "post_suggestions_readme" - }, - { - "label": "DiffListA Modal Component", - "file_type": "concept", - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "difflista modal component", - "id": "post_suggestions_difflist" - }, - { - "label": "AssignmentEntry Type", - "file_type": "concept", - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "assignmententry type", - "id": "post_suggestions_assignmententry" - }, - { - "label": "Graphify Dry-Run Evaluation Plan", - "file_type": "document", - "source_file": "docs/experiments/graphify-dry-run.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "graphify dry-run evaluation plan", - "id": "graphify_dryrun" - }, - { - "label": "Landing Page Mockup", - "file_type": "document", - "source_file": "docs/mockups/mockup-landing.html", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "landing page mockup", - "id": "mockup_landing" - }, - { - "label": "Login Page Mockup", - "file_type": "document", - "source_file": "docs/mockups/mockup-login.html", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "login page mockup", - "id": "mockup_login" - }, - { - "label": "Public Launch Plan", - "file_type": "document", - "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "public launch plan", - "id": "public_launch_plan" - }, - { - "label": "Self-Host on Any VPS (redirect)", - "file_type": "document", - "source_file": "docs/self-host/anywhere.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "self-host on any vps (redirect)", - "id": "self_host_anywhere" - }, - { - "label": "Self-Host on Azure (redirect)", - "file_type": "document", - "source_file": "docs/self-host/azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "self-host on azure (redirect)", - "id": "self_host_azure" - }, - { - "label": "Discord Auth Implementation Plan (Historical)", - "file_type": "document", - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "discord auth implementation plan (historical)", - "id": "discord_auth_impl_plan" - }, - { - "label": "get_current_user FastAPI Dependency", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "get_current_user fastapi dependency", - "id": "discord_auth_get_current_user" - }, - { - "label": "BotClient.get_member()", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "botclient.get_member()", - "id": "discord_auth_botclient_get_member" - }, - { - "label": "JWT Session Cookie (HS256)", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "jwt session cookie (hs256)", - "id": "discord_auth_jwt_cookie" - }, - { - "label": "Component Versioning Plan", - "file_type": "document", - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "component versioning plan", - "id": "component_versioning_plan" - }, - { - "label": "backend/VERSION file", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "backend/version file", - "id": "component_versioning_backend_version" - }, - { - "label": "bot/VERSION file", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "bot/version file", - "id": "component_versioning_bot_version" - }, - { - "label": "frontend/package.json version", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "frontend/package.json version", - "id": "component_versioning_frontend_version" - }, - { - "label": "Version Bump CI Gate", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "version bump ci gate", - "id": "component_versioning_ci_gate" - }, - { - "label": "Post Suggestions Backend Plan", - "file_type": "document", - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "post suggestions backend plan", - "id": "post_suggestions_plan" - }, - { - "label": "post_suggestions.py Service", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "post_suggestions.py service", - "id": "post_suggestions_service" - }, - { - "label": "POST /sieges/{id}/post-suggestions Endpoint", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "post /sieges/{id}/post-suggestions endpoint", - "id": "post_suggestions_api" - }, - { - "label": "PostSuggestionEntry Schema", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "postsuggestionentry schema", - "id": "post_suggestions_schema" - }, - { - "label": "Greedy Post Assignment Algorithm", - "file_type": "concept", - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 4, - "norm_label": "greedy post assignment algorithm", - "id": "post_suggestions_greedy_algo" - }, - { - "label": "README", - "file_type": "document", - "source_file": "README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "readme", - "id": "readme" - }, - { - "label": "CONTRIBUTING.md", - "file_type": "document", - "source_file": "CONTRIBUTING.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "contributing.md", - "id": "contributing" - }, - { - "label": "Code of Conduct", - "file_type": "document", - "source_file": "CODE_OF_CONDUCT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "code of conduct", - "id": "code_of_conduct" - }, - { - "label": "SUPPORT.md", - "file_type": "document", - "source_file": "SUPPORT.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "support.md", - "id": "support" - }, - { - "label": "Infrastructure README", - "file_type": "document", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "infrastructure readme", - "id": "infra_readme_infrastructure" - }, - { - "label": "main.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "main.bicep", - "id": "infra_readme_main_bicep" - }, - { - "label": "modules/registry.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "modules/registry.bicep", - "id": "infra_readme_registry_bicep" - }, - { - "label": "modules/log-analytics.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "modules/log-analytics.bicep", - "id": "infra_readme_log_analytics_bicep" - }, - { - "label": "modules/app-insights.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "modules/app-insights.bicep", - "id": "infra_readme_app_insights_bicep" - }, - { - "label": "modules/postgres.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "modules/postgres.bicep", - "id": "infra_readme_postgres_bicep" - }, - { - "label": "modules/keyvault.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "modules/keyvault.bicep", - "id": "infra_readme_keyvault_bicep" - }, - { - "label": "modules/container-env.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "modules/container-env.bicep", - "id": "infra_readme_container_env_bicep" - }, - { - "label": "modules/container-apps.bicep", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "modules/container-apps.bicep", - "id": "infra_readme_container_apps_bicep" - }, - { - "label": "Azure Container Registry", - "file_type": "concept", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "azure container registry", - "id": "infra_readme_azure_container_registry" - }, - { - "label": "PostgreSQL Flexible Server", - "file_type": "concept", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "postgresql flexible server", - "id": "infra_readme_postgres_flexible_server" - }, - { - "label": "Container Apps Environment", - "file_type": "concept", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "container apps environment", - "id": "infra_readme_container_apps_environment" - }, - { - "label": "siege-api Container App", - "file_type": "concept", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "siege-api container app", - "id": "infra_readme_siege_api" - }, - { - "label": "siege-bot Container App", - "file_type": "concept", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "siege-bot container app", - "id": "infra_readme_siege_bot" - }, - { - "label": "siege-frontend Container App", - "file_type": "concept", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "siege-frontend container app", - "id": "infra_readme_siege_frontend" - }, - { - "label": "ACR weekly-purge Task", - "file_type": "concept", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "acr weekly-purge task", - "id": "infra_readme_weekly_purge_task" - }, - { - "label": "main.bicepparam (dev)", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "main.bicepparam (dev)", - "id": "infra_readme_main_bicepparam" - }, - { - "label": "main.prod.bicepparam", - "file_type": "code", - "source_file": "infra/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "main.prod.bicepparam", - "id": "infra_readme_main_prod_bicepparam" - }, - { - "label": "Excel Import Scripts README", - "file_type": "document", - "source_file": "scripts/excel-import/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "excel import scripts readme", - "id": "excel_import_readme_scripts" - }, - { - "label": "seed_db.py", - "file_type": "code", - "source_file": "scripts/excel-import/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "seed_db.py", - "id": "excel_import_readme_seed_db_py" - }, - { - "label": "run_migrations.sh", - "file_type": "code", - "source_file": "scripts/excel-import/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "run_migrations.sh", - "id": "excel_import_readme_run_migrations_sh" - }, - { - "label": "import_members.py", - "file_type": "code", - "source_file": "scripts/excel-import/README.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "import_members.py", - "id": "excel_import_readme_import_members_py" - }, - { - "label": "openpyxl", - "file_type": "concept", - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "openpyxl", - "id": "requirements_openpyxl" - }, - { - "label": "sqlalchemy[asyncio]", - "file_type": "concept", - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "sqlalchemy[asyncio]", - "id": "requirements_sqlalchemy" - }, - { - "label": "python-dotenv", - "file_type": "concept", - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 3, - "norm_label": "python-dotenv", - "id": "requirements_python_dotenv" - }, - { - "label": "FAQ Wiki Page", - "file_type": "document", - "source_file": "wiki/FAQ.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "faq wiki page", - "id": "faq_wiki" - }, - { - "label": "Getting Started Wiki Page", - "file_type": "document", - "source_file": "wiki/Getting-Started.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "getting started wiki page", - "id": "getting_started_wiki" - }, - { - "label": "Home Wiki Page", - "file_type": "document", - "source_file": "wiki/Home.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "home wiki page", - "id": "home_wiki" - }, - { - "label": "Self-Host on Any VPS Wiki Page", - "file_type": "document", - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "self-host on any vps wiki page", - "id": "self_host_vps_wiki" - }, - { - "label": "Self-Host on Azure Wiki Page", - "file_type": "document", - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "self-host on azure wiki page", - "id": "self_host_azure_wiki" - }, - { - "label": "Wiki Sidebar", - "file_type": "document", - "source_file": "wiki/_Sidebar.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "wiki sidebar", - "id": "sidebar_wiki" - }, - { - "label": "RSL Siege Manager Application", - "file_type": "concept", - "source_file": "wiki/Home.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "rsl siege manager application", - "id": "concept_rsl_siege_manager" - }, - { - "label": "Discord OAuth2", - "file_type": "concept", - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "discord oauth2", - "id": "concept_discord_oauth2" - }, - { - "label": "Caddy Reverse Proxy", - "file_type": "concept", - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "caddy reverse proxy", - "id": "concept_caddy_reverse_proxy" - }, - { - "label": "GitHub Actions CI/CD", - "file_type": "concept", - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "github actions ci/cd", - "id": "concept_github_actions" - }, - { - "label": ".github/workflows/deploy.yml", - "file_type": "code", - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": ".github/workflows/deploy.yml", - "id": "concept_deploy_workflow" - }, - { - "label": ".github/workflows/infra-deploy.yml", - "file_type": "code", - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": ".github/workflows/infra-deploy.yml", - "id": "concept_infra_deploy_workflow" - }, - { - "label": "Azure Managed Identity", - "file_type": "concept", - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "azure managed identity", - "id": "concept_managed_identity" - }, - { - "label": "Application Insights", - "file_type": "concept", - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "application insights", - "id": "concept_app_insights" - }, - { - "label": "scripts/bootstrap-images.ps1", - "file_type": "code", - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "source_url": null, - "captured_at": null, - "author": null, - "contributor": null, - "community": 5, - "norm_label": "scripts/bootstrap-images.ps1", - "id": "concept_bootstrap_images_script" - } - ], - "links": [ - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/env.py", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_env_py", - "target": "alembic_env_run_migrations_offline" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/env.py", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_env_py", - "target": "alembic_env_do_run_migrations" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/env.py", - "source_location": "L42", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_env_py", - "target": "alembic_env_run_async_migrations" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/env.py", - "source_location": "L53", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_env_py", - "target": "alembic_env_run_migrations_online" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/env.py", - "source_location": "L54", - "weight": 1.0, - "confidence_score": 1.0, - "source": "alembic_env_run_migrations_online", - "target": "alembic_env_run_async_migrations" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0001_initial_schema.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0001_initial_schema_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0001_initial_schema.py", - "source_location": "L273", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0001_initial_schema_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0001_initial_schema.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0001_initial_schema_rationale_1", - "target": "backend_alembic_versions_0001_initial_schema_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0002_add_preview_columns.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0002_add_preview_columns_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0003_make_siege_date_nullable_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0004_add_post_priority_config_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0005_add_description_to_post_priority_config_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0007_fix_group_number_max_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0009_add_discord_id_to_member_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_25", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0011_add_post_suggest_preview_py", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0011_add_post_suggest_preview_rationale_23", - "target": "versions_0001_initial_schema_upgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0002_add_preview_columns.py", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0002_add_preview_columns_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0003_make_siege_date_nullable_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0004_add_post_priority_config_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0005_add_description_to_post_priority_config_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", - "source_location": "L29", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0007_fix_group_number_max_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", - "source_location": "L29", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0009_add_discord_id_to_member_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_33", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_alembic_versions_0011_add_post_suggest_preview_py", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L34", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0011_add_post_suggest_preview_rationale_34", - "target": "versions_0001_initial_schema_downgrade" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0002_add_preview_columns.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0002_add_preview_columns_rationale_1", - "target": "backend_alembic_versions_0002_add_preview_columns_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0003_make_siege_date_nullable.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0003_make_siege_date_nullable_rationale_1", - "target": "backend_alembic_versions_0003_make_siege_date_nullable_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0004_add_post_priority_config.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0004_add_post_priority_config_rationale_1", - "target": "backend_alembic_versions_0004_add_post_priority_config_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0005_add_description_to_post_priority_config.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0005_add_description_to_post_priority_config_rationale_1", - "target": "backend_alembic_versions_0005_add_description_to_post_priority_config_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0006_power_level_and_drop_sort_value.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0006_power_level_and_drop_sort_value_rationale_1", - "target": "backend_alembic_versions_0006_power_level_and_drop_sort_value_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0007_fix_group_number_max.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0007_fix_group_number_max_rationale_1", - "target": "backend_alembic_versions_0007_fix_group_number_max_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0008_add_matched_condition_id_to_position.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0008_add_matched_condition_id_to_position_rationale_1", - "target": "backend_alembic_versions_0008_add_matched_condition_id_to_position_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0009_add_discord_id_to_member.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0009_add_discord_id_to_member_rationale_1", - "target": "backend_alembic_versions_0009_add_discord_id_to_member_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0010_add_last_seen_changelog_at_to_member.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0010_add_last_seen_changelog_at_to_member_rationale_1", - "target": "backend_alembic_versions_0010_add_last_seen_changelog_at_to_member_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/alembic/versions/0011_add_post_suggest_preview.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "versions_0011_add_post_suggest_preview_rationale_1", - "target": "backend_alembic_versions_0011_add_post_suggest_preview_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/config.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_config_py", - "target": "app_config_settings" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "bot/app/config.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_config_settings", - "target": "basesettings" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/main.py", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_main_py", - "target": "app_main_lifespan" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/main.py", - "source_location": "L48", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_rationale_48", - "target": "app_main_lifespan" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_rationale_1", - "target": "bot_app_main_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/middleware.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_middleware_py", - "target": "app_middleware_requestloggingmiddleware" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/middleware.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_middleware_requestloggingmiddleware", - "target": "basehttpmiddleware" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "backend/app/middleware.py", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_middleware_requestloggingmiddleware", - "target": "app_middleware_requestloggingmiddleware_dispatch" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L52", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_rate_limit_py", - "target": "app_rate_limit_get_client_ip" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L154", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_rate_limit_py", - "target": "app_rate_limit_rate_limit_key" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L179", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_rate_limit_py", - "target": "app_rate_limit_parse_retry_after_seconds" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L217", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_rate_limit_py", - "target": "app_rate_limit_rate_limit_exceeded_handler" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_rate_limit_rationale_1", - "target": "backend_app_rate_limit_py" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L176", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_rate_limit_rate_limit_key", - "target": "app_rate_limit_get_client_ip" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L53", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_rate_limit_rationale_53", - "target": "app_rate_limit_get_client_ip" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L155", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_rate_limit_rationale_155", - "target": "app_rate_limit_rate_limit_key" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L267", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_rate_limit_rate_limit_exceeded_handler", - "target": "app_rate_limit_parse_retry_after_seconds" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L180", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_rate_limit_rationale_180", - "target": "app_rate_limit_parse_retry_after_seconds" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/rate_limit.py", - "source_location": "L218", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_rate_limit_rationale_218", - "target": "app_rate_limit_rate_limit_exceeded_handler" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/telemetry.py", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_telemetry_py", - "target": "app_telemetry_configure_telemetry" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/telemetry.py", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_telemetry_rationale_32", - "target": "app_telemetry_configure_telemetry" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/telemetry.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_telemetry_rationale_1", - "target": "bot_app_telemetry_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_attack_day_py", - "target": "api_sieges_previewattackday" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L130", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_attack_day_py", - "target": "api_sieges_applyattackday" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/attack_day.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_attack_day_py", - "target": "api_types_attackdayassignment" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/attack_day.py", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_attack_day_py", - "target": "api_types_attackdaypreviewresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/attack_day.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_attack_day_py", - "target": "api_types_attackdayapplyresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_attack_day_py", - "target": "services_autofill_now_utc" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L114", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_attack_day_py", - "target": "services_attack_day_build_preview" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_autherror" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L41", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_exchange_code_for_token" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L59", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_get_discord_user" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L70", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_check_guild_membership" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L77", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_login" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L112", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_callback" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L203", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_logout" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L210", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_me" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L222", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "api_auth_error_redirect" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_1", - "target": "backend_app_api_auth_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "dependencies_auth_authenticateduser" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_auth_py", - "target": "dependencies_auth_get_current_user" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "dependencies_auth_rationale_1", - "target": "backend_app_api_auth_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L28", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_28", - "target": "api_auth_autherror" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/auth.py", - "source_location": "L17", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_auth_autherror", - "target": "dependencies_auth_authenticateduser" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/auth.py", - "source_location": "L18", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_auth_autherror", - "target": "api_types_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L137", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_callback", - "target": "api_auth_exchange_code_for_token" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L42", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_42", - "target": "api_auth_exchange_code_for_token" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L144", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_callback", - "target": "api_auth_get_discord_user" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L60", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_60", - "target": "api_auth_get_discord_user" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L153", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_callback", - "target": "api_auth_check_guild_membership" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L71", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_71", - "target": "api_auth_check_guild_membership" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L78", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_78", - "target": "api_auth_login" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L133", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_callback", - "target": "api_auth_error_redirect" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L118", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_118", - "target": "api_auth_callback" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L204", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_204", - "target": "api_auth_logout" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L213", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_213", - "target": "api_auth_me" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/auth.py", - "source_location": "L223", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_auth_rationale_223", - "target": "api_auth_error_redirect" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/autofill.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_autofill_py", - "target": "api_sieges_previewautofill" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/autofill.py", - "source_location": "L122", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_autofill_py", - "target": "api_sieges_applyautofill" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/autofill.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_autofill_py", - "target": "api_types_autofillassignment" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/autofill.py", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_autofill_py", - "target": "api_types_autofillpreviewresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/autofill.py", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_autofill_py", - "target": "api_types_autofillapplyresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/autofill.py", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_autofill_py", - "target": "services_autofill_now_utc" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "api_board_getboard" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L120", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "api_posts_updatepost" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L169", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "api_board_bulk_update_positions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "schemas_board_positionboardresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "schemas_board_groupboardresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "schemas_board_buildingboardresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "api_types_boardresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L40", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "schemas_board_positionupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "schemas_board_bulkpositionupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L89", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "services_board_get_siege_for_position" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L97", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "services_board_validate_position_state" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L112", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_board_py", - "target": "services_board_validate_member_active" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L227", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_board_bulk_update_positions", - "target": "services_board_validate_position_state" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L172", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_board_rationale_172", - "target": "api_board_bulk_update_positions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L176", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "api_buildings_list_buildings" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L181", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "api_buildings_add_building" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L270", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "api_sieges_updatebuilding" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L334", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "api_sieges_deletebuilding" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L346", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "api_buildings_add_group" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L397", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "api_buildings_delete_group" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "services_buildings_rebuild_groups_for_level" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L114", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "services_buildings_get_building_type_config" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L128", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "api_sieges_getbuildings" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L141", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "services_buildings_require_planning_or_not_locked" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L150", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_buildings_py", - "target": "services_buildings_create_groups_and_positions" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L189", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_buildings_add_building", - "target": "services_buildings_get_building_type_config" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L242", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_buildings_add_building", - "target": "services_buildings_create_groups_and_positions" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L356", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_buildings_add_group", - "target": "api_sieges_getbuildings" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/buildings.py", - "source_location": "L376", - "weight": 1.0, - "source": "api_buildings_add_group", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/buildings.py", - "source_location": "L386", - "weight": 1.0, - "source": "api_buildings_add_group", - "target": "models_position_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L407", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_buildings_delete_group", - "target": "api_sieges_getbuildings" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_changelog_py", - "target": "api_changelog_require_member_session" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L43", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_changelog_py", - "target": "api_changelog_get_changelog_status" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L69", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_changelog_py", - "target": "api_changelog_markchangelogseen" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_changelog_rationale_1", - "target": "backend_app_api_changelog_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/changelog.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_changelog_py", - "target": "schemas_changelog_changelogstatusresponse" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/changelog.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_changelog_rationale_1", - "target": "backend_app_api_changelog_py" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L61", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_changelog_get_changelog_status", - "target": "api_changelog_require_member_session" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L89", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_changelog_markchangelogseen", - "target": "api_changelog_require_member_session" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_changelog_rationale_25", - "target": "api_changelog_require_member_session" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_changelog_rationale_47", - "target": "api_changelog_get_changelog_status" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/changelog.py", - "source_location": "L65", - "weight": 1.0, - "source": "api_changelog_get_changelog_status", - "target": "schemas_changelog_changelogstatusresponse" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/changelog.py", - "source_location": "L73", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_changelog_rationale_73", - "target": "api_changelog_markchangelogseen" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/comparison.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "api_comparison_compare_with_most_recent" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/comparison.py", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "api_comparison_compare_with_specific" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/comparison.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "api_types_positionkey" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/comparison.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "api_types_memberdiff" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/comparison.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "api_types_comparisonresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/comparison.py", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "services_comparison_load_assignments" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/comparison.py", - "source_location": "L45", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "services_comparison_load_member_names" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/comparison.py", - "source_location": "L52", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "services_comparison_get_most_recent_completed" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/comparison.py", - "source_location": "L63", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_comparison_py", - "target": "api_sieges_comparesieges" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/config.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_config_py", - "target": "api_config_get_config" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/config.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_config_rationale_12", - "target": "api_config_get_config" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/config.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_config_rationale_1", - "target": "bot_app_config_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_discord_sync_py", - "target": "api_members_previewdiscordsync" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L152", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_discord_sync_py", - "target": "api_members_applydiscordsync" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/discord_sync.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_discord_sync_rationale_1", - "target": "backend_app_api_discord_sync_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_discord_sync_rationale_1", - "target": "backend_app_api_discord_sync_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/discord_sync.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_discord_sync_rationale_17", - "target": "api_members_previewdiscordsync" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/discord_sync.py", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_discord_sync_rationale_26", - "target": "api_members_applydiscordsync" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/health.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_health_py", - "target": "api_health_health" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L77", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "api_health_health" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L78", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_78", - "target": "api_health_health" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/images.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_images_py", - "target": "api_types_generateimagesresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/images.py", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_images_py", - "target": "api_images_generate_images" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/images.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_images_rationale_1", - "target": "backend_app_api_images_py" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/images.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_generateimagesresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_notifyresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_notificationresultitem", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L53", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_notificationbatchresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_post_priority_config_postpriorityresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_post_priority_config_postpriorityupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/siege_members.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_siege_members_siegemembercreate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/attack_day.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_attackdayassignment", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/attack_day.py", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_attackdaypreviewresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/attack_day.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_attackdayapplyresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/autofill.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_autofillassignment", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/autofill.py", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_autofillpreviewresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/autofill.py", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_autofillapplyresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_board_positionboardresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_board_groupboardresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_board_buildingboardresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_boardresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L40", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_board_positionupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_board_bulkpositionupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_building_buildingcreate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_building_buildingupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_positionresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_buildinggroupresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_buildingresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L43", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_building_groupcreate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/changelog.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_changelog_changelogstatusresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/common.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_common_errorresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/comparison.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_positionkey", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/comparison.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_memberdiff", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/comparison.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_comparisonresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_member_memberbase", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_member_memberupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_member_memberpreferencesupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_syncmatch", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L53", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_syncpreviewresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L59", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_member_syncapply", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_member_syncapplyresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_postresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_postupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_postconditionsupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_condition.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_condition_postconditionresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_schema", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_postsuggestionpreviewresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L79", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_postsuggestionapplyrequest", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L91", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_staleentry", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L116", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_postsuggestionapplyresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_siege_siegecreate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_siege_siegeupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_siege_siegeresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_siege_member_siegememberresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_siege_member_siegememberupdate", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_memberpreferencesummary", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/validation.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_validationissue", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/validation.py", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_validationresult", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/version.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_version_versionresponse", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L46", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_notifyrequest", - "target": "basemodel" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L51", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_postmessagerequest", - "target": "basemodel" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/images.py", - "source_location": "L73", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_images_generate_images", - "target": "api_types_generateimagesresponse" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/images.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_images_rationale_35", - "target": "api_images_generate_images" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L34", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_images_generate_images" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_images_generate_images" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/images.py", - "source_location": "L58", - "weight": 1.0, - "source": "api_images_generate_images", - "target": "services_image_gen_siegememberwithname" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_lifecycle_py", - "target": "api_sieges_activatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L61", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_lifecycle_py", - "target": "api_sieges_completesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L85", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_lifecycle_py", - "target": "api_sieges_reopensiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L109", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_lifecycle_py", - "target": "api_sieges_clonesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_members_py", - "target": "api_members_list_members" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_members_py", - "target": "api_members_createmember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_members_py", - "target": "api_members_get_member" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L62", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_members_py", - "target": "api_members_updatemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/members.py", - "source_location": "L51", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_members_py", - "target": "api_members_delete_member" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L113", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_members_py", - "target": "api_members_getmemberpreferences" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L81", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_members_py", - "target": "services_members_deactivate_member" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L71", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_botclient", - "target": "api_members_get_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L78", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_members_get_member", - "target": "services_bot_client_botclient_make_client" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L62", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_get_guild_member", - "target": "api_members_get_member" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L72", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_rationale_72", - "target": "api_members_get_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L63", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_members_updatemember", - "target": "api_members_get_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L82", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_members_deactivate_member", - "target": "api_members_get_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/members.py", - "source_location": "L116", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_members_getmemberpreferences", - "target": "api_members_get_member" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L61", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_siegebot", - "target": "api_members_get_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L63", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_members_get_member", - "target": "app_discord_client_siegebot_require_guild" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L62", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_rationale_62", - "target": "api_members_get_member" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L127", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "api_members_get_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L131", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_members_get_member", - "target": "app_http_api_get_bot" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L130", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_130", - "target": "api_members_get_member" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_get_member" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "api_members_get_member" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_members_get_member" - }, - { - "relation": "imports", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L2", - "weight": 1.0, - "context": "import", - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_types_notifyresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_types_notificationresultitem" - }, - { - "relation": "imports", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L2", - "weight": 1.0, - "context": "import", - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L64", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_notifications_send_dms" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_notifications_notifysiegemembers" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_notifications_getnotificationbatch" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_notifications_posttochannel" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_rationale_1", - "target": "backend_app_api_notifications_py" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/notifications.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_notifications_py", - "target": "api_types_generateimagesresponse" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "backend_app_api_notifications_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_rationale_65", - "target": "api_notifications_send_dms" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_siegebot", - "target": "api_notifications_send_dms" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_send_dms", - "target": "app_discord_client_siegebot_require_guild" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_rationale_23", - "target": "api_notifications_send_dms" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L142", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_rationale_142", - "target": "api_notifications_notifysiegemembers" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L310", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_rationale_310", - "target": "api_notifications_getnotificationbatch" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L371", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_rationale_371", - "target": "api_notifications_posttochannel" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/posts.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_posts_py", - "target": "api_posts_serialize_post" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_posts_py", - "target": "api_posts_list_posts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L54", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_posts_py", - "target": "api_posts_updatepost" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L76", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_posts_py", - "target": "api_posts_setpostconditions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_posts_py", - "target": "services_posts_get_siege_or_404" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_posts_py", - "target": "services_posts_get_post_for_siege_or_404" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/posts.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_list_posts", - "target": "api_posts_serialize_post" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/posts.py", - "source_location": "L46", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_updatepost", - "target": "api_posts_serialize_post" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/posts.py", - "source_location": "L60", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_setpostconditions", - "target": "api_posts_serialize_post" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/posts.py", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_rationale_13", - "target": "api_posts_serialize_post" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L42", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_list_posts", - "target": "services_posts_get_siege_or_404" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_posts_rationale_37", - "target": "api_posts_list_posts" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L7", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_post_priority_config_postpriorityresponse", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L7", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_post_priority_config_postpriorityupdate", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_postpriorityconfig", - "target": "api_post_priority_config_list_post_priorities" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L75", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "api_sieges_previewpostsuggestions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L335", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "api_sieges_applypostsuggestions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/post_suggestions.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_post_suggestions_rationale_1", - "target": "backend_app_api_post_suggestions_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "post_suggestions_schema" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "api_types_postsuggestionpreviewresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L79", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "schemas_post_suggestions_postsuggestionapplyrequest" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L91", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "schemas_post_suggestions_staleentry" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L116", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "api_types_postsuggestionapplyresult" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_rationale_1", - "target": "backend_app_api_post_suggestions_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L70", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "services_autofill_now_utc" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L517", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "services_post_suggestions_get_target_position" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L537", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_post_suggestions_py", - "target": "services_post_suggestions_null_entry" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_1", - "target": "backend_app_api_post_suggestions_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L418", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_418", - "target": "backend_app_api_post_suggestions_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L489", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_489", - "target": "backend_app_api_post_suggestions_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/post_suggestions.py", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_post_suggestions_rationale_37", - "target": "api_sieges_previewpostsuggestions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/post_suggestions.py", - "source_location": "L62", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_post_suggestions_rationale_62", - "target": "api_sieges_applypostsuggestions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/reference.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_reference_py", - "target": "api_members_getpostconditions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/reference.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_reference_py", - "target": "api_sieges_getbuildings" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/reference.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_reference_py", - "target": "api_members_getmemberroles" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L49", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_sieges_py", - "target": "api_sieges_list_sieges" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L66", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_sieges_py", - "target": "api_sieges_createsiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L58", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_sieges_py", - "target": "api_sieges_get_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L144", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_sieges_py", - "target": "api_sieges_updatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L156", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_sieges_py", - "target": "api_sieges_delete_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_sieges_py", - "target": "services_sieges_scrolls_per_player" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L28", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_sieges_py", - "target": "services_sieges_compute_scroll_count" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L145", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_updatesiege", - "target": "api_sieges_get_siege" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L157", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_delete_siege", - "target": "api_sieges_get_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/siege_members.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_siege_members_siegemembercreate" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/siege_members.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_siege_members_siegemembercreate", - "target": "api_types_memberpreferencesummary" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/siege_members.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_siege_members_siegemembercreate", - "target": "schemas_siege_member_siegememberresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/siege_members.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_siege_members_siegemembercreate", - "target": "schemas_siege_member_siegememberupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/siege_members.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_siege_members_list_siege_members" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/validation.py", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_validation_py", - "target": "api_sieges_validatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/validation.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_validation_py", - "target": "api_types_validationissue" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/validation.py", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_api_validation_py", - "target": "api_types_validationresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/version.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "api_version_read_backend_version" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/version.py", - "source_location": "L58", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_version_getversion", - "target": "api_version_read_backend_version" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/version.py", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_version_rationale_20", - "target": "api_version_read_backend_version" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/version.py", - "source_location": "L42", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "api_version_fetch_bot_version" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/version.py", - "source_location": "L59", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_version_getversion", - "target": "api_version_fetch_bot_version" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/version.py", - "source_location": "L43", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_version_rationale_43", - "target": "api_version_fetch_bot_version" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/version.py", - "source_location": "L57", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_version_rationale_57", - "target": "api_version_getversion" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/base.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_db_base_py", - "target": "base" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/base.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "base", - "target": "declarativebase" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/seeds.py", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_db_seeds_py", - "target": "db_seeds_seed_post_conditions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/seeds.py", - "source_location": "L63", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_db_seeds_py", - "target": "db_seeds_seed_building_type_config" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/seeds.py", - "source_location": "L91", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_db_seeds_py", - "target": "db_seeds_seed_post_priority_config" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/seeds.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "db_seeds_rationale_1", - "target": "backend_app_db_seeds_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/seeds.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "db_seeds_rationale_8", - "target": "db_seeds_seed_post_conditions" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L249", - "weight": 1.0, - "source": "app_main_main", - "target": "db_seeds_seed_post_conditions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/seeds.py", - "source_location": "L64", - "weight": 1.0, - "confidence_score": 1.0, - "source": "db_seeds_rationale_64", - "target": "db_seeds_seed_building_type_config" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L250", - "weight": 1.0, - "source": "app_main_main", - "target": "db_seeds_seed_building_type_config" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/seeds.py", - "source_location": "L92", - "weight": 1.0, - "confidence_score": 1.0, - "source": "db_seeds_rationale_92", - "target": "db_seeds_seed_post_priority_config" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L251", - "weight": 1.0, - "source": "app_main_main", - "target": "db_seeds_seed_post_priority_config" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1085", - "weight": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "db_seeds_seed_post_priority_config" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/db/session.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_db_session_py", - "target": "db_session_get_db" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L45", - "weight": 1.0, - "confidence_score": 1.0, - "source": "dependencies_auth_get_current_user", - "target": "dependencies_auth_authenticateduser" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "dependencies_auth_rationale_24", - "target": "dependencies_auth_authenticateduser" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L19", - "weight": 0.8, - "confidence_score": 0.5, - "source": "dependencies_auth_authenticateduser", - "target": "api_types_member" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/dependencies/auth.py", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "dependencies_auth_rationale_37", - "target": "dependencies_auth_get_current_user" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/building.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_building", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/building_group.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "models_building_group_buildinggroup", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/building_type_config.py", - "source_location": "L4", - "weight": 0.8, - "confidence_score": 0.5, - "source": "backend_app_models_building_type_config_py", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/member.py", - "source_location": "L7", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_member", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/notification_batch.py", - "source_location": "L7", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/notification_batch_result.py", - "source_location": "L7", - "weight": 0.8, - "confidence_score": 0.5, - "source": "backend_app_models_notification_batch_result_py", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/position.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "models_position_position", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/post.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_post", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/post_condition.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_postcondition", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/post_priority_config.py", - "source_location": "L4", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_posts_postpriorityconfig", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege.py", - "source_location": "L7", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siege", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege_member.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siegemember", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L35", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L35", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L35", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L35", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L35", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L35", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "base" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L14", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L14", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L14", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/building_group.py", - "source_location": "L9", - "weight": 0.8, - "confidence_score": 0.5, - "source": "models_building_group_buildinggroup", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/position.py", - "source_location": "L9", - "weight": 0.8, - "confidence_score": 0.5, - "source": "models_position_position", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L38", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L38", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L38", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L38", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L38", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L38", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/buildings.py", - "source_location": "L66", - "weight": 1.0, - "source": "services_buildings_rebuild_groups_for_level", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/buildings.py", - "source_location": "L160", - "weight": 1.0, - "source": "services_buildings_create_groups_and_positions", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L164", - "weight": 1.0, - "source": "api_sieges_clonesiege", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/sieges.py", - "source_location": "L109", - "weight": 1.0, - "source": "api_sieges_createsiege", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L164", - "weight": 1.0, - "source": "scripts_seed_demo_seed_buildings_and_positions", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L751", - "weight": 1.0, - "source": "excel_import_import_excel_create_building_with_groups_and_positions", - "target": "models_building_group_buildinggroup" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/building_type_config.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "backend_app_models_building_type_config_py", - "target": "api_types_buildingtype" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/enums.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_enums_py", - "target": "api_types_siegestatus" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/enums.py", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_enums_py", - "target": "api_types_buildingtype" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/enums.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_enums_py", - "target": "api_types_memberrole" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/enums.py", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_enums_py", - "target": "models_enums_powerlevel" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/enums.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_enums_py", - "target": "models_enums_notificationbatchstatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "models_enums_notificationbatchstatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "models_enums_notificationbatchstatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/notification_batch.py", - "source_location": "L8", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "models_enums_notificationbatchstatus" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/member.py", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "api_types_member" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "schemas_member_memberbase" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "schemas_member_membercreate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "schemas_member_memberupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "schemas_member_memberresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "schemas_member_memberpreferencesupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "api_types_syncmatch" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L53", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "api_types_syncpreviewresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L59", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "schemas_member_syncapply" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_member_py", - "target": "schemas_member_syncapplyresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L17", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "backend_app_models_notification_batch_result_py" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L17", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "backend_app_models_notification_batch_result_py" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/notification_batch_result.py", - "source_location": "L10", - "weight": 0.8, - "confidence_score": 0.5, - "source": "backend_app_models_notification_batch_result_py", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/notifications.py", - "source_location": "L270", - "weight": 1.0, - "source": "api_notifications_notifysiegemembers", - "target": "backend_app_models_notification_batch_result_py" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/position.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_position_py", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L18", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L18", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L18", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/position.py", - "source_location": "L10", - "weight": 0.8, - "confidence_score": 0.5, - "source": "models_position_position", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/position.py", - "source_location": "L11", - "weight": 0.8, - "confidence_score": 0.5, - "source": "models_position_position", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L41", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L41", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L41", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L41", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L41", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "models_position_position" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L41", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "models_position_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/buildings.py", - "source_location": "L55", - "weight": 1.0, - "source": "services_buildings_rebuild_groups_for_level", - "target": "models_position_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/buildings.py", - "source_location": "L169", - "weight": 1.0, - "source": "services_buildings_create_groups_and_positions", - "target": "models_position_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L176", - "weight": 1.0, - "source": "api_sieges_clonesiege", - "target": "models_position_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/sieges.py", - "source_location": "L118", - "weight": 1.0, - "source": "api_sieges_createsiege", - "target": "models_position_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L176", - "weight": 1.0, - "source": "scripts_seed_demo_seed_buildings_and_positions", - "target": "models_position_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L760", - "weight": 1.0, - "source": "excel_import_import_excel_create_building_with_groups_and_positions", - "target": "models_position_position" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/post.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_post_py", - "target": "api_types_post" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_post_py", - "target": "schemas_post_postresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_post_py", - "target": "schemas_post_postupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_post_py", - "target": "schemas_post_postconditionsupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/models/siege.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_siege_py", - "target": "api_types_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_siege_py", - "target": "schemas_siege_siegecreate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_siege_py", - "target": "schemas_siege_siegeupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_models_siege_py", - "target": "schemas_siege_siegeresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_board_positionboardresponse", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_board_groupboardresponse", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_board_buildingboardresponse", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_board_positionupdate", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_board_bulkpositionupdate", - "target": "api_types_buildingtype" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_building", - "target": "schemas_building_buildingcreate" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_building_buildingcreate", - "target": "api_types_buildingtype" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_building", - "target": "schemas_building_buildingupdate" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_building_buildingupdate", - "target": "api_types_buildingtype" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L43", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_building", - "target": "schemas_building_groupcreate" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_building_groupcreate", - "target": "api_types_buildingtype" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/changelog.py", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_changelog_rationale_9", - "target": "schemas_changelog_changelogstatusresponse" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/changelog.py", - "source_location": "L95", - "weight": 1.0, - "source": "api_changelog_markchangelogseen", - "target": "schemas_changelog_changelogstatusresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/common.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_schemas_common_py", - "target": "schemas_common_errorresponse" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_member_membercreate", - "target": "schemas_member_memberbase" - }, - { - "relation": "inherits", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_member_memberresponse", - "target": "schemas_member_memberbase" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_member_memberbase", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_member_membercreate", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_member_memberupdate", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_member_memberresponse", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_member_memberpreferencesupdate", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_member_syncapply", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_member_syncapplyresponse", - "target": "api_types_memberrole" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L158", - "weight": 1.0, - "source": "api_members_applydiscordsync", - "target": "schemas_member_syncapplyresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_post_postresponse", - "target": "schemas_post_condition_postconditionresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_post_postupdate", - "target": "schemas_post_condition_postconditionresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/post.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_post_postconditionsupdate", - "target": "schemas_post_condition_postconditionresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_condition.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_postcondition", - "target": "schemas_post_condition_postconditionresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_siege_member_siegememberresponse", - "target": "schemas_post_condition_postconditionresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_siege_member_siegememberupdate", - "target": "schemas_post_condition_postconditionresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_memberpreferencesummary", - "target": "schemas_post_condition_postconditionresponse" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L80", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_rationale_80", - "target": "schemas_post_suggestions_postsuggestionapplyrequest" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L92", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_rationale_92", - "target": "schemas_post_suggestions_staleentry" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L454", - "weight": 1.0, - "source": "api_sieges_applypostsuggestions", - "target": "schemas_post_suggestions_staleentry" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_rationale_13", - "target": "post_suggestions_schema" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L66", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_rationale_66", - "target": "api_types_postsuggestionpreviewresult" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/post_suggestions.py", - "source_location": "L117", - "weight": 1.0, - "confidence_score": 1.0, - "source": "schemas_post_suggestions_rationale_117", - "target": "api_types_postsuggestionapplyresult" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_siege_siegecreate", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_siege_siegeupdate", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/siege.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "schemas_siege_siegeresponse", - "target": "api_types_siegestatus" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "schemas_siege_member_siegememberresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "schemas_siege_member_resolve_member_fields" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "schemas_siege_member_siegememberupdate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/version.py", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "schemas_version_versionresponse" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/version.py", - "source_location": "L63", - "weight": 1.0, - "source": "api_version_getversion", - "target": "schemas_version_versionresponse" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L72", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_previewattackday", - "target": "services_attack_day_build_preview" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L120", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_attack_day_build_preview", - "target": "services_autofill_now_utc" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/attack_day.py", - "source_location": "L145", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_applyattackday", - "target": "services_autofill_now_utc" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/autofill.py", - "source_location": "L111", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_previewautofill", - "target": "services_autofill_now_utc" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/autofill.py", - "source_location": "L136", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_applyautofill", - "target": "services_autofill_now_utc" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L324", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_previewpostsuggestions", - "target": "services_autofill_now_utc" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L385", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_applypostsuggestions", - "target": "services_autofill_now_utc" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L71", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_71", - "target": "services_autofill_now_utc" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L151", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_updatepost", - "target": "services_board_validate_position_state" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L98", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_board_rationale_98", - "target": "services_board_validate_position_state" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L154", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_updatepost", - "target": "services_board_validate_member_active" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_board_rationale_16", - "target": "api_board_getboard" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/board.py", - "source_location": "L123", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_board_rationale_123", - "target": "api_posts_updatepost" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_botclient", - "target": "services_bot_client_botclient_make_client" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_botclient", - "target": "app_http_api_notify" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_botclient", - "target": "app_http_api_post_message" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_botclient", - "target": "app_http_api_post_image" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_rationale_1", - "target": "services_bot_client_botclient" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_notify", - "target": "services_bot_client_botclient_make_client" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L34", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_post_message", - "target": "services_bot_client_botclient_make_client" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_rationale_19", - "target": "app_http_api_notify" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_rationale_32", - "target": "app_http_api_post_message" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/bot_client.py", - "source_location": "L45", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_bot_client_rationale_45", - "target": "app_http_api_post_image" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L321", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_updatebuilding", - "target": "services_buildings_rebuild_groups_for_level" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_buildings_rationale_23", - "target": "services_buildings_rebuild_groups_for_level" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/buildings.py", - "source_location": "L31", - "weight": 1.0, - "source": "services_buildings_rebuild_groups_for_level", - "target": "services_building_capacity_get_team_count" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L290", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_updatebuilding", - "target": "services_buildings_get_building_type_config" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L142", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_buildings_rationale_142", - "target": "services_buildings_require_planning_or_not_locked" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L156", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_buildings_rationale_156", - "target": "services_buildings_create_groups_and_positions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/building_capacity.py", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_building_capacity_py", - "target": "services_building_capacity_get_team_count" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/building_capacity.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_building_capacity_rationale_14", - "target": "services_building_capacity_get_team_count" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/sieges.py", - "source_location": "L46", - "weight": 1.0, - "source": "services_sieges_compute_scroll_count", - "target": "services_building_capacity_get_team_count" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/comparison.py", - "source_location": "L66", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_comparesieges", - "target": "services_comparison_load_assignments" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/comparison.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_comparison_rationale_14", - "target": "services_comparison_load_assignments" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/comparison.py", - "source_location": "L70", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_comparesieges", - "target": "services_comparison_load_member_names" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_discord_sync_rationale_12", - "target": "api_members_previewdiscordsync" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/discord_sync.py", - "source_location": "L153", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_discord_sync_rationale_153", - "target": "api_members_applydiscordsync" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_image_gen_py", - "target": "services_image_gen_siegememberwithname" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L61", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_image_gen_py", - "target": "services_image_gen_build_assignments_html" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L233", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_image_gen_py", - "target": "services_image_gen_build_reserves_html" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L331", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_image_gen_py", - "target": "services_image_gen_render_html_to_png" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L350", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_image_gen_py", - "target": "services_image_gen_generate_assignments_image" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L360", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_image_gen_py", - "target": "services_image_gen_generate_reserves_image" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_rationale_1", - "target": "backend_app_services_image_gen_py" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/images.py", - "source_location": "L16", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_generateimagesresponse", - "target": "services_image_gen_siegememberwithname" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L24", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "services_image_gen_siegememberwithname" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L24", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "services_image_gen_siegememberwithname" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L24", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "services_image_gen_siegememberwithname" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "services_image_gen_siegememberwithname", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "services_image_gen_siegememberwithname", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L6", - "weight": 0.8, - "confidence_score": 0.5, - "source": "services_image_gen_siegememberwithname", - "target": "api_types_boardresponse" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/notifications.py", - "source_location": "L399", - "weight": 1.0, - "source": "api_notifications_posttochannel", - "target": "services_image_gen_siegememberwithname" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L356", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_generate_assignments_image", - "target": "services_image_gen_build_assignments_html" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L66", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_rationale_66", - "target": "services_image_gen_build_assignments_html" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L365", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_generate_reserves_image", - "target": "services_image_gen_build_reserves_html" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L237", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_rationale_237", - "target": "services_image_gen_build_reserves_html" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L357", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_generate_assignments_image", - "target": "services_image_gen_render_html_to_png" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L366", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_generate_reserves_image", - "target": "services_image_gen_render_html_to_png" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L332", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_rationale_332", - "target": "services_image_gen_render_html_to_png" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L355", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_rationale_355", - "target": "services_image_gen_generate_assignments_image" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/image_gen.py", - "source_location": "L364", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_image_gen_rationale_364", - "target": "services_image_gen_generate_reserves_image" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_lifecycle_rationale_18", - "target": "api_sieges_activatesiege" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L62", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_lifecycle_rationale_62", - "target": "api_sieges_completesiege" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L86", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_lifecycle_rationale_86", - "target": "api_sieges_reopensiege" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/lifecycle.py", - "source_location": "L110", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_lifecycle_rationale_110", - "target": "api_sieges_clonesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L60", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_notification_message_py", - "target": "services_notification_message_positioninfo" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L74", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_notification_message_py", - "target": "services_notification_message_position_sort_key" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L84", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_notification_message_py", - "target": "services_notification_message_position_label" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L110", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_notification_message_py", - "target": "services_notification_message_positions_to_key_set" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L117", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_notification_message_py", - "target": "services_notification_message_positions_from_keys" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L126", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_notification_message_py", - "target": "services_notification_message_build_section" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L153", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_app_services_notification_message_py", - "target": "services_notification_message_build_member_notification_message" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_1", - "target": "backend_app_services_notification_message_py" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L61", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_61", - "target": "services_notification_message_positioninfo" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L25", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "services_notification_message_positioninfo" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L25", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "services_notification_message_positioninfo" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L25", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "services_notification_message_positioninfo" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "services_notification_message_positioninfo", - "target": "api_types_buildingtype" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/notifications.py", - "source_location": "L214", - "weight": 1.0, - "source": "api_notifications_notifysiegemembers", - "target": "services_notification_message_positioninfo" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L75", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_75", - "target": "services_notification_message_position_sort_key" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L142", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_build_section", - "target": "services_notification_message_position_label" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L85", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_85", - "target": "services_notification_message_position_label" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L196", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_build_member_notification_message", - "target": "services_notification_message_positions_to_key_set" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L111", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_111", - "target": "services_notification_message_positions_to_key_set" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L205", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_build_member_notification_message", - "target": "services_notification_message_positions_from_keys" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L118", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_118", - "target": "services_notification_message_positions_from_keys" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L213", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_build_member_notification_message", - "target": "services_notification_message_build_section" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L131", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_131", - "target": "services_notification_message_build_section" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/notification_message.py", - "source_location": "L161", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_notification_message_rationale_161", - "target": "services_notification_message_build_member_notification_message" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/notifications.py", - "source_location": "L262", - "weight": 1.0, - "source": "api_notifications_notifysiegemembers", - "target": "services_notification_message_build_member_notification_message" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L61", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_updatepost", - "target": "services_posts_get_siege_or_404" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L93", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_setpostconditions", - "target": "services_posts_get_siege_or_404" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_updatepost", - "target": "services_posts_get_post_for_siege_or_404" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L97", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_setpostconditions", - "target": "services_posts_get_post_for_siege_or_404" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L55", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_posts_rationale_55", - "target": "api_posts_updatepost" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/posts.py", - "source_location": "L79", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_posts_rationale_79", - "target": "api_posts_setpostconditions" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L167", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_previewpostsuggestions", - "target": "services_post_suggestions_get_target_position" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L518", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_518", - "target": "services_post_suggestions_get_target_position" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L170", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_previewpostsuggestions", - "target": "services_post_suggestions_null_entry" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L546", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_546", - "target": "services_post_suggestions_null_entry" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L79", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_79", - "target": "api_sieges_previewpostsuggestions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/post_suggestions.py", - "source_location": "L340", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_post_suggestions_rationale_340", - "target": "api_sieges_applypostsuggestions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_sieges_rationale_20", - "target": "services_sieges_scrolls_per_player" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/autofill.py", - "source_location": "L77", - "weight": 1.0, - "source": "api_sieges_previewautofill", - "target": "services_sieges_scrolls_per_player" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/validation.py", - "source_location": "L43", - "weight": 1.0, - "source": "api_sieges_validatesiege", - "target": "services_sieges_scrolls_per_player" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/sieges.py", - "source_location": "L29", - "weight": 1.0, - "confidence_score": 1.0, - "source": "services_sieges_rationale_29", - "target": "services_sieges_compute_scroll_count" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/autofill.py", - "source_location": "L76", - "weight": 1.0, - "source": "api_sieges_previewautofill", - "target": "services_sieges_compute_scroll_count" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/services/validation.py", - "source_location": "L42", - "weight": 1.0, - "source": "api_sieges_validatesiege", - "target": "services_sieges_compute_scroll_count" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed.py", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_scripts_seed_py", - "target": "app_main_main" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L95", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_scripts_seed_demo_py", - "target": "scripts_seed_demo_get_or_create_members" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L114", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_scripts_seed_demo_py", - "target": "scripts_seed_demo_get_or_create_demo_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L133", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_scripts_seed_demo_py", - "target": "scripts_seed_demo_seed_buildings_and_positions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L203", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_scripts_seed_demo_py", - "target": "scripts_seed_demo_get_or_create_second_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L220", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_scripts_seed_demo_py", - "target": "scripts_seed_demo_seed_siege_members" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L242", - "weight": 1.0, - "confidence_score": 1.0, - "source": "backend_scripts_seed_demo_py", - "target": "app_main_main" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L256", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "scripts_seed_demo_get_or_create_members" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L96", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_seed_demo_rationale_96", - "target": "scripts_seed_demo_get_or_create_members" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L687", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "scripts_seed_demo_get_or_create_members" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L702", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_seed_demo_get_or_create_members", - "target": "excel_import_import_excel_map_role" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L835", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "scripts_seed_demo_get_or_create_members" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L691", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_691", - "target": "scripts_seed_demo_get_or_create_members" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L261", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "scripts_seed_demo_get_or_create_demo_siege" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L115", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_seed_demo_rationale_115", - "target": "scripts_seed_demo_get_or_create_demo_siege" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L266", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "scripts_seed_demo_seed_buildings_and_positions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L139", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_seed_demo_rationale_139", - "target": "scripts_seed_demo_seed_buildings_and_positions" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L276", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "scripts_seed_demo_get_or_create_second_siege" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L204", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_seed_demo_rationale_204", - "target": "scripts_seed_demo_get_or_create_second_siege" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L271", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "scripts_seed_demo_seed_siege_members" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "backend/scripts/seed_demo.py", - "source_location": "L225", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_seed_demo_rationale_225", - "target": "scripts_seed_demo_seed_siege_members" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_discord_client_py", - "target": "app_discord_client_siegebot" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_siegebot", - "target": "app_discord_client_siegebot_init" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_siegebot", - "target": "app_discord_client_siegebot_on_ready" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_siegebot", - "target": "app_discord_client_siegebot_require_guild" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_siegebot", - "target": "app_http_api_post_message" - }, - { - "relation": "method", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_siegebot", - "target": "app_http_api_post_image" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_rationale_7", - "target": "app_discord_client_siegebot" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "bot/app/http_api.py", - "source_location": "L11", - "weight": 0.8, - "confidence_score": 0.5, - "source": "app_http_api_notifyrequest", - "target": "app_discord_client_siegebot" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "bot/app/http_api.py", - "source_location": "L11", - "weight": 0.8, - "confidence_score": 0.5, - "source": "app_http_api_postmessagerequest", - "target": "app_discord_client_siegebot" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "bot/app/main.py", - "source_location": "L40", - "weight": 1.0, - "source": "app_main_main", - "target": "app_discord_client_siegebot" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_post_message", - "target": "app_discord_client_siegebot_require_guild" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L51", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_post_image", - "target": "app_discord_client_siegebot_require_guild" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L34", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_rationale_34", - "target": "app_http_api_post_message" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/discord_client.py", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_discord_client_rationale_47", - "target": "app_http_api_post_image" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_set_bot" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_get_bot" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_verify_api_key" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L46", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_notifyrequest" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L51", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_postmessagerequest" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L57", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_version" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L83", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_notify" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L97", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_post_message" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L111", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_post_image" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L136", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_http_api_py", - "target": "app_http_api_get_guild_member" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "bot/app/main.py", - "source_location": "L41", - "weight": 1.0, - "source": "app_main_main", - "target": "app_http_api_set_bot" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L88", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_notify", - "target": "app_http_api_get_bot" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L102", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_post_message", - "target": "app_http_api_get_bot" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L117", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_post_image", - "target": "app_http_api_get_bot" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_37", - "target": "app_http_api_verify_api_key" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/version.ts", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "api_version_getversion" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L58", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_58", - "target": "app_http_api_version" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/version.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/version.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/version.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "api_types_versioninfo" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/version.ts", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_version", - "target": "api_version_useversion" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "app_http_api_version" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L87", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_87", - "target": "app_http_api_notify" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L101", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_101", - "target": "app_http_api_post_message" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L116", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_116", - "target": "app_http_api_post_image" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/http_api.py", - "source_location": "L140", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_http_api_rationale_140", - "target": "app_http_api_get_guild_member" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_main_py", - "target": "app_main_run_http_server" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L30", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_main_py", - "target": "app_main_run_discord_client" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "bot_app_main_py", - "target": "app_main_main" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L45", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "app_main_run_http_server" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_rationale_19", - "target": "app_main_run_http_server" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "app_main_run_discord_client" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_rationale_31", - "target": "app_main_run_discord_client" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "bot/app/main.py", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_rationale_37", - "target": "app_main_main" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L144", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "app_main_main" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1162", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "app_main_main" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1196", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "excel_import_import_excel_collect_xlsm_files" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1200", - "weight": 1.0, - "confidence_score": 1.0, - "source": "app_main_main", - "target": "excel_import_import_excel_import_file" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/tailwind.config.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_tailwind_config_ts", - "target": "frontend_src_api_config_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/vitest.config.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_vitest_config_ts", - "target": "frontend_vite_config_ts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_apicreatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_apiaddbuilding" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L52", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_apicreatemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L84", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "api_types_siegemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L127", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_buildingstab" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L128", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_poststab" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L179", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_search" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L198", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_roleselect" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L273", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_firstpositionspan" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L274", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_positioncell" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L276", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_chevron" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/board.spec.ts", - "source_location": "L367", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_board_spec_ts", - "target": "e2e_board_spec_autofillbtn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L48", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_board_spec_apicreatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L63", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_board_spec_apiaddbuilding" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_board_spec_apicreatemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L613", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "e2e_board_spec_buildingstab" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "frontend_src_api_posts_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "api_posts_getposts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "api_sieges_getsiegememberpreferences" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "api_sieges_previewpostsuggestions" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "frontend_src_api_board_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "api_posts_updatepost" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "api_types_buildingresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "api_types_siegemember" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "api_types_postcondition" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "ui_button_button" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "post_suggestions_readme" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "frontend_src_lib_post_priority_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "lib_post_priority_prioritylabel" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "lib_post_priority_prioritybadgecolor" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "pages_boardpage_role_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "pages_boardpage_role_priority" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L40", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "pages_boardpage_role_badge_colors" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "pages_boardpage_power_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L57", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "components_poststab_memberwithmatches" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L64", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "components_poststab_duplicateconditionmap" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L68", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "components_poststab_buildduplicateconditionmap" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L85", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "components_poststab_findpostposition" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L100", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "components_poststab_memberassignrow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L302", - "weight": 1.0, - "confidence_score": 1.0, - "source": "e2e_board_spec_poststab", - "target": "pages_postspage_postrow" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "e2e_board_spec_poststab" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L112", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "e2e_board_spec_positioncell" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_members_spec_ts", - "target": "e2e_members_spec_ensurememberslotsavailable" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L68", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_members_spec_ts", - "target": "ui_checkbox_checkbox" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L125", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_members_spec_ts", - "target": "e2e_members_spec_activecheckbox" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/members.spec.ts", - "source_location": "L131", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_members_spec_ts", - "target": "e2e_members_spec_editlinks" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L93", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "api_types_siegemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L212", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_siege_lifecycle_spec_dateinput" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L153", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_siege_lifecycle_spec_url" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L181", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_siege_lifecycle_spec_tabstrip" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L203", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_siege_lifecycle_spec_boardlink" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L369", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_siege_lifecycle_spec_memberrow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L382", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_siege_lifecycle_spec_activebadge" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/e2e/siege-lifecycle.spec.ts", - "source_location": "L383", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_e2e_siege_lifecycle_spec_ts", - "target": "e2e_siege_lifecycle_spec_errorbadge" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_components_layout_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_components_requireauth_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_components_siegelayout_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_loginpage_loginpage" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_pages_landingpage_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_landingpage_landingorsieges" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_memberspage_memberspage" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_pages_memberdetailpage_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_pages_siegespage_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_siegecreatepage_siegecreatepage" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_pages_siegesettingspage_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_boardpage_boardpage" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_postspage_postspage" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "api_types_siegemember" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_comparisonpage_comparisonpage" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "frontend_src_pages_postprioritiespage_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "pages_systempage_systempage" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/App.tsx", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_app_tsx", - "target": "src_app_app" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/main.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_main_tsx", - "target": "frontend_src_app_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/main.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_main_tsx", - "target": "frontend_src_context_authcontext_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/main.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_main_tsx", - "target": "context_authcontext_authprovider" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/main.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_main_tsx", - "target": "src_main_queryclient" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/board.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_board_ts", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/board.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_board_ts", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/board.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_board_ts", - "target": "api_types_boardresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/board.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_board_ts", - "target": "api_types_positionresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/board.ts", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_board_ts", - "target": "api_board_getboard" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/board.ts", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_board_ts", - "target": "api_posts_updatepost" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_api_board_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_api_board_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_board_getboard" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "api_board_getboard" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_changelog_ts", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_changelog_ts", - "target": "api_changelog_changelogstatus" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_changelog_ts", - "target": "api_changelog_fetchchangelogstatus" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/changelog.ts", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_changelog_ts", - "target": "api_changelog_markchangelogseen" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "frontend_src_api_changelog_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "api_changelog_fetchchangelogstatus" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "api_changelog_markchangelogseen" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/client.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_client_ts", - "target": "api_client_apiclient" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/config.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_config_ts", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_context_authcontext_tsx", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_loginpage_loginpage", - "target": "frontend_src_api_client_ts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/config.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_config_ts", - "target": "api_config_appconfig" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/config.ts", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_config_ts", - "target": "api_config_fetchconfig" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "frontend_src_api_config_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "api_config_fetchconfig" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_types_member" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_types_postcondition" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_types_memberroleinfo" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_types_syncpreviewresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_types_syncapplyitem" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_getmember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_createmember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_updatemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L46", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_deletemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L50", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_getmemberpreferences" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L59", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_updatememberpreferences" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L72", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_getpostconditions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L77", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_getmemberroles" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L82", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_previewdiscordsync" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/members.ts", - "source_location": "L89", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_members_ts", - "target": "api_members_applydiscordsync" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "frontend_src_api_members_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_api_members_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_api_members_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_api_members_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_api_members_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "frontend_src_api_members_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "api_members_getmember" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "api_members_createmember" - }, - { - "relation": "imports", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "context": "import", - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_members_updatemember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L149", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_members_updatemember" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "api_members_updatemember" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "api_members_getmemberpreferences" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "api_members_updatememberpreferences" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "api_members_getpostconditions" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "api_members_getpostconditions" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "api_members_getpostconditions" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "api_members_previewdiscordsync" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "api_members_applydiscordsync" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L288", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_notifysiegemembers", - "target": "api_types_notifyresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_notifications_notifysiegemembers" - }, - { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "backend/app/api/notifications.py", - "source_location": "L255", - "weight": 1.0, - "source": "api_notifications_notifysiegemembers", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L341", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_getnotificationbatch", - "target": "api_types_notificationresultitem" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L354", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_notifications_getnotificationbatch", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_notifications_getnotificationbatch" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_notifications_posttochannel" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "api_types_post" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "api_posts_getpostpriorities" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "api_posts_updatepostpriority" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "api_posts_getposts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "api_posts_updatepost" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/posts.ts", - "source_location": "L44", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_posts_ts", - "target": "api_posts_setpostconditions" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_api_posts_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_api_posts_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_api_posts_ts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/api/post_priority_config.py", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_posts_postpriorityconfig", - "target": "api_posts_updatepostpriority" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L44", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L44", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L44", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L44", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L44", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L44", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_posts_postpriorityconfig" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_posts_getpostpriorities" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "api_posts_getpostpriorities" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "api_posts_updatepostpriority" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "api_posts_getposts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_posts_updatepost" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "api_posts_setpostconditions" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_siege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_siegestatus" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_building" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_buildingtype" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_buildingtypeinfo" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_memberpreferencesummary" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_validationresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_autofillpreviewresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_autofillapplyresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_attackdaypreviewresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_attackdayapplyresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_comparisonresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_postsuggestionpreviewresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_types_postsuggestionapplyresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_getsieges" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_getsiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_createsiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_updatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L45", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_deletesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L49", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_activatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L54", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_completesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L59", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_clonesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L64", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_reopensiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L69", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_validatesiege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L113", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_getbuildings" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L83", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_createbuilding" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L94", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_updatebuilding" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L106", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_deletebuilding" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L120", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_getsiegemembers" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L127", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_getsiegememberpreferences" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L165", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_previewautofill" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L174", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_applyautofill" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L183", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_previewattackday" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L192", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_applyattackday" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L201", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_comparesieges" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L210", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_comparesiegesspecific" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L220", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_previewpostsuggestions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/sieges.ts", - "source_location": "L229", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_sieges_ts", - "target": "api_sieges_applypostsuggestions" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/SiegeLayout.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_siegelayout_tsx", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "frontend_src_api_sieges_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "api_sieges_getsieges" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "api_sieges_getsieges" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "api_sieges_getsieges" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/SiegeLayout.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_siegelayout_tsx", - "target": "api_sieges_getsiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_sieges_getsiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "api_sieges_getsiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_sieges_getsiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_getsiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "api_sieges_createsiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_updatesiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_deletesiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_activatesiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_completesiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "api_sieges_clonesiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_clonesiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_reopensiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_sieges_validatesiege" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_validatesiege" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L284", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_updatebuilding", - "target": "api_sieges_getbuildings" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/buildings.py", - "source_location": "L341", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_sieges_deletebuilding", - "target": "api_sieges_getbuildings" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_getbuildings" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_updatebuilding" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_sieges_getsiegemembers" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_sieges_getsiegemembers" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_sieges_getsiegemembers" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/services/siege_members.py", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_sieges_getsiegememberpreferences" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_sieges_previewautofill" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_sieges_applyautofill" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_sieges_previewattackday" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_sieges_applyattackday" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "api_sieges_comparesieges" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "api_sieges_comparesiegesspecific" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "api_sieges_previewpostsuggestions" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "api_sieges_applypostsuggestions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_memberrole" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_siegestatus" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_buildingtype" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_member" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_syncmatch" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_syncpreviewresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_syncapplyitem" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L123", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_postcondition" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L51", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L62", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_building" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L72", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_memberpreferencesummary" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L79", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_positionresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L89", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_buildinggroupresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L96", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_buildingresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L105", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_boardresponse" - }, - { - "relation": "imports_from", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L13", - "weight": 1.0, - "context": "import", - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L129", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_post" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L140", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_validationissue" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L146", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_validationresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L152", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_autofillassignment" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L158", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_autofillpreviewresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L163", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_autofillapplyresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L168", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_attackdayassignment" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L173", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_attackdaypreviewresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L178", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_attackdayapplyresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L183", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_positionkey" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L190", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_memberdiff" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L198", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_comparisonresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L205", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_notificationresultitem" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L214", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L220", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_notifyresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L227", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_generateimagesresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L233", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_versioninfo" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L241", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_buildingtypeinfo" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L249", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_memberroleinfo" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L256", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_postsuggestionskipreason" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L262", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "post_suggestions_schema" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L279", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_postsuggestionpreviewresult" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L284", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_postsuggestionstalereason" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L291", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_postsuggestionstaleentry" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/api/types.ts", - "source_location": "L298", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_api_types_ts", - "target": "api_types_postsuggestionapplyresult" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/buildingColors.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_buildingcolors_ts", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_grouppostconditions_ts", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "frontend_src_api_types_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "api_types_memberrole" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/images.py", - "source_location": "L12", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_generateimagesresponse", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/member.py", - "source_location": "L8", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_member", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_syncmatch", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/member.py", - "source_location": "L5", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_syncpreviewresponse", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_memberrole" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_memberrole" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L15", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege.py", - "source_location": "L8", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siege", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_siegestatus" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_siegestatus" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/buildingColors.ts", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_buildingcolors_ts", - "target": "api_types_buildingtype" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/building.py", - "source_location": "L7", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_building", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/board.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_boardresponse", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_positionresponse", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_buildinggroupresponse", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L3", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_buildingresponse", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L39", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_buildingtype" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L334", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L334", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L334", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/post_condition.py", - "source_location": "L9", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_postcondition", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege_member.py", - "source_location": "L9", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siegemember", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L40", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L40", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L40", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L40", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L40", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_member" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L40", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_member" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "api_types_syncmatch" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "api_types_syncapplyitem" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_grouppostconditions_ts", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/post_condition.py", - "source_location": "L10", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_postcondition", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L43", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L43", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L43", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L43", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L43", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L43", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_postcondition" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L19", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L19", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege.py", - "source_location": "L12", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siege", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege.py", - "source_location": "L11", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siege", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege.py", - "source_location": "L13", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siege", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/siege_member.py", - "source_location": "L10", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_siegemember", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L45", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L45", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L45", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L45", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L45", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_siege" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L45", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_siege" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_building", - "target": "api_types_positionresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_building", - "target": "api_types_buildinggroupresponse" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/building.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_building", - "target": "api_types_buildingresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L13", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L13", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L13", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/models/post.py", - "source_location": "L9", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_post", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L37", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L37", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L37", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L37", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L37", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_building" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L37", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_building" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "backend/app/schemas/siege_member.py", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_types_memberpreferencesummary" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_types_positionresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_types_buildinggroupresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_types_buildingresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "api_types_buildingresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/images.py", - "source_location": "L41", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_generateimagesresponse", - "target": "api_types_boardresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L382", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_boardresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L382", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_boardresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L382", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "api_types_boardresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_types_siegemember" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "api_types_attackdaypreviewresult" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "frontend_src_components_ui_table_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_table_table" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_table_tablebody" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_table_tablecell" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_table_tablehead" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_table_tablerow" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_checkbox_checkbox" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "frontend_src_components_ui_select_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_select_selectcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_select_selectitem" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_select_selecttrigger" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "frontend_src_components_ui_dialog_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_dialog_dialogcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_dialog_dialogheader" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_dialog_dialogtitle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_dialog_dialogfooter" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "ui_dialog_dialogdescription" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeMembersPage.tsx", - "source_location": "L41", - "weight": 1.0, - "confidence_score": 1.0, - "source": "api_types_siegemember", - "target": "pages_siegememberspage_attackdayselect" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/images.py", - "source_location": "L13", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_generateimagesresponse", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L20", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L20", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L20", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationbatchresponse", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L46", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L46", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L46", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L46", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L46", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_siegemember" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L46", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_siegemember" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L42", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedmember", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L42", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedassignment", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L42", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedreserve", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L42", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconfig", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L42", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_parsedpostconditions", - "target": "api_types_post" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L42", - "weight": 0.8, - "confidence_score": 0.5, - "source": "excel_import_import_excel_importstats", - "target": "api_types_post" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_types_validationissue" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_types_validationresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_types_validationresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "api_types_autofillpreviewresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "api_types_positionkey" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "api_types_memberdiff" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_types_notificationresultitem" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L16", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notificationresultitem", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "backend/app/api/notifications.py", - "source_location": "L16", - "weight": 0.8, - "confidence_score": 0.5, - "source": "api_types_notifyresponse", - "target": "api_types_notificationbatchresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "api_types_notifyresponse" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "api_types_postsuggestionpreviewresult" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "api_types_postsuggestionstaleentry" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L101", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "api_version_useversion" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Carousel.tsx", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_carousel_carousel", - "target": "components_carousel_carouselslide" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "components_carousel_carouselslide" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Carousel.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_carousel_carousel", - "target": "components_carousel_carouselprops" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Carousel.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_carousel_carousel", - "target": "pages_landingpage_colors" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "components_carousel_carousel" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L131", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "frontend_src_components_ui_dropdown_menu_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "ui_dropdown_menu_dropdownmenucontent" - }, - { - "relation": "calls", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ChangelogDropdown.tsx", - "source_location": "L103", - "weight": 1.0, - "context": "call", - "confidence_score": 1.0, - "source": "frontend_src_components_changelogdropdown_tsx", - "target": "components_changelogdropdown_hasunread" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "frontend_src_components_changelogdropdown_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "frontend_src_components_ui_dialog_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_dialog_dialogcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_dialog_dialogheader" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_dialog_dialogtitle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_dialog_dialogfooter" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "frontend_src_components_ui_table_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_table_table" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_table_tablebody" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_table_tablecell" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_table_tablehead" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_table_tablerow" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_button_button" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "frontend_src_components_ui_badge_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_badge_badge" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "ui_checkbox_checkbox" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "components_groupbytoggle_props" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "components_discordsyncmodal_confidencevariant" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/DiscordSyncModal.tsx", - "source_location": "L39", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_discordsyncmodal_tsx", - "target": "components_discordsyncmodal_confidence_label" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_components_discordsyncmodal_tsx" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/GroupByToggle.tsx", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_groupbytoggle_groupbytoggle", - "target": "components_groupbytoggle_props" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L34", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_groupbytoggle_props" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/GroupByToggle.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_groupbytoggle_groupbytoggle", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/GroupByToggle.tsx", - "source_location": "L39", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_groupbytoggle_groupbytoggle", - "target": "lib_utils_cn" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/GroupByToggle.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_groupbytoggle_groupbytoggle", - "target": "frontend_src_lib_grouppostconditions_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/GroupByToggle.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_groupbytoggle_groupbytoggle", - "target": "lib_grouppostconditions_groupbymode" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L34", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "components_groupbytoggle_groupbytoggle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "components_groupbytoggle_groupbytoggle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "components_groupbytoggle_groupbytoggle" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "frontend_src_context_authcontext_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "context_authcontext_useauth" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "components_layout_navlinkclass" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_layout_tsx", - "target": "components_layout_layout" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L10", - "weight": 1.0, - "source": "components_layout_navlinkclass", - "target": "lib_utils_cn" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/Layout.tsx", - "source_location": "L18", - "weight": 1.0, - "source": "components_layout_layout", - "target": "context_authcontext_useauth" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostsTab.tsx", - "source_location": "L329", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postrow", - "target": "components_poststab_findpostposition" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L30", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_outcomefilter" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_classification" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L42", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_priority_meta" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L64", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_getprioritymeta" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L70", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_skip_reason_label" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L82", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_stale_reason_label" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L104", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_tileconfig" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L159", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_classify" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L198", - "weight": 1.0, - "confidence_score": 1.0, - "source": "components_postsuggestionsmodal_changecell", - "target": "components_postsuggestionsmodal_classify" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L169", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_pill" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L185", - "weight": 1.0, - "source": "components_postsuggestionsmodal_pill", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L197", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_changecell" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L248", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_skipicon" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L259", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_conditioncell" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L290", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_summarytile" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L308", - "weight": 1.0, - "source": "components_postsuggestionsmodal_summarytile", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L345", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_stateloading" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L355", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_stateempty" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L379", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_statestaleconflict" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L476", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_expirycountdown" - }, - { - "relation": "calls", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L554", - "weight": 1.0, - "context": "call", - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "components_postsuggestionsmodal_useexpirycountdown" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/RequireAuth.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_requireauth_tsx", - "target": "frontend_src_context_authcontext_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/RequireAuth.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_requireauth_tsx", - "target": "context_authcontext_useauth" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/RequireAuth.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_requireauth_tsx", - "target": "components_requireauth_requireauth" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/RequireAuth.tsx", - "source_location": "L9", - "weight": 1.0, - "source": "components_requireauth_requireauth", - "target": "context_authcontext_useauth" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/SiegeLayout.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_siegelayout_tsx", - "target": "components_siegelayout_siegelayout" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_badge_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_badge_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_badge_tsx", - "target": "ui_badge_badgevariants" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L29", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_badge_tsx", - "target": "ui_badge_badgeprops" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L34", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_badge_tsx", - "target": "ui_badge_badge" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_components_ui_badge_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_components_ui_badge_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_components_ui_badge_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_components_ui_badge_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L41", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_components_ui_badge_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "frontend_src_components_ui_badge_tsx" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "ui_badge_badge", - "target": "ui_badge_badgevariants" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_badge_badge" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_badge_badge" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L21", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_badge_badge" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "ui_badge_badge" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L41", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_badge_badge" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "ui_badge_badge" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/ui/badge.tsx", - "source_location": "L36", - "weight": 1.0, - "source": "ui_badge_badge", - "target": "lib_utils_cn" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_button_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_button_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_button_tsx", - "target": "ui_button_buttonvariants" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_button_tsx", - "target": "ui_button_buttonprops" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/button.tsx", - "source_location": "L43", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_button_tsx", - "target": "ui_button_button" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L29", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "frontend_src_components_ui_button_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L35", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L29", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_button_button" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "ui_button_button" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/checkbox.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "ui_checkbox_checkbox", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/checkbox.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "ui_checkbox_checkbox", - "target": "lib_utils_cn" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_checkbox_checkbox" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_checkbox_checkbox" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L12", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "ui_checkbox_checkbox" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L32", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_checkbox_checkbox" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "frontend_src_components_ui_dialog_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "ui_dialog_dialogoverlay" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "ui_dialog_dialogcontent" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L50", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "ui_dialog_dialogheader" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L66", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "ui_dialog_dialogfooter" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L82", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "ui_dialog_dialogtitle" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L97", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dialog_tsx", - "target": "ui_dialog_dialogdescription" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_components_ui_dialog_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_components_ui_dialog_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_components_ui_dialog_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "ui_dialog_dialogcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_dialog_dialogcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_dialog_dialogcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_dialog_dialogcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "ui_dialog_dialogheader" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_dialog_dialogheader" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_dialog_dialogheader" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_dialog_dialogheader" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L56", - "weight": 1.0, - "source": "ui_dialog_dialogheader", - "target": "lib_utils_cn" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_dialog_dialogfooter" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_dialog_dialogfooter" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_dialog_dialogfooter" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/ui/dialog.tsx", - "source_location": "L72", - "weight": 1.0, - "source": "ui_dialog_dialogfooter", - "target": "lib_utils_cn" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "ui_dialog_dialogtitle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_dialog_dialogtitle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_dialog_dialogtitle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_dialog_dialogtitle" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_dialog_dialogdescription" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_dialog_dialogdescription" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L33", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_dialog_dialogdescription" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenusubtrigger" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L42", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenusubcontent" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L58", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenucontent" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L76", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenuitem" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L94", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenucheckboxitem" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L118", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenuradioitem" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L140", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenulabel" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L158", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenuseparator" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L170", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_dropdown_menu_tsx", - "target": "ui_dropdown_menu_dropdownmenushortcut" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/components/ui/dropdown-menu.tsx", - "source_location": "L176", - "weight": 1.0, - "source": "ui_dropdown_menu_dropdownmenushortcut", - "target": "lib_utils_cn" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/input.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_input_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/input.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_input_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/input.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_input_tsx", - "target": "ui_input_inputprops" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/input.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_input_tsx", - "target": "ui_input_input" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_components_ui_input_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_components_ui_input_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_components_ui_input_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_components_ui_input_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "frontend_src_components_ui_input_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L30", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_components_ui_input_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L37", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "ui_input_input" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_input_input" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_input_input" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "ui_input_input" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "ui_input_input" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L30", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_input_input" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/label.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_label_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/label.tsx", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_label_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/label.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_label_tsx", - "target": "ui_label_label" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "frontend_src_components_ui_label_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_components_ui_label_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_components_ui_label_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_components_ui_label_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "frontend_src_components_ui_label_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_components_ui_label_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "ui_label_label" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_label_label" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L24", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_label_label" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "ui_label_label" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "ui_label_label" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "ui_label_label" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "ui_select_selecttrigger" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L30", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "ui_select_selectscrollupbutton" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "ui_select_selectscrolldownbutton" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "ui_select_selectcontent" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L97", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "ui_select_selectlabel" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L109", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "ui_select_selectitem" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/select.tsx", - "source_location": "L131", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_select_tsx", - "target": "ui_select_selectseparator" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "frontend_src_components_ui_select_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_components_ui_select_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_components_ui_select_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_components_ui_select_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "frontend_src_components_ui_select_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "ui_select_selecttrigger" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_select_selecttrigger" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_select_selecttrigger" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_select_selecttrigger" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "ui_select_selecttrigger" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "ui_select_selectcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_select_selectcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_select_selectcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_select_selectcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "ui_select_selectcontent" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "ui_select_selectitem" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "ui_select_selectitem" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_select_selectitem" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_select_selectitem" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L8", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "ui_select_selectitem" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "ui_table_table" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L68", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "ui_table_tablehead" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "ui_table_tablebody" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L38", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "ui_table_tablefooter" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L53", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "ui_table_tablerow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L83", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "ui_table_tablecell" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/table.tsx", - "source_location": "L98", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_table_tsx", - "target": "ui_table_tablecaption" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "frontend_src_components_ui_table_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_components_ui_table_tsx" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "frontend_src_components_ui_table_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_table_table" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_table_table" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "ui_table_table" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_table_tablebody" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_table_tablebody" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "ui_table_tablebody" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_table_tablerow" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_table_tablerow" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "ui_table_tablerow" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_table_tablehead" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_table_tablehead" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "ui_table_tablehead" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "ui_table_tablecell" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "ui_table_tablecell" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L5", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "ui_table_tablecell" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/textarea.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_textarea_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/textarea.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_textarea_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/textarea.tsx", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_textarea_tsx", - "target": "ui_textarea_textareaprops" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/ui/textarea.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_components_ui_textarea_tsx", - "target": "ui_textarea_textarea" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L11", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_context_authcontext_tsx", - "target": "context_authcontext_authuser" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_context_authcontext_tsx", - "target": "context_authcontext_authcontextvalue" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_context_authcontext_tsx", - "target": "context_authcontext_authcontext" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_context_authcontext_tsx", - "target": "context_authcontext_authprovider" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/context/AuthContext.tsx", - "source_location": "L63", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_context_authcontext_tsx", - "target": "context_authcontext_useauth" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "frontend_src_context_authcontext_tsx" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L2", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "context_authcontext_useauth" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L11", - "weight": 1.0, - "source": "pages_landingpage_landingorsieges", - "target": "context_authcontext_useauth" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/buildingColors.ts", - "source_location": "L3", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_buildingcolors_ts", - "target": "lib_buildingcolors_buildingcolorclass" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/buildingColors.ts", - "source_location": "L49", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_buildingcolors_ts", - "target": "lib_buildingcolors_building_labels" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L54", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "frontend_src_lib_buildingcolors_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L55", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_lib_buildingcolors_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L54", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "lib_buildingcolors_building_labels" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L55", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "lib_buildingcolors_building_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_grouppostconditions_ts", - "target": "lib_grouppostconditions_groupbymode" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L20", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_grouppostconditions_ts", - "target": "lib_grouppostconditions_conditiongroup" - }, - { - "relation": "calls", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L46", - "weight": 1.0, - "context": "call", - "confidence_score": 1.0, - "source": "frontend_src_lib_grouppostconditions_ts", - "target": "lib_grouppostconditions_groupbylevel" - }, - { - "relation": "calls", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/groupPostConditions.ts", - "source_location": "L48", - "weight": 1.0, - "context": "call", - "confidence_score": 1.0, - "source": "frontend_src_lib_grouppostconditions_ts", - "target": "lib_grouppostconditions_groupbytype" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/useGroupByPreference.ts", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_usegroupbypreference_ts", - "target": "frontend_src_lib_grouppostconditions_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L304", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_lib_grouppostconditions_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L196", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_lib_grouppostconditions_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_lib_grouppostconditions_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L103", - "weight": 1.0, - "source": "pages_postspage_postrow", - "target": "frontend_src_lib_grouppostconditions_ts" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/useGroupByPreference.ts", - "source_location": "L9", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_usegroupbypreference_ts", - "target": "lib_grouppostconditions_groupbymode" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "lib_grouppostconditions_groupbymode" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/post-priority.ts", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_post_priority_ts", - "target": "lib_post_priority_prioritylabel" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/post-priority.ts", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_post_priority_ts", - "target": "lib_post_priority_prioritybadgecolor" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "lib_post_priority_prioritylabel" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/useGroupByPreference.ts", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_usegroupbypreference_ts", - "target": "lib_usegroupbypreference_valid_modes" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "frontend_src_lib_usegroupbypreference_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L70", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_lib_usegroupbypreference_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L278", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "frontend_src_lib_usegroupbypreference_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L57", - "weight": 1.0, - "source": "pages_postspage_postrow", - "target": "frontend_src_lib_usegroupbypreference_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/lib/utils.ts", - "source_location": "L4", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_lib_utils_ts", - "target": "lib_utils_cn" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L22", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L54", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "frontend_src_lib_utils_ts" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L755", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "lib_utils_cn" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "lib_utils_cn" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L102", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeSettingsPage.tsx", - "source_location": "L501", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegesettingspage_tsx", - "target": "lib_utils_cn" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "lib_utils_cn" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L29", - "weight": 1.0, - "source": "pages_comparisonpage_positiontag", - "target": "lib_utils_cn" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L27", - "weight": 1.0, - "source": "pages_systempage_sectionpanel", - "target": "lib_utils_cn" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L67", - "weight": 1.0, - "source": "pages_systempage_datarow", - "target": "lib_utils_cn" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L58", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_role_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "pages_boardpage_role_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L65", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_role_priority" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L72", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_role_colors" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L79", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_role_badge_colors" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L87", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_role_chip_colors" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L94", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_power_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L28", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "pages_boardpage_power_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L103", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_building_type_order" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L254", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_draggablememberrow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L322", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_memberdragoverlay" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L347", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_rolefilter" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L349", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_role_filter_options" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L357", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_memberbucket" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L457", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_buildingtablerow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L553", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_buildingtypesection" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L679", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_conditionaldndcontext" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/BoardPage.tsx", - "source_location": "L711", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_boardpage_boardpage", - "target": "pages_boardpage_activetab" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "pages_comparisonpage_formatposition" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L36", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_positiontag", - "target": "pages_comparisonpage_formatposition" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "pages_comparisonpage_positiontag" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/ComparisonPage.tsx", - "source_location": "L54", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_comparisonpage_comparisonpage", - "target": "pages_comparisonpage_memberpositionscell" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L10", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_landingorsieges" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_slides" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L68", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_shieldicon" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L88", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_githubicon" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L108", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_checkicon" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L128", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_externallinkicon" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L150", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_colors" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LandingPage.tsx", - "source_location": "L157", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_landingpage_tsx", - "target": "pages_landingpage_landingpage" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L7", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_loginpage_loginpage", - "target": "pages_loginpage_error_messages" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L15", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_loginpage_loginpage", - "target": "pages_loginpage_membership_errors" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/LoginPage.tsx", - "source_location": "L18", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_loginpage_loginpage", - "target": "pages_loginpage_mobilebanner" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MemberDetailPage.tsx", - "source_location": "L41", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_memberdetailpage_tsx", - "target": "pages_memberdetailpage_role_options" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L43", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "pages_memberspage_rolebadgevariant" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/MembersPage.tsx", - "source_location": "L45", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_memberspage_memberspage", - "target": "pages_memberspage_role_variants" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L30", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "pages_postprioritiespage_descriptioncell" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostPrioritiesPage.tsx", - "source_location": "L64", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_postprioritiespage_tsx", - "target": "pages_postprioritiespage_tab" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/PostsPage.tsx", - "source_location": "L30", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_postspage_postspage", - "target": "pages_postspage_postrow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "pages_siegecreatepage_nexttuesdayfrom" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L43", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_suggestnextsiegedate", - "target": "pages_siegecreatepage_nexttuesdayfrom" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L27", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "pages_siegecreatepage_formatdatelocal" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L41", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_siegecreatepage_suggestnextsiegedate", - "target": "pages_siegecreatepage_formatdatelocal" - }, - { - "relation": "calls", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegeCreatePage.tsx", - "source_location": "L60", - "weight": 1.0, - "context": "call", - "confidence_score": 1.0, - "source": "pages_siegecreatepage_siegecreatepage", - "target": "pages_siegecreatepage_suggestnextsiegedate" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L17", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "pages_siegespage_statusbadgevariant" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "pages_siegespage_status_variants" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L25", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "pages_siegespage_status_labels" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SiegesPage.tsx", - "source_location": "L31", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_pages_siegespage_tsx", - "target": "pages_siegespage_siegespage" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L6", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "pages_systempage_ui_libraries" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "pages_systempage_sectionpanel" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L47", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "pages_systempage_datarow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/pages/SystemPage.tsx", - "source_location": "L80", - "weight": 1.0, - "confidence_score": 1.0, - "source": "pages_systempage_systempage", - "target": "pages_systempage_libraryrow" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "frontend/src/types/changelog.d.ts", - "source_location": "L13", - "weight": 1.0, - "confidence_score": 1.0, - "source": "frontend_src_types_changelog_d_ts", - "target": "types_changelog_d_changelogentry" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "scripts_bootstrap_excel_import_ps1" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "scripts_bootstrap_excel_import_ps1", - "target": "runbook_azure_keyvault" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "scripts_bootstrap_excel_import_ps1", - "target": "infra_readme_postgres_flexible_server" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "scripts_bootstrap_images_ps1" - }, - { - "relation": "semantically_similar_to", - "confidence": "AMBIGUOUS", - "confidence_score": 0.7, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 0.7, - "source": "concept_bootstrap_images_script", - "target": "scripts_bootstrap_images_ps1" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L160", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parsedmember" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L169", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parsedassignment" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L178", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parsedreserve" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L185", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parsedpostconfig" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L192", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parsedpostconditions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L198", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_importstats" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L224", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parse_filename_date" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L236", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_map_role" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L241", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_map_building_alias" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L265", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parse_members_sheet" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L337", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parse_assignments_sheet" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L445", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parse_reserves_sheet" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L489", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parse_posts_sheet_config" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L534", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_parse_posts_sheet_conditions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L570", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_build_group_structure" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L592", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_compute_building_group_structure" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L677", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_infer_building_level" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L719", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_create_building_with_groups_and_positions" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1069", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_import_file" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1146", - "weight": 1.0, - "confidence_score": 1.0, - "source": "scripts_excel_import_import_excel_py", - "target": "excel_import_import_excel_collect_xlsm_files" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_1", - "target": "scripts_excel_import_import_excel_py" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L326", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_parse_members_sheet", - "target": "excel_import_import_excel_parsedmember" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L433", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_parse_assignments_sheet", - "target": "excel_import_import_excel_parsedassignment" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L480", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_parse_reserves_sheet", - "target": "excel_import_import_excel_parsedreserve" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L525", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_parse_posts_sheet_config", - "target": "excel_import_import_excel_parsedpostconfig" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L557", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_parse_posts_sheet_conditions", - "target": "excel_import_import_excel_parsedpostconditions" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L784", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_importstats" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L787", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_parse_filename_date" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L225", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_225", - "target": "excel_import_import_excel_parse_filename_date" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L843", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_map_role" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L237", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_237", - "target": "excel_import_import_excel_map_role" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L402", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_parse_assignments_sheet", - "target": "excel_import_import_excel_map_building_alias" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L242", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_242", - "target": "excel_import_import_excel_map_building_alias" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L814", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_parse_members_sheet" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L266", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_266", - "target": "excel_import_import_excel_parse_members_sheet" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L815", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_parse_assignments_sheet" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L338", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_338", - "target": "excel_import_import_excel_parse_assignments_sheet" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L816", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_parse_reserves_sheet" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L446", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_446", - "target": "excel_import_import_excel_parse_reserves_sheet" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L823", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_parse_posts_sheet_config" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L490", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_490", - "target": "excel_import_import_excel_parse_posts_sheet_config" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L824", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_parse_posts_sheet_conditions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L535", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_535", - "target": "excel_import_import_excel_parse_posts_sheet_conditions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L571", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_571", - "target": "excel_import_import_excel_build_group_structure" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L929", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_compute_building_group_structure" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L597", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_597", - "target": "excel_import_import_excel_compute_building_group_structure" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L934", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_infer_building_level" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L678", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_678", - "target": "excel_import_import_excel_infer_building_level" - }, - { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L935", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_import_file", - "target": "excel_import_import_excel_create_building_with_groups_and_positions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L727", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_727", - "target": "excel_import_import_excel_create_building_with_groups_and_positions" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L781", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_781", - "target": "excel_import_import_excel_import_file" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1073", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_1073", - "target": "excel_import_import_excel_import_file" - }, - { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "scripts/excel-import/import_excel.py", - "source_location": "L1147", - "weight": 1.0, - "confidence_score": 1.0, - "source": "excel_import_import_excel_rationale_1147", - "target": "excel_import_import_excel_collect_xlsm_files" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CHANGELOG.md", - "source_location": null, - "weight": 1.0, - "source": "changelog_v120", - "target": "changelog_suggest_post_assignments" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CHANGELOG.md", - "source_location": null, - "weight": 1.0, - "source": "changelog_v120", - "target": "changelog_group_post_conditions" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CHANGELOG.md", - "source_location": null, - "weight": 1.0, - "source": "changelog_v120", - "target": "changelog_rate_limited_discord_oauth" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CHANGELOG.md", - "source_location": null, - "weight": 0.8, - "source": "changelog_v120", - "target": "changelog_v110" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "README.md", - "source_location": null, - "weight": 0.7, - "source": "readme", - "target": "changelog_v120" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CHANGELOG.md", - "source_location": null, - "weight": 0.8, - "source": "changelog_v110", - "target": "changelog_v100" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "weight": 0.9, - "source": "post_suggestions_readme", - "target": "changelog_suggest_post_assignments" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 0.9, - "source": "post_suggestions_plan", - "target": "changelog_suggest_post_assignments" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "CHANGELOG.md", - "source_location": null, - "weight": 0.8, - "source": "changelog_rate_limited_discord_oauth", - "target": "backend_slowapi" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "CHANGELOG.md", - "source_location": null, - "weight": 0.8, - "source": "changelog_rate_limited_discord_oauth", - "target": "claude_discord_oauth2" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "claude_backend_service" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "claude_frontend_service" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "claude_bot_service" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "claude_discord_oauth2" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "claude_postgresql" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "claude_alembic" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "claude_playwright" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "impl_plan" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_project_overview", - "target": "wdd" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 0.8, - "source": "component_versioning_plan", - "target": "claude_project_overview" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "README.md", - "source_location": null, - "weight": 0.8, - "source": "readme", - "target": "claude_project_overview" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/experiments/graphify-dry-run.md", - "source_location": null, - "weight": 0.8, - "source": "graphify_dryrun", - "target": "claude_project_overview" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_backend_service", - "target": "backend_fastapi" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_backend_service", - "target": "backend_sqlalchemy" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_backend_service", - "target": "claude_alembic" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_backend_service", - "target": "claude_postgresql" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_frontend_service", - "target": "claude_backend_service" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 1.0, - "source": "claude_bot_service", - "target": "claude_backend_service" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 0.8, - "source": "component_versioning_backend_version", - "target": "claude_backend_service" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 0.8, - "source": "component_versioning_frontend_version", - "target": "claude_frontend_service" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 0.9, - "source": "discord_auth_botclient_get_member", - "target": "claude_bot_service" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 0.8, - "source": "component_versioning_bot_version", - "target": "claude_bot_service" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 0.9, - "source": "wdd_notification_flow", - "target": "claude_bot_service" - }, - { - "relation": "semantically_similar_to", - "confidence": "INFERRED", - "confidence_score": 0.95, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 0.9, - "source": "wdd_discord_auth", - "target": "claude_discord_oauth2" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "docs/mockups/mockup-login.html", - "source_location": null, - "weight": 0.7, - "source": "mockup_login", - "target": "claude_discord_oauth2" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "weight": 0.8, - "source": "runbook", - "target": "claude_alembic" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_vps_wiki", - "target": "claude_alembic" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "weight": 0.8, - "source": "claude_alembic", - "target": "infra_readme_postgres_flexible_server" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan_phase5", - "target": "claude_playwright" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.95, - "source_file": "CLAUDE.md", - "source_location": null, - "weight": 0.9, - "source": "claude_playwright", - "target": "backend_playwright_dep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercompose_stack", - "target": "dockercompose_postgres" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercompose_stack", - "target": "dockercompose_backend" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercompose_stack", - "target": "dockercompose_frontend" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercompose_stack", - "target": "dockercompose_bot" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.prod.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercomposeprod_overlay", - "target": "dockercompose_stack" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "README.md", - "source_location": null, - "weight": 1.0, - "source": "readme", - "target": "dockercompose_stack" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Getting-Started.md", - "source_location": null, - "weight": 1.0, - "source": "getting_started_wiki", - "target": "dockercompose_stack" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_vps_wiki", - "target": "dockercompose_stack" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercompose_backend", - "target": "dockercompose_postgres" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercompose_bot", - "target": "dockercompose_postgres" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docker-compose.yml", - "source_location": null, - "weight": 1.0, - "source": "dockercompose_frontend", - "target": "dockercompose_backend" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "backend/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "backend_requirements", - "target": "backend_fastapi" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "backend/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "backend_requirements", - "target": "backend_sqlalchemy" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "backend/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "backend_requirements", - "target": "backend_asyncpg" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "backend/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "backend_requirements", - "target": "backend_pyjwt" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "backend/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "backend_requirements", - "target": "backend_slowapi" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "backend/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "backend_requirements", - "target": "backend_playwright_dep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "backend/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "backend_requirements", - "target": "backend_otel" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 0.9, - "source": "discord_auth_get_current_user", - "target": "backend_fastapi" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "excel_import_readme_scripts", - "target": "backend_asyncpg" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "weight": 0.85, - "source": "excel_import_readme_import_members_py", - "target": "backend_asyncpg" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 1.0, - "source": "discord_auth_get_current_user", - "target": "backend_pyjwt" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 1.0, - "source": "discord_auth_jwt_cookie", - "target": "backend_pyjwt" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "weight": 0.9, - "source": "runbook_app_insights", - "target": "backend_otel" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "bot/requirements-dev.txt", - "source_location": null, - "weight": 1.0, - "source": "bot_requirements_dev", - "target": "bot_requirements" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "bot/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "bot_requirements", - "target": "bot_discordpy" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "bot/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "bot_requirements", - "target": "bot_fastapi" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan_phase5", - "target": "bot_discordpy" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_phase0" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_phase1" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_phase2" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_phase3" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_phase4" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_phase5" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_phase6" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "impl_plan_buildingtypeconfig" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan", - "target": "wdd" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 0.8, - "source": "impl_plan_phase1", - "target": "wdd_siege_model" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan_phase4", - "target": "wdd_validation_rules" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan_phase4", - "target": "wdd_autofill_algorithm" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/IMPLEMENTATION_PLAN.md", - "source_location": null, - "weight": 1.0, - "source": "impl_plan_phase4", - "target": "wdd_attack_day_algorithm" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 0.9, - "source": "wdd", - "target": "impl_plan_buildingtypeconfig" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "docs/siege_levels.md", - "source_location": null, - "weight": 0.8, - "source": "siege_levels", - "target": "impl_plan_buildingtypeconfig" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "weight": 1.0, - "source": "runbook", - "target": "runbook_azure_container_apps" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "weight": 1.0, - "source": "runbook", - "target": "runbook_azure_keyvault" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "weight": 1.0, - "source": "runbook", - "target": "runbook_azure_postgresql" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "weight": 1.0, - "source": "runbook", - "target": "runbook_app_insights" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/RUNBOOK.md", - "source_location": null, - "weight": 1.0, - "source": "runbook", - "target": "runbook_log_analytics" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_keyvault_bicep", - "target": "runbook_azure_keyvault" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_siege_api", - "target": "runbook_azure_keyvault" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_siege_bot", - "target": "runbook_azure_keyvault" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "runbook_azure_keyvault" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "concept_managed_identity", - "target": "runbook_azure_keyvault" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "runbook_log_analytics" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.85, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 0.85, - "source": "runbook_log_analytics", - "target": "concept_app_insights" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_log_analytics_bicep", - "target": "runbook_log_analytics" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_siege_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_building_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_member_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_position_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_post_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_postcondition_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_validation_rules" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_autofill_algorithm" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_attack_day_algorithm" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_discord_auth" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd", - "target": "wdd_notification_flow" - }, - { - "relation": "shares_data_with", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd_siege_model", - "target": "wdd_building_model" - }, - { - "relation": "shares_data_with", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd_building_model", - "target": "wdd_position_model" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "docs/siege_levels.md", - "source_location": null, - "weight": 0.8, - "source": "siege_levels", - "target": "wdd_building_model" - }, - { - "relation": "shares_data_with", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd_position_model", - "target": "wdd_member_model" - }, - { - "relation": "shares_data_with", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 0.9, - "source": "wdd_member_model", - "target": "wdd_postcondition_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 0.9, - "source": "post_suggestions_plan", - "target": "wdd_member_model" - }, - { - "relation": "shares_data_with", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/WEB_DESIGN_DOCUMENT.md", - "source_location": null, - "weight": 1.0, - "source": "wdd_post_model", - "target": "wdd_postcondition_model" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "weight": 0.8, - "source": "post_suggestions_readme", - "target": "wdd_post_model" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 0.9, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 0.9, - "source": "post_suggestions_plan", - "target": "wdd_post_model" - }, - { - "relation": "conceptually_related_to", - "confidence": "EXTRACTED", - "confidence_score": 0.85, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 0.8, - "source": "post_suggestions_plan", - "target": "wdd_autofill_algorithm" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 0.8, - "source": "post_suggestions_service", - "target": "wdd_autofill_algorithm" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 1.0, - "source": "discord_auth_impl_plan", - "target": "wdd_discord_auth" - }, - { - "relation": "imports", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "frontend/src/components/PostSuggestionsModal.tsx", - "source_location": "L14", - "weight": 1.0, - "confidence_score": 1.0, - "source": "post_suggestions_readme", - "target": "post_suggestions_schema" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_readme", - "target": "post_suggestions_difflist" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_readme", - "target": "post_suggestions_assignmententry" - }, - { - "relation": "conceptually_related_to", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "weight": 0.9, - "source": "post_suggestions_readme", - "target": "post_suggestions_plan" - }, - { - "relation": "shares_data_with", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_difflist", - "target": "post_suggestions_assignmententry" - }, - { - "relation": "semantically_similar_to", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "docs/design-refs/post-suggestions/README.md", - "source_location": null, - "weight": 0.9, - "source": "post_suggestions_assignmententry", - "target": "post_suggestions_schema" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", - "source_location": null, - "weight": 1.0, - "source": "public_launch_plan", - "target": "mockup_landing" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", - "source_location": null, - "weight": 1.0, - "source": "public_launch_plan", - "target": "mockup_login" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", - "source_location": null, - "weight": 1.0, - "source": "public_launch_plan", - "target": "self_host_anywhere" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/plans/public-launch-self-hostable-and-landing-page.md", - "source_location": null, - "weight": 1.0, - "source": "public_launch_plan", - "target": "self_host_azure" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "README.md", - "source_location": null, - "weight": 1.0, - "source": "readme", - "target": "self_host_anywhere" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "README.md", - "source_location": null, - "weight": 1.0, - "source": "readme", - "target": "self_host_azure" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 1.0, - "source": "discord_auth_impl_plan", - "target": "discord_auth_get_current_user" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 1.0, - "source": "discord_auth_impl_plan", - "target": "discord_auth_botclient_get_member" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-04-08-discord-auth-implementation.md", - "source_location": null, - "weight": 1.0, - "source": "discord_auth_impl_plan", - "target": "discord_auth_jwt_cookie" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 1.0, - "source": "component_versioning_plan", - "target": "component_versioning_backend_version" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 1.0, - "source": "component_versioning_plan", - "target": "component_versioning_bot_version" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 1.0, - "source": "component_versioning_plan", - "target": "component_versioning_frontend_version" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 1.0, - "source": "component_versioning_plan", - "target": "component_versioning_ci_gate" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-08-component-versioning.md", - "source_location": null, - "weight": 1.0, - "source": "component_versioning_plan", - "target": "contributing" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_plan", - "target": "post_suggestions_service" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_plan", - "target": "post_suggestions_api" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_plan", - "target": "post_suggestions_schema" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_plan", - "target": "post_suggestions_greedy_algo" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_service", - "target": "post_suggestions_greedy_algo" - }, - { - "relation": "calls", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_api", - "target": "post_suggestions_service" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "docs/superpowers/plans/2026-05-09-post-suggestions.md", - "source_location": null, - "weight": 1.0, - "source": "post_suggestions_api", - "target": "post_suggestions_schema" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CONTRIBUTING.md", - "source_location": null, - "weight": 1.0, - "source": "contributing", - "target": "readme" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "README.md", - "source_location": null, - "weight": 1.0, - "source": "readme", - "target": "code_of_conduct" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CONTRIBUTING.md", - "source_location": null, - "weight": 1.0, - "source": "contributing", - "target": "code_of_conduct" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "CONTRIBUTING.md", - "source_location": null, - "weight": 1.0, - "source": "contributing", - "target": "support" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_main_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_registry_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_log_analytics_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_app_insights_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_postgres_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_keyvault_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_container_env_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "infra_readme_container_apps_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_infrastructure", - "target": "self_host_azure_wiki" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_main_bicep", - "target": "infra_readme_registry_bicep" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_main_bicep", - "target": "infra_readme_log_analytics_bicep" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_main_bicep", - "target": "infra_readme_app_insights_bicep" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_main_bicep", - "target": "infra_readme_postgres_bicep" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_main_bicep", - "target": "infra_readme_keyvault_bicep" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_main_bicep", - "target": "infra_readme_container_env_bicep" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_main_bicep", - "target": "infra_readme_container_apps_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_main_bicep", - "target": "infra_readme_main_bicepparam" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_main_bicep", - "target": "infra_readme_main_prod_bicepparam" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_main_bicep" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_registry_bicep", - "target": "infra_readme_azure_container_registry" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 0.85, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.85, - "source": "infra_readme_registry_bicep", - "target": "infra_readme_weekly_purge_task" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_app_insights_bicep", - "target": "concept_app_insights" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_postgres_bicep", - "target": "infra_readme_postgres_flexible_server" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_container_env_bicep", - "target": "infra_readme_container_apps_environment" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_container_apps_bicep", - "target": "infra_readme_siege_api" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_container_apps_bicep", - "target": "infra_readme_siege_bot" - }, - { - "relation": "implements", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_container_apps_bicep", - "target": "infra_readme_siege_frontend" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_container_apps_bicep" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_azure_container_registry" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.95, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.95, - "source": "infra_readme_siege_api", - "target": "infra_readme_postgres_flexible_server" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.9, - "source_file": "infra/README.md", - "source_location": null, - "weight": 0.9, - "source": "infra_readme_siege_bot", - "target": "infra_readme_postgres_flexible_server" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "weight": 0.8, - "source": "self_host_vps_wiki", - "target": "infra_readme_postgres_flexible_server" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_postgres_flexible_server" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_weekly_purge_task", - "target": "infra_readme_siege_api" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_siege_api" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_weekly_purge_task", - "target": "infra_readme_siege_bot" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_siege_bot" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "infra/README.md", - "source_location": null, - "weight": 1.0, - "source": "infra_readme_weekly_purge_task", - "target": "infra_readme_siege_frontend" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_siege_frontend" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "infra_readme_main_prod_bicepparam" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/excel-import/README.md", - "source_location": null, - "weight": 1.0, - "source": "excel_import_readme_scripts", - "target": "excel_import_readme_seed_db_py" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/excel-import/README.md", - "source_location": null, - "weight": 1.0, - "source": "excel_import_readme_scripts", - "target": "excel_import_readme_run_migrations_sh" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/excel-import/README.md", - "source_location": null, - "weight": 1.0, - "source": "excel_import_readme_scripts", - "target": "excel_import_readme_import_members_py" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "excel_import_readme_scripts", - "target": "requirements_openpyxl" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "excel_import_readme_scripts", - "target": "requirements_sqlalchemy" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "weight": 1.0, - "source": "excel_import_readme_scripts", - "target": "requirements_python_dotenv" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.85, - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "weight": 0.85, - "source": "excel_import_readme_import_members_py", - "target": "requirements_sqlalchemy" - }, - { - "relation": "references", - "confidence": "INFERRED", - "confidence_score": 0.75, - "source_file": "scripts/excel-import/requirements.txt", - "source_location": null, - "weight": 0.75, - "source": "excel_import_readme_import_members_py", - "target": "requirements_openpyxl" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/FAQ.md", - "source_location": null, - "weight": 1.0, - "source": "faq_wiki", - "target": "self_host_vps_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/FAQ.md", - "source_location": null, - "weight": 1.0, - "source": "faq_wiki", - "target": "self_host_azure_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Getting-Started.md", - "source_location": null, - "weight": 1.0, - "source": "getting_started_wiki", - "target": "faq_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Home.md", - "source_location": null, - "weight": 1.0, - "source": "home_wiki", - "target": "faq_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/_Sidebar.md", - "source_location": null, - "weight": 1.0, - "source": "sidebar_wiki", - "target": "faq_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Getting-Started.md", - "source_location": null, - "weight": 1.0, - "source": "getting_started_wiki", - "target": "self_host_vps_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Getting-Started.md", - "source_location": null, - "weight": 1.0, - "source": "getting_started_wiki", - "target": "self_host_azure_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Home.md", - "source_location": null, - "weight": 1.0, - "source": "home_wiki", - "target": "getting_started_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/_Sidebar.md", - "source_location": null, - "weight": 1.0, - "source": "sidebar_wiki", - "target": "getting_started_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Home.md", - "source_location": null, - "weight": 1.0, - "source": "home_wiki", - "target": "self_host_vps_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Home.md", - "source_location": null, - "weight": 1.0, - "source": "home_wiki", - "target": "self_host_azure_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Home.md", - "source_location": null, - "weight": 1.0, - "source": "home_wiki", - "target": "concept_rsl_siege_manager" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/_Sidebar.md", - "source_location": null, - "weight": 1.0, - "source": "sidebar_wiki", - "target": "home_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "self_host_vps_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_vps_wiki", - "target": "concept_discord_oauth2" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Any-VPS.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_vps_wiki", - "target": "concept_caddy_reverse_proxy" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/_Sidebar.md", - "source_location": null, - "weight": 1.0, - "source": "sidebar_wiki", - "target": "self_host_vps_wiki" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "concept_github_actions" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "concept_deploy_workflow" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "concept_infra_deploy_workflow" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "concept_managed_identity" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "concept_app_insights" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "concept_bootstrap_images_script" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/Self-Host-on-Azure.md", - "source_location": null, - "weight": 1.0, - "source": "self_host_azure_wiki", - "target": "concept_discord_oauth2" - }, - { - "relation": "references", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "wiki/_Sidebar.md", - "source_location": null, - "weight": 1.0, - "source": "sidebar_wiki", - "target": "self_host_azure_wiki" - } - ], - "hyperedges": [], - "built_at_commit": "6085fd660692d0eade02696128e186f03f2c8f5e" -} \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/graphify-out/manifest.json b/evaluations/rsl-siege-manager/graphify-out/manifest.json deleted file mode 100644 index 87e0f395..00000000 --- a/evaluations/rsl-siege-manager/graphify-out/manifest.json +++ /dev/null @@ -1,918 +0,0 @@ -{ - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\env.py": { - "mtime": 1778710280.615952, - "hash": "731374a0c60b7a3d7ab4fe969af77cdc" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0001_initial_schema.py": { - "mtime": 1778710280.6174564, - "hash": "89da22558cc25f69a85fdb95c5226094" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0002_add_preview_columns.py": { - "mtime": 1778710280.6174564, - "hash": "7272088a42b67a8e4808eb3c9b7dd696" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0003_make_siege_date_nullable.py": { - "mtime": 1778710280.6174564, - "hash": "2e9c3427061e4be701fe13af654dff62" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0004_add_post_priority_config.py": { - "mtime": 1778710280.6174564, - "hash": "6dfb516e649bc98b4af75c6d72217b55" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0005_add_description_to_post_priority_config.py": { - "mtime": 1778710280.6184616, - "hash": "610068cb10304ae4dbcc7bc71a32e78c" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0006_power_level_and_drop_sort_value.py": { - "mtime": 1778710280.6184616, - "hash": "8182ba42f31e35ef28f5c4d9dabfde1c" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0007_fix_group_number_max.py": { - "mtime": 1778710280.6184616, - "hash": "4b47bdeebb46156e514a5b067df94235" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0008_add_matched_condition_id_to_position.py": { - "mtime": 1778710280.6184616, - "hash": "c954ca95fdadd4a7ef20ffa633d12fed" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0009_add_discord_id_to_member.py": { - "mtime": 1778710280.6194618, - "hash": "dcf300cf8ed80c1b8b3825bcca67e245" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0010_add_last_seen_changelog_at_to_member.py": { - "mtime": 1778710280.6194618, - "hash": "611bcc51cacb45fa38a397483251978e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\alembic\\versions\\0011_add_post_suggest_preview.py": { - "mtime": 1778710280.6194618, - "hash": "c2911c522068032d232ebdda418ae402" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\config.py": { - "mtime": 1778710280.6260061, - "hash": "af7166f36bc6603c51a31821b4169166" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\main.py": { - "mtime": 1778710280.6275196, - "hash": "ef3a111d022f595379cdfc5e4949daf0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\middleware.py": { - "mtime": 1778710280.6275196, - "hash": "4f8742627daa35dd41d30076e24f6215" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\rate_limit.py": { - "mtime": 1778710280.631044, - "hash": "d19e5a629177df85c43e3c14f4dc0d46" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\telemetry.py": { - "mtime": 1778710280.639125, - "hash": "0c58ed46b46a65c553da095108b27bfd" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\__init__.py": { - "mtime": 1778710280.6194618, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\attack_day.py": { - "mtime": 1778710280.6204622, - "hash": "03d01cbf514354d406ed91fbc65b35a1" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\auth.py": { - "mtime": 1778710280.6204622, - "hash": "a5f33d846d98152318daec3a46d0d248" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\autofill.py": { - "mtime": 1778710280.6204622, - "hash": "a09d58b4a1d3c5af8f5c8a3ba6a7029e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\board.py": { - "mtime": 1778710280.621461, - "hash": "aaeb8712e563ba3dec103df4a3fc04ac" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\buildings.py": { - "mtime": 1778710280.621461, - "hash": "ffdd155eb162bceae062773746e4a736" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\changelog.py": { - "mtime": 1778710280.621461, - "hash": "46c813936a455f15a7b9c81d21193278" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\comparison.py": { - "mtime": 1778710280.621461, - "hash": "ddca1ab6be65dc3372ad48159b99f019" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\config.py": { - "mtime": 1778710280.6224627, - "hash": "4cfef35cbf17cda161b15128a218884a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\discord_sync.py": { - "mtime": 1778710280.6224627, - "hash": "4af25fe7f78cdd7ed0a19b43a6c0d944" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\health.py": { - "mtime": 1778710280.6224627, - "hash": "7e3eb64485f05fe2e50e5681ca1f0932" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\images.py": { - "mtime": 1778710280.6224627, - "hash": "bdbf492718a5d11dd6b98c1d639931ac" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\lifecycle.py": { - "mtime": 1778710280.6234608, - "hash": "224fbb28b68c1d85ac358d96f4d8d307" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\members.py": { - "mtime": 1778710280.6234608, - "hash": "fade885c4c9b9ac20cccbc9b1022ea02" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\notifications.py": { - "mtime": 1778710280.6234608, - "hash": "ff2badd250e6e4abd60f76c17bf197a9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\posts.py": { - "mtime": 1778710280.6234608, - "hash": "8f342e23f193f2ba528ee0f2ea924710" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\post_priority_config.py": { - "mtime": 1778710280.6234608, - "hash": "6cbb8addbb8fbbf729b2938cd64e4077" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\post_suggestions.py": { - "mtime": 1778710280.6234608, - "hash": "57ba4074cf0d1413e5604e6c20c458ba" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\reference.py": { - "mtime": 1778710280.6249774, - "hash": "e723050f84384dc9adcdb7796fd5a105" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\sieges.py": { - "mtime": 1778710280.6249774, - "hash": "e2f544c55968478ef4b80943fcda6ccc" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\siege_members.py": { - "mtime": 1778710280.6249774, - "hash": "f2eb1fd29b959b826008f6a627da9c0d" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\validation.py": { - "mtime": 1778710280.6249774, - "hash": "05d95e278dfb5f2da15598253b2ec32e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\version.py": { - "mtime": 1778710280.6249774, - "hash": "72b877fef624fbab48f6170475e4482b" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\api\\__init__.py": { - "mtime": 1778710280.6204622, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\base.py": { - "mtime": 1778710280.6260061, - "hash": "16deb2759f7de2cf86f328dce6b2d38b" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\seeds.py": { - "mtime": 1778710280.6260061, - "hash": "c1238d95afe54852c9f8e4946bcd1184" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\session.py": { - "mtime": 1778710280.6260061, - "hash": "d83e8d560833942da095e4e77ef715a0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\db\\__init__.py": { - "mtime": 1778710280.6260061, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\dependencies\\auth.py": { - "mtime": 1778710280.6260061, - "hash": "1e13ad83f41440240858e379bc350e32" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\dependencies\\__init__.py": { - "mtime": 1778710280.6260061, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building.py": { - "mtime": 1778710280.6275196, - "hash": "264dd9c1b5b9af8261e39ef40bb56d0d" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building_group.py": { - "mtime": 1778710280.6285377, - "hash": "9e4fe949454ac06e8919c54d17cd053f" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\building_type_config.py": { - "mtime": 1778710280.6285377, - "hash": "8d46f6dce4eefc61342e1a5084563f76" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\enums.py": { - "mtime": 1778710280.6285377, - "hash": "bbcd730b23b6ae966f00a7b209dfa1ba" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\member.py": { - "mtime": 1778710280.6285377, - "hash": "00c8c2af6e5087bcdf9b485d8f32afab" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\member_post_preference.py": { - "mtime": 1778710280.6295295, - "hash": "9b9b1f5de349977ad8897398d6698ef8" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\notification_batch.py": { - "mtime": 1778710280.6295295, - "hash": "3ad5726f0ca19a456eb02ac12dbb4f89" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\notification_batch_result.py": { - "mtime": 1778710280.6295295, - "hash": "c4fd788d9d88b1b994a35cf770b7d875" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\position.py": { - "mtime": 1778710280.6300344, - "hash": "d1bafc8772229db93351d7e179c15ea3" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post.py": { - "mtime": 1778710280.6300344, - "hash": "6d62df6899ba21737f61bb917210dad0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_active_condition.py": { - "mtime": 1778710280.6300344, - "hash": "ab9b5ba959ad8c87635a5565cc7a6857" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_condition.py": { - "mtime": 1778710280.6300344, - "hash": "9fc05e2a8819db37bc7bd224f8c2db67" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\post_priority_config.py": { - "mtime": 1778710280.6300344, - "hash": "21b1c5860d8e42fef07463b5bf52ceab" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\siege.py": { - "mtime": 1778710280.631044, - "hash": "ac548c74c451dca2c84d9d039de46b6a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\siege_member.py": { - "mtime": 1778710280.631044, - "hash": "24f74c67df2a8375175a818e2ef592be" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\models\\__init__.py": { - "mtime": 1778710280.6275196, - "hash": "002c14a2213747661b77b5a30b8d3110" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\attack_day.py": { - "mtime": 1778710280.631044, - "hash": "6636af44aa1f3f3079f864b3c8bb9cac" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\autofill.py": { - "mtime": 1778710280.6320436, - "hash": "261012c1a7cdae9c401576016a1e0535" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\board.py": { - "mtime": 1778710280.6320436, - "hash": "c69579e0609dceba1fafa087eda2405e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\building.py": { - "mtime": 1778710280.6320436, - "hash": "17a76e00a22acfa311063cf3bf0aceb1" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\changelog.py": { - "mtime": 1778710280.6320436, - "hash": "f86a9e09fe755643a15a7f7b06a4f7e7" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\common.py": { - "mtime": 1778710280.6320436, - "hash": "011d46dc2203c3ed97184cec370ac179" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\comparison.py": { - "mtime": 1778710280.6320436, - "hash": "48ffa2ab0f4f95040236b6611ed375d0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\member.py": { - "mtime": 1778710280.6320436, - "hash": "726dad9ff8c7a8bffd365ddcfd543645" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post.py": { - "mtime": 1778710280.6335557, - "hash": "ff0149eb24572e4ba21fa191a73c762f" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post_condition.py": { - "mtime": 1778710280.6335557, - "hash": "6fec8cfb3b2eea536953026b0116b4af" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\post_suggestions.py": { - "mtime": 1778710280.6335557, - "hash": "7db30a2f2f5a9232d8a783a85ee2df6a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\siege.py": { - "mtime": 1778710280.6335557, - "hash": "1178a2cb1bc13ec3defa148e36991683" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\siege_member.py": { - "mtime": 1778710280.6335557, - "hash": "45b79b07f1d489b2daef9b719a0a0929" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\validation.py": { - "mtime": 1778710280.6335557, - "hash": "0221b358c7f777442cde715c227ac6ca" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\version.py": { - "mtime": 1778710280.6335557, - "hash": "b2fbcf0d416ddb9f1997acd6cb62bcf3" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\schemas\\__init__.py": { - "mtime": 1778710280.631044, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\attack_day.py": { - "mtime": 1778710280.6350994, - "hash": "997ffc05e8c23b0a544979ae0ed8dc7a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\autofill.py": { - "mtime": 1778710280.6350994, - "hash": "e9ce9ddf48273c0d9932f75ea8e8b0be" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\board.py": { - "mtime": 1778710280.6350994, - "hash": "7222c72b83f1091828c689f490ebcfe6" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\bot_client.py": { - "mtime": 1778710280.6350994, - "hash": "b699c8adf0b08521c02f3e6a4072c1ef" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\buildings.py": { - "mtime": 1778710280.6361103, - "hash": "22d3b48b747d63585084db712f7526ff" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\building_capacity.py": { - "mtime": 1778710280.6361103, - "hash": "5b463b5af305f54cd34e75e568756db9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\comparison.py": { - "mtime": 1778710280.6361103, - "hash": "17d8b0f29ef13d8a469dcbe79e5e0b18" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\discord_sync.py": { - "mtime": 1778710280.6361103, - "hash": "0fdbe1441877c11241501e6f37e6874a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\image_gen.py": { - "mtime": 1778710280.6361103, - "hash": "42d66ff5cc72422b6cffdce18e7b88e9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\lifecycle.py": { - "mtime": 1778710280.6376143, - "hash": "c6850f4b0ee921550d23553aa50db9ac" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\members.py": { - "mtime": 1778710280.6376143, - "hash": "1586e16427694996d81ce4d54812c5f0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\notification_message.py": { - "mtime": 1778710280.6376143, - "hash": "514ad0558f51c114a96e8316cd4392bf" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\posts.py": { - "mtime": 1778710280.63862, - "hash": "56792826d430eaa6cdd86796ddb43c10" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\post_suggestions.py": { - "mtime": 1778710280.63862, - "hash": "4a62a36d881bf55a4f73b623b95738bf" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\reference.py": { - "mtime": 1778710280.639125, - "hash": "e86f9864edb3e0eaa1a5e00cd2b903a9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\sieges.py": { - "mtime": 1778710280.639125, - "hash": "4f43c0760d92d03cc1062ba4b7610dba" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\siege_members.py": { - "mtime": 1778710280.639125, - "hash": "444d8aba42f567d23a8b1a5a12e51200" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\validation.py": { - "mtime": 1778710280.639125, - "hash": "bf8431f5d8b0c8dc793ed927f6de075f" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\app\\services\\__init__.py": { - "mtime": 1778710280.6335557, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\scripts\\seed.py": { - "mtime": 1778710280.640529, - "hash": "08609621e397256df55a763eb98530c3" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\scripts\\seed_demo.py": { - "mtime": 1778710280.6415303, - "hash": "ef5c21e671c3184b5cbb2240979c0690" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\config.py": { - "mtime": 1778710280.65144, - "hash": "b80130299a391da986cfd02386e5dea7" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\discord_client.py": { - "mtime": 1778710280.65144, - "hash": "99db4ab6cf0ecc3d30602e2b8db66a70" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\http_api.py": { - "mtime": 1778710280.65144, - "hash": "936ed9c6f1e4443f5035d0de3340329e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\main.py": { - "mtime": 1778710280.6519608, - "hash": "e05678b35f14c576d1cd2ee7f0ee86b0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\telemetry.py": { - "mtime": 1778710280.6519608, - "hash": "a42e02bf2fddd81cca77baa570cdc1ac" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\app\\__init__.py": { - "mtime": 1778710280.650921, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\eslint.config.js": { - "mtime": 1778710280.6638145, - "hash": "820d67ddf4af94ab7a60b247ef568493" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\playwright.config.ts": { - "mtime": 1778710280.6663249, - "hash": "c0c6f46da1f83e4dad062bf96a1645ce" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\postcss.config.js": { - "mtime": 1778710280.6663249, - "hash": "33fad9c02cb0ec6d6030369ef6347d57" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\tailwind.config.ts": { - "mtime": 1778710280.6950474, - "hash": "ab2458852a94f3918fc4dc8eec8ee34a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\vite.config.ts": { - "mtime": 1778710280.6955535, - "hash": "f0b8bf87fac76c40d6423f702e2a122d" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\vitest.config.ts": { - "mtime": 1778710280.6955535, - "hash": "e102be79d7bf6fd8b83320963d3d4d00" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\board.spec.ts": { - "mtime": 1778710280.6618135, - "hash": "2e1ab122df18ca111301f5244c1b4903" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\members.spec.ts": { - "mtime": 1778710280.6618135, - "hash": "012b10ee19afe7952752bdb34d947596" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\siege-lifecycle.spec.ts": { - "mtime": 1778710280.6638145, - "hash": "d3c27ac7e90b3bb5f190694f8d692f6c" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\e2e\\smoke.spec.ts": { - "mtime": 1778710280.6638145, - "hash": "7ffc073a7b7ce29603e7b1dda85b101b" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\App.tsx": { - "mtime": 1778710280.6731784, - "hash": "dc94be0210c5307affde3c5e0e5412b7" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\main.tsx": { - "mtime": 1778710280.6834679, - "hash": "5310a6bf9e3bdf98dc615af3ceff1537" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\vite-env.d.ts": { - "mtime": 1778710280.6950474, - "hash": "0352474ba2918efe13895edbc3780d94" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\board.ts": { - "mtime": 1778710280.6731784, - "hash": "997fae78645cd70b5c2fc3476313e4c1" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\changelog.ts": { - "mtime": 1778710280.6731784, - "hash": "9baa9e3d2be3e4bb566ba86923829a17" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\client.ts": { - "mtime": 1778710280.6746829, - "hash": "10a76391bc7690246d448e867cf7af57" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\config.ts": { - "mtime": 1778710280.6746829, - "hash": "3715d4f6dd51e505949f4b0f7ec9b309" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\members.ts": { - "mtime": 1778710280.6752062, - "hash": "385a652bab3624eb1a556666b369c7be" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\notifications.ts": { - "mtime": 1778710280.6752062, - "hash": "b202ca64e4f5445d309fa8cede22ff0c" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\posts.ts": { - "mtime": 1778710280.6752062, - "hash": "42847a5a2b91ef16e25b1be64c9c5955" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\sieges.ts": { - "mtime": 1778710280.6752062, - "hash": "f1014577b76ed9125141f290e8fb7578" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\types.ts": { - "mtime": 1778710280.6752062, - "hash": "f83637e41fcfc597e14c140b81e74a63" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\api\\version.ts": { - "mtime": 1778710280.6762116, - "hash": "3c320e1ae650ccfaf0fcc58db6f0ad8c" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\Carousel.tsx": { - "mtime": 1778710280.6772118, - "hash": "9c1e5964f8b5e400f963606ee0cd4eb9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ChangelogDropdown.tsx": { - "mtime": 1778710280.6772118, - "hash": "32af80944e867e66ec8cf25f6391e233" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\DiscordSyncModal.tsx": { - "mtime": 1778710280.6772118, - "hash": "52ea2cf5bf019ad4e9c376a447e87eaa" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\GroupByToggle.tsx": { - "mtime": 1778710280.6772118, - "hash": "78856592b8aaeb706087c4ef1e6c843b" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\Layout.tsx": { - "mtime": 1778710280.6772118, - "hash": "e813042f31449a0de61f906090164004" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\PostsTab.tsx": { - "mtime": 1778710280.678212, - "hash": "3f11fa6d290cff08dffcc9262a092b3a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\PostSuggestionsModal.tsx": { - "mtime": 1778710280.678212, - "hash": "9c16b7f40b7352b2f423f7ce46a68b11" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\RequireAuth.tsx": { - "mtime": 1778710280.678212, - "hash": "cd2b2e1cd2d319fc3f3977f7589f291e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\SiegeLayout.tsx": { - "mtime": 1778710280.679212, - "hash": "5dc89034188b6823763f9c6852f5f03a" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\badge.tsx": { - "mtime": 1778710280.679212, - "hash": "639942830535b4f2bb8e21e8d3a674e4" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\button.tsx": { - "mtime": 1778710280.679212, - "hash": "99376e90207bb72645519879a6ad87aa" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\checkbox.tsx": { - "mtime": 1778710280.679212, - "hash": "596afb4c85e5b432c24e2606e9623bf8" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\dialog.tsx": { - "mtime": 1778710280.679212, - "hash": "b917e9be88d5dc6b1b6d2660df3be9a0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\dropdown-menu.tsx": { - "mtime": 1778710280.6804683, - "hash": "8f8f3621f203e9d7d566ed3827ddb95c" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\input.tsx": { - "mtime": 1778710280.6804683, - "hash": "4f418a1677a7fa837b7a5f16b05eabea" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\label.tsx": { - "mtime": 1778710280.6804683, - "hash": "ede7445a0bd4c9380bff1fb664d21763" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\select.tsx": { - "mtime": 1778710280.6804683, - "hash": "594f45397eb2ac6bd77df7b7e37d5644" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\table.tsx": { - "mtime": 1778710280.681468, - "hash": "0e1676ab2a771ea388b5fa63036cd502" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\components\\ui\\textarea.tsx": { - "mtime": 1778710280.681468, - "hash": "4118508b3f819ceaee3b0d5f16bbb649" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\context\\AuthContext.tsx": { - "mtime": 1778710280.681468, - "hash": "44ab8c9079dffb96a8f0826540377cb3" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\buildingColors.ts": { - "mtime": 1778710280.6824672, - "hash": "b348eff15681381b572787a373b909ce" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\groupPostConditions.ts": { - "mtime": 1778710280.6824672, - "hash": "788b0f8427b263370cdab41d8850cf41" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\post-priority.ts": { - "mtime": 1778710280.6824672, - "hash": "94e7a97549b23802f43bb3f6ac6c28cc" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\postConditionTypes.ts": { - "mtime": 1778710280.6834679, - "hash": "3b06353374f1df46ea8de1cfd4afd788" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\useGroupByPreference.ts": { - "mtime": 1778710280.6834679, - "hash": "bb6b5032d31d41e56bfa0c1462240482" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\lib\\utils.ts": { - "mtime": 1778710280.6834679, - "hash": "d9837f38cc05303254571985e3164050" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\BoardPage.tsx": { - "mtime": 1778710280.6834679, - "hash": "ca60bdc402bf7fc73d45bf4a9786efa2" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\ComparisonPage.tsx": { - "mtime": 1778710280.6849875, - "hash": "5f40cf11f1c285fcc713c66f6b70cc7e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\LandingPage.tsx": { - "mtime": 1778710280.6849875, - "hash": "0592d360b4d150e643f2ed7d853cec37" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\LoginPage.tsx": { - "mtime": 1778710280.6849875, - "hash": "a7f86666a5e860fa06370cd44d5b2009" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\MemberDetailPage.tsx": { - "mtime": 1778710280.6849875, - "hash": "91d2961273fc9f2065dd82b95a4dd2e6" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\MembersPage.tsx": { - "mtime": 1778710280.6860092, - "hash": "0e20169e021eddba33936ff03cb09ed6" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\PostPrioritiesPage.tsx": { - "mtime": 1778710280.6860092, - "hash": "44ba6c946c49e4491f401a05ada7b0ce" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\PostsPage.tsx": { - "mtime": 1778710280.6860092, - "hash": "6299292c6d99e49321c62ebd458b5a3f" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeCreatePage.tsx": { - "mtime": 1778710280.6860092, - "hash": "2889e8903df72e1ab56a1a1a13ef0519" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeMembersPage.tsx": { - "mtime": 1778710280.687007, - "hash": "864268a2bc137e9b39782eb85260adff" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegeSettingsPage.tsx": { - "mtime": 1778710280.687007, - "hash": "f594078ade4735208a55056c7cf4dd5f" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SiegesPage.tsx": { - "mtime": 1778710280.687007, - "hash": "f93156052c5124138148122147b74acb" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\pages\\SystemPage.tsx": { - "mtime": 1778710280.687007, - "hash": "9332c96da0f1502dbb14d6f1d7164aaa" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\src\\types\\changelog.d.ts": { - "mtime": 1778710280.6940484, - "hash": "29f6e6e4d1a48ca3686c20d21c03dc3c" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-db.ps1": { - "mtime": 1778710280.7000616, - "hash": "2963ef492dbaa1e8aed3c7d0b42cb2bf" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-excel-import.ps1": { - "mtime": 1778710280.7010694, - "hash": "833c292e832a70a4d642e969418cec01" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-images.ps1": { - "mtime": 1778710280.701412, - "hash": "770e3450dec21a6498dd9380f2070049" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-keyvault.ps1": { - "mtime": 1778710280.701412, - "hash": "571c851084af0db873bdc82226b59797" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\bootstrap-reimport.ps1": { - "mtime": 1778710280.701412, - "hash": "39d7a16633e94d6cefeb8aca40862cff" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\generate-origin-pfx.ps1": { - "mtime": 1778710280.7034204, - "hash": "b0900217644486cdf9adf852befa4fde" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\rebuild.ps1": { - "mtime": 1778710280.7034204, - "hash": "1b5123763516e1ee3dbc308f2638eb4f" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\import_excel.py": { - "mtime": 1778710280.70243, - "hash": "4151fee1079d2b495340976e008542dd" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\tests\\__init__.py": { - "mtime": 1778710280.70243, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\experiments\\run-graphify-dry-run.ps1": { - "mtime": 1778715097.451517, - "hash": "8a66f56768d8c9b2b04c9d03452a8285" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CHANGELOG.md": { - "mtime": 1778710280.6144302, - "hash": "0c5a48d5f48933acad20d931797847b0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CLAUDE.md": { - "mtime": 1778710280.614946, - "hash": "efb936d1d3711ed3ca65b394f9d6b9b2" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CODE_OF_CONDUCT.md": { - "mtime": 1778710280.614946, - "hash": "9b2d51a163a531cb2f62e72697b0ccc1" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\CONTRIBUTING.md": { - "mtime": 1778710280.614946, - "hash": "f1099f1c0582333df2fabef4dccad223" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docker-compose.prod.yml": { - "mtime": 1778710280.6545522, - "hash": "e55ffd8443f4dd9cf1acb386a7956bfb" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docker-compose.yml": { - "mtime": 1778710280.6550682, - "hash": "376b6eb4a3cfab39144103477cea42cf" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\README.md": { - "mtime": 1778710280.615952, - "hash": "8b4ba27465aa3d5dfd16ed64c6cbf45f" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\SUPPORT.md": { - "mtime": 1778710280.615952, - "hash": "64c8848cde6a11b59d25bcc9b621e546" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\requirements-dev.txt": { - "mtime": 1778710280.640529, - "hash": "61ce4838a8959c3c183db9bab83b737d" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\backend\\requirements.txt": { - "mtime": 1778710280.640529, - "hash": "b06051b552c2ea4732940c0dbc2b9db0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\requirements-dev.txt": { - "mtime": 1778710280.6524813, - "hash": "cf6fc69a9af8b95f5758cac0a94bb9e6" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\bot\\requirements.txt": { - "mtime": 1778710280.6524813, - "hash": "fbf3dc8cb3581931efa8dc526f44f7ef" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\IMPLEMENTATION_PLAN.md": { - "mtime": 1778710280.6550682, - "hash": "5e4f9f914ca2ce9d67d6705a5933b7ba" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\RUNBOOK.md": { - "mtime": 1778710280.6555874, - "hash": "50fc656921246e9004108c9b114a09e5" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\siege_levels.md": { - "mtime": 1778710280.6587057, - "hash": "07d9f028f42a8b94ce3365a6f72bafc4" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\WEB_DESIGN_DOCUMENT.md": { - "mtime": 1778710280.656117, - "hash": "83b709cc8ac4aa14b027eda0a0c562b8" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\design-refs\\post-suggestions\\README.md": { - "mtime": 1778710280.6566384, - "hash": "de10b175d0df9256e5daeca315f7b252" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\experiments\\graphify-dry-run.md": { - "mtime": 1778711028.4433894, - "hash": "496df0deb7da1e88640f0a8bcdcb7e3b" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\mockup-landing.html": { - "mtime": 1778710280.6571586, - "hash": "0548e8204463ddf92a09c5ce6f97fe34" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\mockup-login.html": { - "mtime": 1778710280.6571586, - "hash": "7e1759c2d6a5fa6a3c4e5ed58777c289" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\mockups\\README.md": { - "mtime": 1778710280.6566384, - "hash": "fe28480a5cc9c486f4dc5d6be6c5f368" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\plans\\public-launch-self-hostable-and-landing-page.md": { - "mtime": 1778710280.657677, - "hash": "afed648bab4d1590d9b833607a4f7502" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\self-host\\anywhere.md": { - "mtime": 1778710280.6581955, - "hash": "2efab5a64706d9964b8fa13de3037449" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\self-host\\azure.md": { - "mtime": 1778710280.6587057, - "hash": "c9ee5c5fc8721e7c0ca2bb54da0782c9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-04-08-discord-auth-implementation.md": { - "mtime": 1778710280.6592517, - "hash": "01ee8f99120035b952a2699b8a01eb6b" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-05-08-component-versioning.md": { - "mtime": 1778710280.6597755, - "hash": "4eea9e7828ef6f2c88737f1f2feb1ee2" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\2026-05-09-post-suggestions.md": { - "mtime": 1778710280.6597755, - "hash": "3c89d2df41aebf5c5bc5add19cbd6281" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\discord-auth-plan.md": { - "mtime": 1778710280.6597755, - "hash": "bab1c00cda76f8ccaf26079a049ecf40" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\docs\\superpowers\\plans\\v1-release-plan.md": { - "mtime": 1778710280.6607814, - "hash": "f7ebc80091b9fc6eb0a5bf8661c0300e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\index.html": { - "mtime": 1778710280.6638145, - "hash": "dde055b245027a69a68049238ed823b3" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\graphify-out-with-tests\\graph.html": { - "mtime": 1778718921.8433201, - "hash": "b6226c2e30e0ccfbc56b15297319fa65" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\graphify-out-with-tests\\GRAPH_REPORT.md": { - "mtime": 1778718921.7281322, - "hash": "2c56ab55dda9d94cb5aab4e1a21a2cf1" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\infra\\README.md": { - "mtime": 1778710280.696556, - "hash": "3e76fbd727bcceeb02eb75d416c64aff" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\README.md": { - "mtime": 1778710280.701412, - "hash": "4a0e8a05091bd257fe417671858923a2" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\scripts\\excel-import\\requirements.txt": { - "mtime": 1778710280.70243, - "hash": "5e740ca3e2b112ec37fea64eae859ae0" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\FAQ.md": { - "mtime": 1778710280.7034204, - "hash": "5e52ba23a226df064a14d75b1fd0d715" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Getting-Started.md": { - "mtime": 1778710280.7034204, - "hash": "f9dea57e10cfeada6f10255144249741" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Home.md": { - "mtime": 1778710280.7034204, - "hash": "32652bdc5aadfc11288cc5a4df5fe4a3" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Self-Host-on-Any-VPS.md": { - "mtime": 1778710280.7034204, - "hash": "178c7e9323276c57b1ce23786431f634" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\Self-Host-on-Azure.md": { - "mtime": 1778710280.7049341, - "hash": "170d3ef1fbc3b5d52c18a8b6470951f5" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\wiki\\_Sidebar.md": { - "mtime": 1778710280.7049341, - "hash": "d92afc34965b5e470b581ce61e53b6ca" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\favicon.svg": { - "mtime": 1778710280.6663249, - "hash": "1544a9686a82728b10dd2d54a4c539b4" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-assignment-board.png": { - "mtime": 1778710280.6673253, - "hash": "138b785969e45c8eeec46b97c86dbfec" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-discord-image.png": { - "mtime": 1778710280.6673253, - "hash": "490ecc84ff80e40ca12651e2626bc424" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-member-management.png": { - "mtime": 1778710280.6688316, - "hash": "e87aa520a2aaecf3e9a1eea306182d0d" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-post-assignments.png": { - "mtime": 1778710280.6698372, - "hash": "79bdc954a2b7803d178cc4b3f2d7fbd8" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-siege-comparison.png": { - "mtime": 1778710280.6711512, - "hash": "913d494ae2e7465514441dec70f864c9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\carousel-validation-errors.png": { - "mtime": 1778710280.6721778, - "hash": "a6f43ec1ae7d66d5580b8b8d9d8c154e" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\hero-board.png": { - "mtime": 1778710280.6721778, - "hash": "4640413678efc867d27bceed64b60ea9" - }, - "I:\\games\\raid\\siege-web\\.worktrees\\experiment-graphify-dry-run-doc\\frontend\\public\\landing\\og-image.png": { - "mtime": 1778710280.6731784, - "hash": "4640413678efc867d27bceed64b60ea9" - } -} \ No newline at end of file diff --git a/evaluations/rsl-siege-manager/results.md b/evaluations/rsl-siege-manager/results.md deleted file mode 100644 index 7b2d6ba8..00000000 --- a/evaluations/rsl-siege-manager/results.md +++ /dev/null @@ -1,194 +0,0 @@ -# Graphify Dry-Run — Results & Decision - -**Date:** 2026-05-15 -**Tool:** [`safishamsi/graphify`](https://github.com/safishamsi/graphify) (PyPI `graphifyy`) -**Tracking issue:** #397 -**Runbook:** [`runbook.md`](./runbook.md) -**Source codebase:** [`glitchwerks/rsl-siege-manager`](https://github.com/glitchwerks/rsl-siege-manager) @ `6085fd66` -**Decision:** Do not adopt. - ---- - -## TL;DR - -The dry-run was executed twice against rsl-siege-manager at commit `6085fd66` — once excluding tests, once including them. Evaluated against the acid-test criteria from #397 (god nodes, surprising connections, and suggested questions should reflect things the user would nominate themselves), the tool failed on all three headline outputs. The without-tests run surfaces utilities and React page components alongside legitimate domain models; the with-tests run is dominated by test fixtures. Neither output justifies integrating a `PreToolUse` hook. - ---- - -## What was run - -Two runs at commit `6085fd66`: - -| Run | Scope | Nodes | Edges | Communities | Extraction quality | -|-----|-------|-------|-------|-------------|-------------------| -| A (codebase only) | `.graphifyignore` excluded `backend/tests/`, `frontend/src/**/__tests__/` | 833 | 1758 | 52 | 85% EXTRACTED / 15% INFERRED (avg confidence 0.59) | -| B (codebase + tests) | No exclusions beyond vendored deps | 1886 | 3876 | 141 | 90% EXTRACTED / 10% INFERRED (avg confidence 0.62) | - -Run cost: $0 token cost in both cases. graphify uses tree-sitter for code extraction; LLM API calls fire only for non-code files. After `.graphifyignore`, there were effectively none. - ---- - -## Evaluation against the acid test - -Issue #397 set this bar: - -> "whether GRAPH_REPORT.md's named extractions (god nodes, surprising connections, suggested questions) reflect things the user would nominate themselves — generic graph-theory output ('`index.ts` is highly connected') means it didn't work." - -Each finding below quotes the report directly. The raw artifacts are not committed (see "Artifact handling"), but the quotes are verifiable by re-running the dry-run against the same commit. - -### Finding 1 — Test fixtures dominate "core abstractions" with tests included - -Run B's god-node list, verbatim (`graphify-out-with-tests/GRAPH_REPORT.md`, lines 141–150): - -``` -1. `_make_siege()` - 124 edges -2. `_make_member()` - 92 edges -3. `_make_position()` - 85 edges -4. `SiegeMember` - 78 edges -5. `_make_building()` - 64 edges -6. `_make_group()` - 60 edges -7. `BoardPage()` - 55 edges -8. `makeSiegeMember()` - 55 edges -9. `PostsPage()` - 37 edges -10. `_session_with_siege_and_configs()` - 35 edges -``` - -Six of the top ten — positions 1, 2, 3, 5, 6, and 8 — are test factory functions (`_make_siege`, `_make_member`, `_make_position`, `_make_building`, `_make_group`, `makeSiegeMember`). Position 10 is a test session fixture. These are the highest-connectivity nodes in the graph, and they are infrastructure for verifying the codebase, not the codebase itself. - -This is the cleanest failure signal in the dataset. The god-node list is explicitly labeled "your core abstractions." No developer would nominate `_make_siege()` as a core abstraction of a siege-assignment web app. The metric — degree centrality — is measuring test coverage, not architecture. The inversion is structural: the better your test coverage, the more your test factories saturate every part of the codebase, and the higher their degree count climbs. Codebases that most need architectural insight (low coverage, high complexity) will produce the cleanest god-node lists. Codebases that least need it (high coverage, known domain) will look like run B. - -### Finding 2 — Codebase-only god nodes are surface-level - -Run A's god-node list, verbatim (`graphify-out/GRAPH_REPORT.md`, lines 55–64): - -``` -1. `SiegeMember` - 55 edges -2. `BoardPage()` - 53 edges -3. `Post Suggestions Modal Handoff` - 40 edges -4. `postsTab` - 29 edges -5. `cn()` - 29 edges -6. `PostsPage()` - 28 edges -7. `BuildingType` - 27 edges -8. `MembersPage()` - 27 edges -9. `MemberRole` - 25 edges -10. `Self-Host on Azure Wiki Page` - 23 edges -``` - -`SiegeMember`, `BuildingType`, and `MemberRole` at positions 1, 7, and 9 are legitimate domain models a developer would identify as important. That is three of ten. - -The remaining seven are less useful. `BoardPage()`, `PostsPage()`, and `MembersPage()` at positions 2, 6, and 8 are React top-level page components — they import many things because they are entry points, not because they encode domain logic. `cn()` at position 5 is a one-line Tailwind class-merging utility (`src/lib/utils.ts`). It scores 29 edges because every component that merges conditional classes imports it. This is the canonical generic-graph-theory false positive the runbook warned about: `cn()` is "highly connected" in the same way `/dev/null` would be if files wrote to it — the connection count reflects a structural pattern, not semantic importance. `Post Suggestions Modal Handoff` at position 3 is a planning document node extracted from `docs/design-refs/`, not a code entity at all. `Self-Host on Azure Wiki Page` at position 10 is a wiki article. - -The acid test asks whether these are things the user would nominate. They are not. - -### Finding 3 — Surprising connections cross language boundaries spuriously - -Both runs surface INFERRED edges between Python backend types and TypeScript frontend types, presented under the heading "Surprising Connections (you probably didn't know these)." From run A (`graphify-out/GRAPH_REPORT.md`, lines 73–74): - -``` -- `AuthError` --uses--> `Member` [INFERRED] - backend/app/api/auth.py → frontend/src/api/types.ts -``` - -And from run B (`graphify-out-with-tests/GRAPH_REPORT.md`, lines 158–159): - -``` -- `TestStartupValidation` --uses--> `MemberRole` [INFERRED] - backend/tests/test_auth.py → frontend/src/api/types.ts -``` - -A Python class does not "use" a TypeScript type at runtime. These are name-based similarity matches — `AuthError` and `Member` share a namespace with identically-named constructs in the frontend — presented as semantic relationships. The confidence is low (avg INFERRED confidence 0.59 in run A, 0.62 in run B), but the framing ("you probably didn't know these") presents them as insights worth investigating. They are not. - -The one genuinely plausible INFERRED connection in run A is: - -``` -- `PostPriorityResponse` --uses--> `PostPriorityConfig` [INFERRED] - backend/app/api/post_priority_config.py → frontend/src/api/posts.ts -``` - -The backend schema and the frontend type do mirror each other by contract. But that relationship is a deliberate design decision well-known to anyone who wrote it — not a discovery. - -### Finding 4 — Community cohesion is universally weak - -The majority of rsl-siege-manager's 52 communities (run A) score between 0.05 and 0.17 on cohesion. Run A community distribution: - -- Communities 0, 2, 3, 6: cohesion 0.05–0.06 (the four largest communities, 36–112 nodes each) -- Most remaining communities: cohesion 0.08–0.17 -- Cohesion above 0.25: six communities, all small (3–10 nodes) - -The report itself flags cohesion 0.05 as "weakly interconnected" in the Suggested Questions section: "Should `Community 0` be split into smaller, more focused modules? — Cohesion score 0.05 - nodes in this community are weakly interconnected." Community 0 has 112 nodes. - -rsl-siege-manager has a clean three-service architecture (backend / frontend / bot) that any developer can describe in a sentence. The graph algorithm is not finding that structure — it is producing communities with no legible semantic identity and flagging most of them as internally incoherent. - -### Finding 5 — Noise inflated into knowledge gaps - -Run A reports 259 isolated nodes; run B reports 752. The leading examples in both are identical (`graphify-out/GRAPH_REPORT.md`, line 213; `graphify-out-with-tests/GRAPH_REPORT.md`, line 447): - -``` -`initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, -`add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, -`make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1`, -`Add post_priority_config table`, ... -``` - -These are Alembic migration revision docstrings parsed as standalone graph nodes. A migration docstring like `"make siege date nullable"` is a change-tracking annotation, not an architectural entity. There are 17 Alembic migration files in this repo. The isolated-node count growing from 259 to 752 when tests are added is almost entirely test docstrings and test function descriptions parsed the same way. - -The report labels these as "possible documentation gaps or missing edges" — a framing that implies they are meaningful silences the developer should investigate. They are not gaps; they are noise. - -### Finding 6 — Suggested questions are self-referential - -The Suggested Questions section in both runs consists primarily of two kinds of questions: - -1. **Betweenness centrality prompts:** "Why does `_make_siege()` connect Community 12 to Community 0, Community 1, Community 3...?" These ask the developer to explain why a test fixture has high betweenness. The answer is obvious: it creates the primary domain object; every test uses it. - -2. **Inferred-edge audits:** "Are the 17 inferred relationships involving `SiegeMember` (e.g. with `Base` and `TestSeedDemoMembers`) actually correct?" This is the tool asking the developer to validate the tool's own low-confidence connections. It is not the tool answering questions about the codebase; it is the tool outsourcing its uncertainty. - -Run A's most interesting question — "What is the exact relationship between `bootstrap-images.ps1` and `scripts/bootstrap-images.ps1`?" — is itself tagged AMBIGUOUS. The answer is: they are the same script referenced by two slightly different paths in different contexts. This is a file-naming question, not an architectural one. - ---- - -## What graphify is good at - -The throughput is fine: 833 nodes in a few minutes, $0 LLM cost on a code-heavy repo. The tree-sitter extraction is genuinely fast and does pick up real entities — `SiegeMember`, `BuildingType`, and `MemberRole` in the god-node list are correct. The `graph.html` interactive visualization is well-built and easy to navigate. The EXTRACTED cross-service connections are occasionally real: `PostPriorityResponse --uses--> PostPriorityConfig` between `backend/app/api/post_priority_config.py` and `frontend/src/api/posts.ts` reflects an actual contract. - -The problem is not the underlying graph build. The problem is what the report does with it. - ---- - -## Why this is a rejection, not a tuning problem - -The headline outputs — god nodes, surprising connections, suggested questions — are what would justify wiring a `PreToolUse` hook that nudges the assistant to consult `GRAPH_REPORT.md` on every `grep`/`rg`/`find` invocation. If those outputs are mostly test fixtures (run B), surface-level import counts (run A), low-confidence cross-language inferences, and self-referential audit requests, then the hook would be steering the assistant's attention toward noise on every search. Tightening `.graphifyignore` further would fix run B's test-fixture problem, but it would not fix the architecture-of-the-metric problem visible in run A: degree centrality will always surface utilities and entry points over domain logic, regardless of what the ignore file excludes. The tool is measuring the right thing (connectivity) for the wrong purpose (identifying abstractions worth knowing about). - ---- - -## Cost incurred vs cost avoided - -**Cost incurred:** - -- ~10 minutes of CLI time across two runs. -- $0 LLM cost (tree-sitter handled all code; no non-code files survived the ignore filter in any meaningful quantity). - -**Cost avoided by not adopting:** - -The two harness mutations from `graphify claude install` documented in #397: - -1. **Global CLAUDE.md append** — a `# graphify` block appended to `~/.claude/CLAUDE.md` without a parseable fence marker, requiring manual cleanup on backout. -2. **Per-project `PreToolUse` hook** — fires on `Bash` commands containing `grep`/`rg`/`find` substrings. As noted in the runbook's Windows-specific gotchas section: the hook matcher is substring-based (`*grep*`), creating false-positive nudges on `pg_dump | grep`, `kubectl get pods | grep`, and similar. The hook also uses `python3` (not `python.exe`) which may silently no-op on Windows. - ---- - -## Artifact handling - -The raw outputs from both runs — `graph.html`, `graph.json`, `GRAPH_REPORT.md`, `cache/`, `manifest.json` (approximately 12 MB total) — are committed alongside this writeup under [`./graphify-out/`](./graphify-out/) and [`./graphify-out-with-tests/`](./graphify-out-with-tests/). The quoted findings above are auditable against the originals; the interactive `graph.html` files render the underlying force-directed graph if you want to explore. - -Reproducing the run against a different revision: see [`runbook.md`](./runbook.md) for the methodology and acid-test criteria. - ---- - -## Follow-up - -- Issue tracking is disabled on this fork, so the PR that lands this evaluation is the durable record of the decision. -- No upstream contribution intended — this is an evaluation of graphify as a consumer, not a change request to the tool. The fork exists as a stable point to reference if upstream evolves. - ---- - -🤖 _Generated by Claude Code on behalf of @cbeaulieu-gt_ diff --git a/evaluations/rsl-siege-manager/runbook.md b/evaluations/rsl-siege-manager/runbook.md deleted file mode 100644 index 9993518e..00000000 --- a/evaluations/rsl-siege-manager/runbook.md +++ /dev/null @@ -1,160 +0,0 @@ -# Graphify Dry-Run for rsl-siege-manager - -> **Captured artifact.** This is the runbook as used during the [rsl-siege-manager evaluation](./results.md). Originally lived at `docs/experiments/graphify-dry-run.md` in that repo; relocated here so methodology and results stay together. References to siege-web-specific paths and cleanup commands are kept verbatim — they reflect the original context. - -A scoped evaluation plan for [`safishamsi/graphify`](https://github.com/safishamsi/graphify) — a tool that builds a queryable knowledge graph (code + docs + PDFs + images) from a project folder and exposes it to AI coding assistants. - -**Goal of this dry-run:** produce graphify's artifacts inside `rsl-siege-manager/graphify-out/` so I can judge whether the graph genuinely illuminates this codebase, **without** modifying my global `~/.claude/CLAUDE.md`, this repo's `.claude/settings.json`, or installing any harness hooks. Everything below is reversible by deleting one folder. - ---- - -## Why this approach - -Graphify's full install does two things: - -1. **Global**: drops a skill at `~/.claude/skills/graphify/SKILL.md` and **appends a `# graphify` block to `~/.claude/CLAUDE.md`** (string-match guarded — not a fenced/marker block, so manual cleanup is needed if I back it out). -2. **Per-project**: appends a `## graphify` section to this repo's `CLAUDE.md` and registers a `PreToolUse` hook in `.claude/settings.json` that nudges the assistant to consult `GRAPH_REPORT.md` whenever a `Bash` command contains `grep`/`rg`/`find`/etc. - -Both are reasonable but non-trivial mutations to harness configuration I tune carefully. The dry-run skips both, runs only the CLI, and lets me decide whether the artifact is worth the integration cost **after** seeing it. - ---- - -## Step 1 — Install the CLI globally - -```powershell -uv tool install graphifyy -``` - -> The PyPI package is `graphifyy` (double-y). The CLI command is `graphify`. - -Verify it's on PATH: - -```powershell -graphify --version -``` - -If "not recognized," open a new PowerShell window — `uv tool` updates PATH but the current session won't see it. - ---- - -## Step 2 — Optional: gate the first build with `.graphifyignore` - -Cheap insurance. Each non-code file (markdown, PDF, image) becomes an LLM API call during the first build. A `.graphifyignore` (same syntax as `.gitignore`, including `!` negation) keeps vendored deps and build output out of scope. - -From the rsl-siege-manager root: - -```powershell -@' -node_modules/ -dist/ -build/ -.next/ -.venv/ -coverage/ -*.generated.* -*.min.js -'@ | Set-Content -Encoding UTF8 .graphifyignore -``` - -Adjust to rsl-siege-manager's actual layout. If unsure what to ignore, skip this step — the build will still work, just bigger. - ---- - -## Step 3 — Build the graph (the only step with $ cost) - -From the rsl-siege-manager root: - -```powershell -graphify extract . -``` - -> **Estimated cost:** `$0.10–$2.00` depending on the number of docs, PDFs, and images that survive the ignore filter. Watch terminal output; `Ctrl+C` is safe at any point. - -What happens under the hood: - -| Content type | Mechanism | Cost | -| --- | --- | --- | -| Code (29 languages, AST via tree-sitter) | Local | Free | -| Docs, markdown, PDFs, images, videos | LLM API call per file | $$ | - -Watch terminal output. If it's processing far more files than expected, `Ctrl+C` and tighten `.graphifyignore` before re-running. - -Check the cost summary when it finishes: - -```powershell -Get-Content .\graphify-out\cost.json -``` - ---- - -## Step 4 — Inspect the three artifacts - -```powershell -# The headline summary the assistant would read on every query -code .\graphify-out\GRAPH_REPORT.md - -# The interactive graph (click nodes, filter, search) -Start-Process .\graphify-out\graph.html - -# The raw graph data (used by the query commands below) -Get-Content .\graphify-out\graph.json | Select-Object -First 50 -``` - -**The honest evaluation lives in `GRAPH_REPORT.md`, not `graph.html`.** The viz is dopamine — colorful and clickable on any codebase. The report's "god nodes," "surprising connections," and "suggested questions" sections are what tell me whether the LLM extraction actually *understood* rsl-siege-manager. If those sections name files/concepts I'd nominate myself, it worked. If they're generic ("`index.ts` is highly connected") or wrong, it didn't. - ---- - -## Step 5 — Try query commands without any hook wiring - -These work directly off `graphify-out/graph.json` — no skill registration, no settings.json mutation: - -```powershell -graphify query "how does authentication flow through the app?" -graphify query "what connects the database layer to the API routes?" -graphify path "" "" -graphify explain "" -``` - -**Acid test:** ask 3–5 questions I already know the answer to. If it answers them correctly, the tool can help with the ones I don't. - ---- - -## Step 6 — Decide - -| Outcome | Next move | -| --- | --- | -| Graph is genuinely illuminating | Run `graphify claude install` (accept the CLAUDE.md / `.claude/settings.json` mutations) | -| Useful but not always-on | Keep the CLI, rebuild manually when useful, query from terminal — no install | -| Generic or wrong | Delete and move on | - ---- - -## Abort / full cleanup - -Nothing outside `rsl-siege-manager/graphify-out/` was touched. To roll back completely: - -```powershell -Remove-Item -Recurse -Force .\graphify-out -Remove-Item .\.graphifyignore # if added and unwanted -Remove-Item .\docs\experiments\graphify-dry-run.md # this file -uv tool uninstall graphifyy # remove the CLI itself -``` - -After this, the repo is byte-identical to before the dry-run, and `~/.claude/CLAUDE.md` was never modified. - ---- - -## Windows-specific gotchas to watch for - -- **`/graphify extract .` will fail in PowerShell.** PowerShell treats `/` as a path separator. Use `graphify extract .` (no leading slash). The slash form only works inside an AI coding assistant's chat prompt. -- **The PreToolUse hook graphify installs uses `python3`.** Windows installers typically register `python.exe`, not `python3.exe`. If I do eventually run `graphify claude install`, the hook's `python3 -c "..."` may silently no-op (it's wrapped in `2>/dev/null || true`) — meaning the nudge never fires and I won't know. -- **The hook also relies on Bash `case` syntax.** Claude Code on Windows routes hook commands through Git Bash, so this works — but it's an implicit dependency on Git Bash being present. -- **Hook matcher is substring-based on `*grep*`.** That catches `pg_dump | grep`, `kubectl get pods | grep`, anything-grep. False-positive nudges are low cost but worth knowing. - ---- - -## Reference - -- Repo: https://github.com/safishamsi/graphify -- PyPI: https://pypi.org/project/graphifyy/ -- Repo signals at evaluation time (2026-05-13): 47k stars, 5k forks, MIT, ~5 weeks old. Star count is anomalously high for age — treat it as marketing signal, not quality signal. Evaluate the artifact, not the badges. diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/GRAPH_REPORT.md b/worked/rsl-siege-manager/GRAPH_REPORT.md similarity index 100% rename from evaluations/rsl-siege-manager/graphify-out-with-tests/GRAPH_REPORT.md rename to worked/rsl-siege-manager/GRAPH_REPORT.md diff --git a/worked/rsl-siege-manager/README.md b/worked/rsl-siege-manager/README.md new file mode 100644 index 00000000..b3d5b243 --- /dev/null +++ b/worked/rsl-siege-manager/README.md @@ -0,0 +1,88 @@ +# Case Study: rsl-siege-manager (Python + TypeScript monorepo) + +A graphify dry-run against [`glitchwerks/rsl-siege-manager`](https://github.com/glitchwerks/rsl-siege-manager) — a real-world web app with a Python (FastAPI) backend, a TypeScript (React + Vite) frontend, and a Python Discord bot, all in one repo. Captured here as a worked example of running graphify on a mixed-language full-stack codebase that includes a substantial test suite. + +**Corpus:** `glitchwerks/rsl-siege-manager` @ commit `6085fd66` +**Date:** 2026-05-15 +**Findings:** [`review.md`](./review.md) +**Raw artifacts:** [`GRAPH_REPORT.md`](./GRAPH_REPORT.md), [`graph.html`](./graph.html), [`graph.json`](./graph.json), [`manifest.json`](./manifest.json) + +## How to reproduce + +### 1. Clone the corpus + +```bash +git clone https://github.com/glitchwerks/rsl-siege-manager +cd rsl-siege-manager +git checkout 6085fd66 +``` + +### 2. Install the CLI + +```powershell +uv tool install graphifyy +``` + +> The PyPI package is `graphifyy` (double-y). The CLI command is `graphify`. + +Verify it's on PATH: + +```powershell +graphify --version +``` + +If "not recognized" on Windows, open a new shell — `uv tool` updates PATH but the current session won't see it. + +### 3. Run extraction + +This case study ran extraction with no `.graphifyignore` (the run included tests). To reproduce a tests-included run: + +```powershell +graphify extract . +``` + +Watch terminal output. graphify uses tree-sitter for code (free, fast) and LLM API calls only for non-code files (markdown, PDFs, images). On a code-heavy repo like rsl-siege-manager, the cost is dominated by docs. + +Check the cost summary when it finishes: + +```powershell +Get-Content .\graphify-out\cost.json +``` + +### 4. Inspect + +```powershell +# The headline summary an assistant would read +code .\graphify-out\GRAPH_REPORT.md + +# The interactive graph +Start-Process .\graphify-out\graph.html +``` + +## What's in this directory + +| File | What it is | +|---|---| +| `README.md` | This file — corpus description + reproduction steps | +| `review.md` | Findings against the headline outputs in `GRAPH_REPORT.md` | +| `GRAPH_REPORT.md` | Raw graphify report (god nodes, communities, surprising connections, suggested questions) | +| `graph.html` | Interactive force-directed visualization | +| `graph.json` | Underlying graph data used by `graphify query` | +| `manifest.json` | Per-file extraction record | + +The AST cache (`graphify-out/cache/`) is regenerable and not committed. + +## Why this corpus + +rsl-siege-manager is structurally interesting for graphify evaluation because: + +- **Three services in one repo** — Python backend, TypeScript frontend, Python bot — exercises cross-language inference. +- **Substantial test suite** — both Python (`backend/tests/`) and TypeScript (`frontend/src/**/__tests__/`) — surfaces how degree-centrality behaves on covered codebases. +- **17 Alembic migrations** with revision docstrings — exercises how docstring-shaped content is or is not treated as graph entities. +- **Clean three-tier architecture** — a developer can describe the structure in one sentence, giving a clear ground truth to evaluate community detection against. + +## Reference + +- graphify repo: https://github.com/safishamsi/graphify +- graphify PyPI: https://pypi.org/project/graphifyy/ +- rsl-siege-manager: https://github.com/glitchwerks/rsl-siege-manager diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.html b/worked/rsl-siege-manager/graph.html similarity index 100% rename from evaluations/rsl-siege-manager/graphify-out-with-tests/graph.html rename to worked/rsl-siege-manager/graph.html diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/graph.json b/worked/rsl-siege-manager/graph.json similarity index 100% rename from evaluations/rsl-siege-manager/graphify-out-with-tests/graph.json rename to worked/rsl-siege-manager/graph.json diff --git a/evaluations/rsl-siege-manager/graphify-out-with-tests/manifest.json b/worked/rsl-siege-manager/manifest.json similarity index 100% rename from evaluations/rsl-siege-manager/graphify-out-with-tests/manifest.json rename to worked/rsl-siege-manager/manifest.json diff --git a/worked/rsl-siege-manager/review.md b/worked/rsl-siege-manager/review.md new file mode 100644 index 00000000..f0072b41 --- /dev/null +++ b/worked/rsl-siege-manager/review.md @@ -0,0 +1,154 @@ +# Review: rsl-siege-manager + +**Corpus:** [`glitchwerks/rsl-siege-manager`](https://github.com/glitchwerks/rsl-siege-manager) @ `6085fd66` +**Date:** 2026-05-15 +**Run:** tests included, no `.graphifyignore` +**Counts:** 1886 nodes · 3876 edges · 141 communities · 90% EXTRACTED / 10% INFERRED (avg INFERRED confidence 0.62) +**Cost:** $0 (tree-sitter only; this corpus's natural file mix surfaced no non-code files in meaningful quantity) +**Setup:** ~10 minutes of CLI time end-to-end + +This review evaluates the **headline outputs** in `GRAPH_REPORT.md` — god nodes, surprising connections, communities, isolated nodes, suggested questions — against a single criterion: do they reflect things a developer familiar with this codebase would themselves nominate as core, surprising, or worth investigating? Each finding quotes the report directly so it is verifiable against the committed artifacts. + +--- + +## Finding 1 — Test fixtures dominate "core abstractions" when tests are included + +Top god nodes, verbatim from `GRAPH_REPORT.md` (lines 141–150): + +``` +1. `_make_siege()` - 124 edges +2. `_make_member()` - 92 edges +3. `_make_position()` - 85 edges +4. `SiegeMember` - 78 edges +5. `_make_building()` - 64 edges +6. `_make_group()` - 60 edges +7. `BoardPage()` - 55 edges +8. `makeSiegeMember()` - 55 edges +9. `PostsPage()` - 37 edges +10. `_session_with_siege_and_configs()` - 35 edges +``` + +Six of the top ten — positions 1, 2, 3, 5, 6, and 8 — are test factory functions (`_make_siege`, `_make_member`, `_make_position`, `_make_building`, `_make_group`, `makeSiegeMember`). Position 10 is a test session fixture. These are the highest-connectivity nodes in the graph, and they are infrastructure for verifying the codebase, not the codebase itself. + +The god-node list is labeled "your core abstractions" in the report. On this corpus, no developer would nominate `_make_siege()` as a core abstraction of a siege-assignment web app. Degree centrality on a well-tested codebase will tend to surface test factories: by design, factories create the primary domain objects that every test then exercises, so they accumulate edges from every part of the suite. The pattern is structural — the better the test coverage, the more saturated the factory's degree count. + +For users running graphify on a codebase with substantial test coverage, the documented mitigation (a `.graphifyignore` excluding `tests/`, `__tests__/`, etc.) is effective at removing this class of false-positive. See Finding 2 for what the same corpus surfaces without tests. + +## Finding 2 — Without tests, god nodes mix domain types with entry points and utilities + +For comparison, an earlier run of the same corpus with `.graphifyignore` excluding `backend/tests/` and `frontend/src/**/__tests__/` produced this god-node list: + +``` +1. `SiegeMember` - 55 edges +2. `BoardPage()` - 53 edges +3. `Post Suggestions Modal Handoff` - 40 edges +4. `postsTab` - 29 edges +5. `cn()` - 29 edges +6. `PostsPage()` - 28 edges +7. `BuildingType` - 27 edges +8. `MembersPage()` - 27 edges +9. `MemberRole` - 25 edges +10. `Self-Host on Azure Wiki Page` - 23 edges +``` + +(That run's artifacts are not committed here — only the tests-included artifacts are kept — but the list is reproducible by re-running with the same `.graphifyignore`.) + +Three of ten — `SiegeMember`, `BuildingType`, `MemberRole` (positions 1, 7, 9) — are legitimate domain models a developer would identify. + +The other seven illustrate a second pattern worth knowing about: + +- **React top-level page components** (`BoardPage`, `PostsPage`, `MembersPage` at 2, 6, 8) — these import many things because they are entry points, not because they encode domain logic. +- **Class-merge utilities** — `cn()` (position 5) is a one-line Tailwind class-merging utility (`src/lib/utils.ts`). It scores 29 edges because every component that conditionally combines classes imports it. The connection count reflects a structural pattern (the React+Tailwind idiom), not semantic importance. +- **Document/wiki entities** — `Post Suggestions Modal Handoff` (position 3) is a planning document under `docs/design-refs/`; `Self-Host on Azure Wiki Page` (position 10) is a wiki article. Both are extracted as nodes alongside code entities and sort by edge count the same way. + +This is informative for users tuning expectations: degree centrality on a React frontend with a shared `cn()` utility will surface that utility regardless of how aggressive the ignore filter is, because the connections are real even though the semantic importance is low. + +## Finding 3 — Surprising connections cross language boundaries + +Both runs surface INFERRED edges between Python backend types and TypeScript frontend types under "Surprising Connections (you probably didn't know these)." Examples: + +``` +- `AuthError` --uses--> `Member` [INFERRED] + backend/app/api/auth.py → frontend/src/api/types.ts +``` + +``` +- `TestStartupValidation` --uses--> `MemberRole` [INFERRED] + backend/tests/test_auth.py → frontend/src/api/types.ts +``` + +A Python class does not "use" a TypeScript type at runtime. These are name-based similarity matches between identically-named constructs in two languages, surfaced as semantic relationships. The confidence values are flagged as INFERRED (avg 0.62 on this run), but the section header presents them as insights worth investigating. + +The one cross-language INFERRED edge in this run that maps to a real design contract is: + +``` +- `PostPriorityResponse` --uses--> `PostPriorityConfig` [INFERRED] + backend/app/api/post_priority_config.py → frontend/src/api/posts.ts +``` + +The backend Pydantic schema and the frontend TypeScript type do mirror each other intentionally — this is the API contract. That relationship is real, but a developer who wrote either side already knows about it; INFERRED detection here recovers a fact rather than discovering one. + +For corpora that mix Python and TypeScript with overlapping type names (common in monorepos with shared domain vocabulary), users should expect a high false-positive rate in this section and read it with the INFERRED confidence in mind. + +## Finding 4 — Community cohesion is uniformly low on this corpus + +Most of rsl-siege-manager's 141 communities (tests-included run) score between 0.05 and 0.17 on cohesion. The report itself flags 0.05 as "weakly interconnected" in the Suggested Questions section: + +> "Should `Community 0` be split into smaller, more focused modules? — Cohesion score 0.05 - nodes in this community are weakly interconnected." + +Community 0 has 112 nodes on this corpus. + +rsl-siege-manager has a clean three-service architecture (backend / frontend / bot). The community-detection pass does not recover that structure as three large cohesive communities; it produces many small communities with low internal cohesion. Possible interpretations: the underlying graph has many INFERRED cross-language edges diluting the cluster signal, the chosen algorithm parameters favor over-segmentation on graphs of this density, or this corpus genuinely lacks tight intra-cluster topology that community detection can exploit. + +A neutral framing for users: community cohesion is informative on this corpus mainly as a signal that the graph topology does not match the obvious three-tier mental model — which itself may be useful (it surfaces that the cross-language edges are doing the work). The "split this community" prompts the report generates from low cohesion scores are less actionable as direct architectural advice on this corpus. + +## Finding 5 — Alembic migration docstrings surface as isolated nodes + +The tests-included run reports 752 isolated nodes; the without-tests run reports 259. The leading examples are identical in both: + +``` +`initial schema Revision ID: 0001 Revises: Create Date: 2026-03-16`, +`add autofill and attack day preview columns to siege Revision ID: 0002 Revises:`, +`make siege date nullable Revision ID: 0003 Revises: 0002 Create Date: 2026-03-1`, +`Add post_priority_config table`, ... +``` + +These are Alembic migration revision docstrings parsed as standalone graph nodes. There are 17 migration files in this corpus. The isolated-node count growing from 259 to 752 when tests are added is dominated by test docstrings parsed the same way. + +The report labels these as "possible documentation gaps or missing edges." For users with corpora that contain Alembic migrations, pytest docstrings, or other docstring-heavy auto-generated files, this label can be misleading — these are change annotations or test descriptions, not architectural entities with missing connections. + +A `.graphifyignore` rule for `**/alembic/versions/*.py` reduces the isolated-node count materially on this corpus; users with similar setups may want a default recipe. + +## Finding 6 — Suggested questions skew toward graph-property prompts + +The Suggested Questions section consists primarily of two kinds of questions: + +1. **Betweenness centrality prompts:** "Why does `_make_siege()` connect Community 12 to Community 0, Community 1, Community 3...?" The answer on this corpus is direct: `_make_siege()` creates the primary domain object, every test that touches a siege uses it, and the test suite spans the codebase — so the fixture is a betweenness bridge by construction. + +2. **Inferred-edge audits:** "Are the 17 inferred relationships involving `SiegeMember` (e.g. with `Base` and `TestSeedDemoMembers`) actually correct?" These ask the developer to validate the tool's own low-confidence connections. + +A genuinely concrete question in this section — "What is the exact relationship between `bootstrap-images.ps1` and `scripts/bootstrap-images.ps1`?" — is tagged AMBIGUOUS by the report. The answer is concrete (they are the same script referenced by two slightly different paths), but it is a file-naming observation, not an architectural insight. + +For users hoping the Suggested Questions section will surface domain-level prompts ("how does authentication flow?", "what enforces the siege-day invariant?"), this corpus's section is dominated by graph-property meta-questions. + +--- + +## What worked well on this corpus + +- **Throughput:** 1886 nodes extracted in a few minutes at $0 cost. tree-sitter handles all 29 supported languages locally; LLM calls fire only for non-code files. +- **Genuine domain extractions are present:** `SiegeMember`, `BuildingType`, and `MemberRole` in the god-node list are correct. `PostPriorityResponse --uses--> PostPriorityConfig` is a real API contract that INFERRED detection picked up across the Python/TypeScript boundary. +- **`graph.html` visualization:** clear, navigable, easy to filter and search. Useful for browsing communities even when the labelled cohesion scores are low. + +The underlying graph build is solid. The findings above are about how the report layer summarizes that graph into headline metrics — specifically, what those metrics surface on a well-tested cross-language full-stack web app. + +--- + +## Suggested follow-ups + +Patterns from this review that may be worth tracking upstream: + +1. **Test-fixture suppression** — degree centrality on covered codebases consistently surfaces test factories; documenting the ignore-pattern recipe in a "first run on a codebase with tests" section would shorten the iteration loop for users. +2. **Cross-language INFERRED edges in monorepos** — name-based matches between Python and TypeScript types in mixed-language repos may warrant a higher confidence threshold or a "potential contract" label rather than the current "surprising connection" framing. +3. **Docstring-heavy files (Alembic, pytest)** — defaulting to skip migration `versions/` directories, or detecting and grouping docstring nodes that share a structural pattern, would reduce the isolated-node noise materially. + +These are observations, not change requests — users running graphify on similar corpora may find the same patterns useful to know about.