{
  "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 <tr>, 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 <tr>, 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 <span>, 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 <span>, 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 <thead> spanning row, not a standalone <div>.",
      "file_type": "rationale",
      "source_file": "backend/tests/test_image_gen.py",
      "source_location": "L469",
      "community": 2,
      "norm_label": "building number must appear in a <thead> spanning row, not a standalone <div>.",
      "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"
}