{
  "schema_version": 2,
  "captured_at_kst": "2026-10-08 11:51:24 KST",
  "records": {
    "repo_loader": {
      "id": "repo_loader",
      "title": "실제 MuQ 적재 경로",
      "claim": "MuQMuLan 적재 객체에서 내부 MuQ 인코더를 선택합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/audio_features/infrastructure/features.py",
      "source_path": "src/raina_laya/features/audio_features/infrastructure/features.py",
      "sha256": "aec9c954ee2d06e43fb968632b7e1e420fb637c30059504197ec0c4daa6c1c17",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 26,
          "end_line": 33,
          "lines": [
            {
              "line": 26,
              "source": "BACKBONE: Final = MuQBackbone("
            },
            {
              "line": 27,
              "source": "    repository=\"OpenMuQ/MuQ-MuLan-large\","
            },
            {
              "line": 28,
              "source": "    revision=\"2e01c796b71dca71b45251384c04cd7b237c9020\","
            },
            {
              "line": 29,
              "source": "    inner_path=\"model.mulan.audio.model\","
            },
            {
              "line": 30,
              "source": "    layer_order=(10, 9),"
            },
            {
              "line": 31,
              "source": ")"
            },
            {
              "line": 32,
              "source": "EXPECTED_HIDDEN_WIDTH: Final = 1024"
            },
            {
              "line": 33,
              "source": "HIDDEN_STATE_COUNT: Final = 13"
            }
          ]
        },
        {
          "start_line": 482,
          "end_line": 502,
          "lines": [
            {
              "line": 482,
              "source": "def _default_loader("
            },
            {
              "line": 483,
              "source": "    repository: str,"
            },
            {
              "line": 484,
              "source": "    *,"
            },
            {
              "line": 485,
              "source": "    revision: str,"
            },
            {
              "line": 486,
              "source": "    local_files_only: bool = False,"
            },
            {
              "line": 487,
              "source": ") -> LoadedBackbone:"
            },
            {
              "line": 488,
              "source": "    module = import_module(\"muq\")"
            },
            {
              "line": 489,
              "source": "    root = module.MuQMuLan.from_pretrained("
            },
            {
              "line": 490,
              "source": "        repository,"
            },
            {
              "line": 491,
              "source": "        revision=revision,"
            },
            {
              "line": 492,
              "source": "        local_files_only=local_files_only,"
            },
            {
              "line": 493,
              "source": "    )"
            },
            {
              "line": 494,
              "source": "    inner_model = root.mulan.audio.model"
            },
            {
              "line": 495,
              "source": "    if not isinstance(inner_model, torch.nn.Module):"
            },
            {
              "line": 496,
              "source": "        raise HiddenStateContractError("
            },
            {
              "line": 497,
              "source": "            reason=\"model.mulan.audio.model must be a torch module\","
            },
            {
              "line": 498,
              "source": "        )"
            },
            {
              "line": 499,
              "source": "    return LoadedBackbone("
            },
            {
              "line": 500,
              "source": "        root=root,"
            },
            {
              "line": 501,
              "source": "        inner_model=_InnerModelAdapter(model=inner_model),"
            },
            {
              "line": 502,
              "source": "    )"
            }
          ]
        },
        {
          "start_line": 505,
          "end_line": 535,
          "lines": [
            {
              "line": 505,
              "source": "def load_real_inner_model("
            },
            {
              "line": 506,
              "source": "    loader: MuQLoader = _default_loader,"
            },
            {
              "line": 507,
              "source": "    *,"
            },
            {
              "line": 508,
              "source": "    local_files_only: bool = False,"
            },
            {
              "line": 509,
              "source": ") -> InnerAudioModel:"
            },
            {
              "line": 510,
              "source": "    \"\"\"Load and freeze the pinned inner model on one of four CUDA devices.\"\"\""
            },
            {
              "line": 511,
              "source": "    if not torch.cuda.is_available():"
            },
            {
              "line": 512,
              "source": "        raise CudaExtractionRequiredError(reason=\"CUDA is unavailable\")"
            },
            {
              "line": 513,
              "source": "    visible_devices = os.environ.get(\"CUDA_VISIBLE_DEVICES\")"
            },
            {
              "line": 514,
              "source": "    if visible_devices not in ALLOWED_EXTRACTION_DEVICES:"
            },
            {
              "line": 515,
              "source": "        raise CudaExtractionRequiredError("
            },
            {
              "line": 516,
              "source": "            reason=f\"CUDA_VISIBLE_DEVICES is {visible_devices!r}\","
            },
            {
              "line": 517,
              "source": "        )"
            },
            {
              "line": 518,
              "source": ""
            },
            {
              "line": 519,
              "source": "    loaded = loader("
            },
            {
              "line": 520,
              "source": "        BACKBONE.repository,"
            },
            {
              "line": 521,
              "source": "        revision=BACKBONE.revision,"
            },
            {
              "line": 522,
              "source": "        local_files_only=local_files_only,"
            },
            {
              "line": 523,
              "source": "    )"
            },
            {
              "line": 524,
              "source": "    target = ("
            },
            {
              "line": 525,
              "source": "        loaded.inner_model.model"
            },
            {
              "line": 526,
              "source": "        if isinstance(loaded.inner_model, _InnerModelAdapter)"
            },
            {
              "line": 527,
              "source": "        else loaded.root"
            },
            {
              "line": 528,
              "source": "    )"
            },
            {
              "line": 529,
              "source": "    # Injected legacy test loaders may expose a callable rather than a module."
            },
            {
              "line": 530,
              "source": "    # The real pinned adapter retains only its exact inner audio module."
            },
            {
              "line": 531,
              "source": "    _ = target.eval()"
            },
            {
              "line": 532,
              "source": "    _ = target.to(device=\"cuda\", dtype=torch.float32)"
            },
            {
              "line": 533,
              "source": "    for parameter in target.parameters():"
            },
            {
              "line": 534,
              "source": "        parameter.requires_grad = False"
            },
            {
              "line": 535,
              "source": "    return loaded.inner_model"
            }
          ]
        }
      ]
    },
    "raw_frame_call": {
      "id": "raw_frame_call",
      "title": "MuQ 시간별 숨은 상태",
      "claim": "내부 인코더를 직접 호출해 hidden_states를 읽습니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/audio_features/infrastructure/features.py",
      "source_path": "src/raina_laya/features/audio_features/infrastructure/features.py",
      "sha256": "aec9c954ee2d06e43fb968632b7e1e420fb637c30059504197ec0c4daa6c1c17",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 417,
          "end_line": 437,
          "lines": [
            {
              "line": 417,
              "source": "def extract_inner_model_layer_frames("
            },
            {
              "line": 418,
              "source": "    model: InnerAudioModel,"
            },
            {
              "line": 419,
              "source": "    context: AudioContext,"
            },
            {
              "line": 420,
              "source": "    *,"
            },
            {
              "line": 421,
              "source": "    window_start: float,"
            },
            {
              "line": 422,
              "source": "    expected_width: int = EXPECTED_HIDDEN_WIDTH,"
            },
            {
              "line": 423,
              "source": ") -> LayerFrames:"
            },
            {
              "line": 424,
              "source": "    \"\"\"Run one context once and retain every hidden state with its alignment.\"\"\""
            },
            {
              "line": 425,
              "source": "    with torch.autocast(device_type=context.waveform.device.type, enabled=False):"
            },
            {
              "line": 426,
              "source": "        output = model("
            },
            {
              "line": 427,
              "source": "            context.waveform.unsqueeze(0).to(dtype=torch.float32),"
            },
            {
              "line": 428,
              "source": "            output_hidden_states=True,"
            },
            {
              "line": 429,
              "source": "        )"
            },
            {
              "line": 430,
              "source": "    layers = _all_hidden_states(output.hidden_states, expected_width)"
            },
            {
              "line": 431,
              "source": "    frame_timestamps, valid_frame_mask = _frame_alignment("
            },
            {
              "line": 432,
              "source": "        layers[0].shape[1], layers[0].device, context, window_start"
            },
            {
              "line": 433,
              "source": "    )"
            },
            {
              "line": 434,
              "source": "    return LayerFrames("
            },
            {
              "line": 435,
              "source": "        layers=layers,"
            },
            {
              "line": 436,
              "source": "        frame_timestamps=frame_timestamps,"
            },
            {
              "line": 437,
              "source": "        valid_frame_mask=valid_frame_mask,"
            }
          ]
        }
      ]
    },
    "bin_pooling": {
      "id": "bin_pooling",
      "title": "층별 평균과 연결",
      "claim": "시간 구간 안에서 층별 평균을 구하고 선택 순서대로 연결합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/audio_features/infrastructure/features.py",
      "source_path": "src/raina_laya/features/audio_features/infrastructure/features.py",
      "sha256": "aec9c954ee2d06e43fb968632b7e1e420fb637c30059504197ec0c4daa6c1c17",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 243,
          "end_line": 260,
          "lines": [
            {
              "line": 243,
              "source": "    pooled: list[torch.Tensor] = []"
            },
            {
              "line": 244,
              "source": "    for interval in bins:"
            },
            {
              "line": 245,
              "source": "        selected = ("
            },
            {
              "line": 246,
              "source": "            valid_frame_mask"
            },
            {
              "line": 247,
              "source": "            & (frame_timestamps >= interval.start)"
            },
            {
              "line": 248,
              "source": "            & (frame_timestamps < interval.end)"
            },
            {
              "line": 249,
              "source": "        )"
            },
            {
              "line": 250,
              "source": "        if not torch.any(selected):"
            },
            {
              "line": 251,
              "source": "            raise EmptyPoolingBinError(start=interval.start, end=interval.end)"
            },
            {
              "line": 252,
              "source": "        pooled.append("
            },
            {
              "line": 253,
              "source": "            torch.cat("
            },
            {
              "line": 254,
              "source": "                ("
            },
            {
              "line": 255,
              "source": "                    layer_10[0, selected].mean(dim=0),"
            },
            {
              "line": 256,
              "source": "                    layer_9[0, selected].mean(dim=0),"
            },
            {
              "line": 257,
              "source": "                ),"
            },
            {
              "line": 258,
              "source": "            ),"
            },
            {
              "line": 259,
              "source": "        )"
            },
            {
              "line": 260,
              "source": "    return torch.stack(pooled).to(dtype=torch.float32)"
            }
          ]
        },
        {
          "start_line": 464,
          "end_line": 479,
          "lines": [
            {
              "line": 464,
              "source": "    pooled: list[torch.Tensor] = []"
            },
            {
              "line": 465,
              "source": "    for interval in bins:"
            },
            {
              "line": 466,
              "source": "        selected = ("
            },
            {
              "line": 467,
              "source": "            frames.valid_frame_mask"
            },
            {
              "line": 468,
              "source": "            & (frames.frame_timestamps >= interval.start)"
            },
            {
              "line": 469,
              "source": "            & (frames.frame_timestamps < interval.end)"
            },
            {
              "line": 470,
              "source": "        )"
            },
            {
              "line": 471,
              "source": "        rows = selected.nonzero().squeeze(1)"
            },
            {
              "line": 472,
              "source": "        if rows.numel() == 0:"
            },
            {
              "line": 473,
              "source": "            raise EmptyPoolingBinError(start=interval.start, end=interval.end)"
            },
            {
              "line": 474,
              "source": "        pooled.append("
            },
            {
              "line": 475,
              "source": "            torch.stack("
            },
            {
              "line": 476,
              "source": "                [layer[0].index_select(0, rows).mean(dim=0) for layer in frames.layers],"
            },
            {
              "line": 477,
              "source": "            ),"
            },
            {
              "line": 478,
              "source": "        )"
            },
            {
              "line": 479,
              "source": "    return torch.stack(pooled).to(dtype=torch.float32)"
            }
          ]
        }
      ]
    },
    "feature_width_contract": {
      "id": "feature_width_contract",
      "title": "입력 차원 계약",
      "claim": "판단부 입력은 선택한 MuQ 층의 수에 따라 달라집니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/domain/model_inputs.py",
      "source_path": "src/raina_laya/features/grade_model/domain/model_inputs.py",
      "sha256": "aead5f666afe637244e2db195beb159a60fa9b1c8b05427eb04f369c7230ba56",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 8,
          "end_line": 10,
          "lines": [
            {
              "line": 8,
              "source": "FEATURE_WIDTH: Final = 2048"
            },
            {
              "line": 9,
              "source": "LAYER_WIDTH: Final = 1024"
            },
            {
              "line": 10,
              "source": "LAYER_COUNT: Final = 13"
            }
          ]
        }
      ]
    },
    "config_feature_width": {
      "id": "config_feature_width",
      "title": "설정에서 정하는 입력 폭",
      "claim": "층 선택 설정과 판단부 입력 폭을 연결합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/application/v4_training_types.py",
      "source_path": "src/raina_laya/features/grade_model/application/v4_training_types.py",
      "sha256": "c854915a1de881b0643e9232bf6f27950633c2f5faf4449e47b1af6fb37b48f0",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 98,
          "end_line": 100,
          "lines": [
            {
              "line": 98,
              "source": "    embedding_layers: tuple[int, ...] | None = None"
            },
            {
              "line": 99,
              "source": "    gate_soft_target_mix: float | None = None"
            },
            {
              "line": 100,
              "source": "    gate_soft_targets_sha256: str | None = None"
            }
          ]
        },
        {
          "start_line": 106,
          "end_line": 111,
          "lines": [
            {
              "line": 106,
              "source": "    @property"
            },
            {
              "line": 107,
              "source": "    def feature_width(self) -> int:"
            },
            {
              "line": 108,
              "source": "        \"\"\"Return the head input width: the legacy L10+L9 cache or chosen layers.\"\"\""
            },
            {
              "line": 109,
              "source": "        if self.embedding_layers is None:"
            },
            {
              "line": 110,
              "source": "            return FEATURE_WIDTH"
            },
            {
              "line": 111,
              "source": "        return LAYER_WIDTH * len(self.embedding_layers)"
            }
          ]
        }
      ]
    },
    "judgment_tokens": {
      "id": "judgment_tokens",
      "title": "시간 트랜스포머 판단부",
      "claim": "음악 토큰 앞에 세 질문 토큰을 넣고 질문 출력만 점수화합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/domain/model.py",
      "source_path": "src/raina_laya/features/grade_model/domain/model.py",
      "sha256": "ca8996df129dcffe6ebd3cf1a69d3bd20b18e69c31b633b1127a1ad5c7a777a1",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 111,
          "end_line": 164,
          "lines": [
            {
              "line": 111,
              "source": "        self.model_width = model_width"
            },
            {
              "line": 112,
              "source": "        self.feature_width = feature_width"
            },
            {
              "line": 113,
              "source": "        self.transformer_depth = transformer_depth"
            },
            {
              "line": 114,
              "source": "        self.use_time_encoding = use_time_encoding"
            },
            {
              "line": 115,
              "source": "        self.feature_projection: nn.Linear = nn.Linear(feature_width, model_width)"
            },
            {
              "line": 116,
              "source": "        self.projection_norm: nn.LayerNorm = nn.LayerNorm(model_width)"
            },
            {
              "line": 117,
              "source": "        self.ratio_embedding: nn.Linear = nn.Linear(1, model_width)"
            },
            {
              "line": 118,
              "source": "        self.grade_tokens = nn.Parameter(torch.empty(GRADE_COUNT, model_width))"
            },
            {
              "line": 119,
              "source": "        self.type_embedding: nn.Embedding = nn.Embedding(2, model_width)"
            },
            {
              "line": 120,
              "source": "        self.first_transformer_layer: nn.TransformerEncoderLayer = ("
            },
            {
              "line": 121,
              "source": "            nn.TransformerEncoderLayer("
            },
            {
              "line": 122,
              "source": "                d_model=model_width,"
            },
            {
              "line": 123,
              "source": "                nhead=4,"
            },
            {
              "line": 124,
              "source": "                dim_feedforward=model_width * 4,"
            },
            {
              "line": 125,
              "source": "                dropout=transformer_dropout,"
            },
            {
              "line": 126,
              "source": "                activation=\"gelu\","
            },
            {
              "line": 127,
              "source": "                batch_first=True,"
            },
            {
              "line": 128,
              "source": "                norm_first=True,"
            },
            {
              "line": 129,
              "source": "            )"
            },
            {
              "line": 130,
              "source": "        )"
            },
            {
              "line": 131,
              "source": "        self.second_transformer_layer: nn.TransformerEncoderLayer | None = ("
            },
            {
              "line": 132,
              "source": "            nn.TransformerEncoderLayer("
            },
            {
              "line": 133,
              "source": "                d_model=model_width,"
            },
            {
              "line": 134,
              "source": "                nhead=4,"
            },
            {
              "line": 135,
              "source": "                dim_feedforward=model_width * 4,"
            },
            {
              "line": 136,
              "source": "                dropout=transformer_dropout,"
            },
            {
              "line": 137,
              "source": "                activation=\"gelu\","
            },
            {
              "line": 138,
              "source": "                batch_first=True,"
            },
            {
              "line": 139,
              "source": "                norm_first=True,"
            },
            {
              "line": 140,
              "source": "            )"
            },
            {
              "line": 141,
              "source": "            if transformer_depth >= DEEP_TRANSFORMER_DEPTH"
            },
            {
              "line": 142,
              "source": "            else None"
            },
            {
              "line": 143,
              "source": "        )"
            },
            {
              "line": 144,
              "source": "        self.third_transformer_layer: nn.TransformerEncoderLayer | None = ("
            },
            {
              "line": 145,
              "source": "            nn.TransformerEncoderLayer("
            },
            {
              "line": 146,
              "source": "                d_model=model_width,"
            },
            {
              "line": 147,
              "source": "                nhead=4,"
            },
            {
              "line": 148,
              "source": "                dim_feedforward=model_width * 4,"
            },
            {
              "line": 149,
              "source": "                dropout=transformer_dropout,"
            },
            {
              "line": 150,
              "source": "                activation=\"gelu\","
            },
            {
              "line": 151,
              "source": "                batch_first=True,"
            },
            {
              "line": 152,
              "source": "                norm_first=True,"
            },
            {
              "line": 153,
              "source": "            )"
            },
            {
              "line": 154,
              "source": "            if transformer_depth == THIRD_TRANSFORMER_DEPTH"
            },
            {
              "line": 155,
              "source": "            else None"
            },
            {
              "line": 156,
              "source": "        )"
            },
            {
              "line": 157,
              "source": "        self.scorer: nn.Sequential = nn.Sequential("
            },
            {
              "line": 158,
              "source": "            nn.LayerNorm(model_width),"
            },
            {
              "line": 159,
              "source": "            nn.Linear(model_width, model_width),"
            },
            {
              "line": 160,
              "source": "            nn.GELU(),"
            },
            {
              "line": 161,
              "source": "            nn.Linear(model_width, 1, bias=False),"
            },
            {
              "line": 162,
              "source": "        )"
            },
            {
              "line": 163,
              "source": "        _ = nn.init.normal_(self.grade_tokens, mean=0.0, std=0.02)"
            },
            {
              "line": 164,
              "source": "        self.conditional_scorer: nn.Sequential | None = ("
            }
          ]
        },
        {
          "start_line": 191,
          "end_line": 250,
          "lines": [
            {
              "line": 191,
              "source": "    @override"
            },
            {
              "line": 192,
              "source": "    def forward("
            },
            {
              "line": 193,
              "source": "        self,"
            },
            {
              "line": 194,
              "source": "        features: torch.Tensor,"
            },
            {
              "line": 195,
              "source": "        center_times: torch.Tensor,"
            },
            {
              "line": 196,
              "source": "        valid_ratios: torch.Tensor,"
            },
            {
              "line": 197,
              "source": "        padding_mask: torch.Tensor,"
            },
            {
              "line": 198,
              "source": "    ) -> torch.Tensor:"
            },
            {
              "line": 199,
              "source": "        \"\"\"Return three raw query scores, interpreted by the model family."
            },
            {
              "line": 200,
              "source": ""
            },
            {
              "line": 201,
              "source": "        Optional detachment blocks only direct conditional-loss encoder gradients."
            },
            {
              "line": 202,
              "source": "        Global gradient clipping can still couple the subsequent optimizer updates."
            },
            {
              "line": 203,
              "source": "        \"\"\""
            },
            {
              "line": 204,
              "source": "        self._validate_inputs("
            },
            {
              "line": 205,
              "source": "            features,"
            },
            {
              "line": 206,
              "source": "            center_times,"
            },
            {
              "line": 207,
              "source": "            valid_ratios,"
            },
            {
              "line": 208,
              "source": "            padding_mask,"
            },
            {
              "line": 209,
              "source": "            self.feature_width,"
            },
            {
              "line": 210,
              "source": "        )"
            },
            {
              "line": 211,
              "source": "        batch_size = features.shape[0]"
            },
            {
              "line": 212,
              "source": "        normalized: torch.Tensor = functional.normalize(features, p=2.0, dim=-1)"
            },
            {
              "line": 213,
              "source": "        music_tokens: torch.Tensor = self.projection_norm("
            },
            {
              "line": 214,
              "source": "            self.feature_projection(normalized),"
            },
            {
              "line": 215,
              "source": "        )"
            },
            {
              "line": 216,
              "source": "        if self.magnitude_residual is not None:"
            },
            {
              "line": 217,
              "source": "            music_tokens = self.magnitude_residual(features, music_tokens, padding_mask)"
            },
            {
              "line": 218,
              "source": "        if self.local_temporal_residual is not None:"
            },
            {
              "line": 219,
              "source": "            music_tokens = self.local_temporal_residual(music_tokens, padding_mask)"
            },
            {
              "line": 220,
              "source": "        if self.use_time_encoding:"
            },
            {
              "line": 221,
              "source": "            music_tokens = music_tokens + self._sinusoidal_time_encoding("
            },
            {
              "line": 222,
              "source": "                center_times, self.model_width"
            },
            {
              "line": 223,
              "source": "            )"
            },
            {
              "line": 224,
              "source": "        music_tokens = ("
            },
            {
              "line": 225,
              "source": "            music_tokens"
            },
            {
              "line": 226,
              "source": "            + self.ratio_embedding(valid_ratios.unsqueeze(-1))"
            },
            {
              "line": 227,
              "source": "            + self.type_embedding.weight[MUSIC_TYPE_INDEX]"
            },
            {
              "line": 228,
              "source": "        )"
            },
            {
              "line": 229,
              "source": "        grade_tokens = self.grade_tokens.unsqueeze(0).expand(batch_size, -1, -1)"
            },
            {
              "line": 230,
              "source": "        grade_tokens = grade_tokens + self.type_embedding.weight[GRADE_TYPE_INDEX]"
            },
            {
              "line": 231,
              "source": "        sequence: torch.Tensor = torch.cat((grade_tokens, music_tokens), dim=1)"
            },
            {
              "line": 232,
              "source": "        grade_mask = torch.zeros("
            },
            {
              "line": 233,
              "source": "            (batch_size, GRADE_COUNT),"
            },
            {
              "line": 234,
              "source": "            dtype=torch.bool,"
            },
            {
              "line": 235,
              "source": "            device=padding_mask.device,"
            },
            {
              "line": 236,
              "source": "        )"
            },
            {
              "line": 237,
              "source": "        key_padding_mask = torch.cat((grade_mask, padding_mask), dim=1)"
            },
            {
              "line": 238,
              "source": "        for layer in self.transformer_layers:"
            },
            {
              "line": 239,
              "source": "            sequence = layer("
            },
            {
              "line": 240,
              "source": "                sequence,"
            },
            {
              "line": 241,
              "source": "                src_key_padding_mask=key_padding_mask,"
            },
            {
              "line": 242,
              "source": "            )"
            },
            {
              "line": 243,
              "source": "        logits: torch.Tensor = self.scorer(sequence[:, :GRADE_COUNT])"
            },
            {
              "line": 244,
              "source": "        if self.conditional_scorer is not None:"
            },
            {
              "line": 245,
              "source": "            conditional_features = sequence[:, 2:3]"
            },
            {
              "line": 246,
              "source": "            if self.detach_conditional_features:"
            },
            {
              "line": 247,
              "source": "                conditional_features = conditional_features.detach()"
            },
            {
              "line": 248,
              "source": "            conditional: torch.Tensor = self.conditional_scorer(conditional_features)"
            },
            {
              "line": 249,
              "source": "            logits = torch.cat((logits[:, :2], conditional), dim=1)"
            },
            {
              "line": 250,
              "source": "        return logits.squeeze(-1)"
            }
          ]
        }
      ]
    },
    "cache_route": {
      "id": "cache_route",
      "title": "층별 특징 캐시 선택",
      "claim": "명시적 층 선택이 있으면 층별 저장소를 이용합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/workflows/training_inputs.py",
      "source_path": "src/raina_laya/workflows/training_inputs.py",
      "sha256": "b017d6c69bfcf1c7ff28a7f69b8c011f7cfa0b748a2ca163007beeb3b7710f4b",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 311,
          "end_line": 325,
          "lines": [
            {
              "line": 311,
              "source": "        if self.layer_dir is not None:"
            },
            {
              "line": 312,
              "source": "            source_hashes, inventory_digest = _source_inventory("
            },
            {
              "line": 313,
              "source": "                self.cache_inventory_path,"
            },
            {
              "line": 314,
              "source": "                expected_sources,"
            },
            {
              "line": 315,
              "source": "            )"
            },
            {
              "line": 316,
              "source": "            try:"
            },
            {
              "line": 317,
              "source": "                store = self.audio_features.open_layer_stack("
            },
            {
              "line": 318,
              "source": "                    self.layer_dir,"
            },
            {
              "line": 319,
              "source": "                    self.layers,"
            },
            {
              "line": 320,
              "source": "                )"
            },
            {
              "line": 321,
              "source": "            except CacheIncompleteError as error:"
            },
            {
              "line": 322,
              "source": "                raise TrainingRunInputError("
            },
            {
              "line": 323,
              "source": "                    detail=f\"layer store is missing: {error.path}\","
            },
            {
              "line": 324,
              "source": "                ) from error"
            },
            {
              "line": 325,
              "source": "            inventory_digest = store.lineage_digest(inventory_digest)"
            }
          ]
        },
        {
          "start_line": 337,
          "end_line": 344,
          "lines": [
            {
              "line": 337,
              "source": "        else:"
            },
            {
              "line": 338,
              "source": "            source_hashes, inventory_digest = _source_inventory("
            },
            {
              "line": 339,
              "source": "                self.cache_inventory_path,"
            },
            {
              "line": 340,
              "source": "                expected_sources,"
            },
            {
              "line": 341,
              "source": "            )"
            },
            {
              "line": 342,
              "source": "            if not self.embedding_database.is_file():"
            },
            {
              "line": 343,
              "source": "                raise TrainingRunInputError(detail=\"embedding database is missing\")"
            },
            {
              "line": 344,
              "source": "            store = self.audio_features.open_sqlite_store(self.embedding_database)"
            }
          ]
        }
      ]
    },
    "installed_wrapper_loader": {
      "id": "installed_wrapper_loader",
      "title": "설치된 MuQ 구성 코드",
      "claim": "MuQ 계열을 선택하면 MuQ.from_pretrained(model_name)를 호출합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/.venv/lib/python3.13/site-packages/muq/muq_mulan/models/audio.py",
      "source_path": ".venv/lib/python3.13/site-packages/muq/muq_mulan/models/audio.py",
      "sha256": "05231129cffeb5132aded81b9aabc79ee29fc01513f26879ef98b1b0fbb14b9c",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 240,
          "end_line": 243,
          "lines": [
            {
              "line": 240,
              "source": "    def _init_pretrained_model(self, model_name):"
            },
            {
              "line": 241,
              "source": "        if 'muq' in model_name.lower():"
            },
            {
              "line": 242,
              "source": "            from muq import MuQ"
            },
            {
              "line": 243,
              "source": "            self.model = MuQ.from_pretrained(model_name, cache_dir=self.hf_hub_cache_dir)"
            }
          ]
        },
        {
          "start_line": 258,
          "end_line": 261,
          "lines": [
            {
              "line": 258,
              "source": "    def _forward_pretrained_model(self, x):"
            },
            {
              "line": 259,
              "source": "        if 'muq' in self.model_name.lower():"
            },
            {
              "line": 260,
              "source": "            outputs = self.model(x, output_hidden_states=True)"
            },
            {
              "line": 261,
              "source": "            return outputs.hidden_states # 13 layer x [batch_size, Time steps, 1024 feature_dim]"
            }
          ]
        },
        {
          "start_line": 279,
          "end_line": 288,
          "lines": [
            {
              "line": 279,
              "source": "        layer_hidden_states = outputs[self.use_layer_idx]"
            },
            {
              "line": 280,
              "source": ""
            },
            {
              "line": 281,
              "source": "        if no_proj:"
            },
            {
              "line": 282,
              "source": "            outputs = layer_hidden_states"
            },
            {
              "line": 283,
              "source": "        else:"
            },
            {
              "line": 284,
              "source": "            outputs = self.proj(layer_hidden_states)"
            },
            {
              "line": 285,
              "source": "        outputs, layer_results = self.transformer(outputs, return_all_layers=True)"
            },
            {
              "line": 286,
              "source": ""
            },
            {
              "line": 287,
              "source": "        if return_mean:"
            },
            {
              "line": 288,
              "source": "            outputs = outputs.mean(dim = -2)"
            }
          ]
        }
      ]
    },
    "installed_wrapper_construction": {
      "id": "installed_wrapper_construction",
      "title": "MuQMuLan 객체 구성",
      "claim": "MuQ 내부 인코더와 MuLan 투영부가 서로 다른 구성요소임을 확인합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/.venv/lib/python3.13/site-packages/muq/muq_mulan/muq_mulan.py",
      "source_path": ".venv/lib/python3.13/site-packages/muq/muq_mulan/muq_mulan.py",
      "sha256": "594843bf29efed147f97768c60946d8e247dce183af085fc5dffcd3d03a7164e",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 95,
          "end_line": 104,
          "lines": [
            {
              "line": 95,
              "source": "    def create_MuLan_from_config(cls, config:MuQMuLanConfig, hf_hub_cache_dir=None) -> MuLanModel:"
            },
            {
              "line": 96,
              "source": ""
            },
            {
              "line": 97,
              "source": "        audio_transformer = AudioSpectrogramTransformerPretrained("
            },
            {
              "line": 98,
              "source": "            model_name = config.audio_model.name, "
            },
            {
              "line": 99,
              "source": "            model_dim = config.audio_model.model_dim,"
            },
            {
              "line": 100,
              "source": "            use_layer_idx = config.audio_model.use_layer_idx,"
            },
            {
              "line": 101,
              "source": "            **config.audio_transformer,"
            },
            {
              "line": 102,
              "source": "            frozen_pretrained = False,"
            },
            {
              "line": 103,
              "source": "            hf_hub_cache_dir = hf_hub_cache_dir,"
            },
            {
              "line": 104,
              "source": "        )"
            }
          ]
        }
      ]
    },
    "installed_original_muq": {
      "id": "installed_original_muq",
      "title": "설치된 원본 MuQ 구현",
      "claim": "원본 MuQ 클래스의 구성 및 숨은 상태 반환 경로입니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/.venv/lib/python3.13/site-packages/muq/muq/muq.py",
      "source_path": ".venv/lib/python3.13/site-packages/muq/muq/muq.py",
      "sha256": "dbec360f5e3ef622d83f1a73085e67ddde946eb626acad768cc01c1f81374211",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 19,
          "end_line": 20,
          "lines": [
            {
              "line": 19,
              "source": "    encoder_dim:int = field(default=1024)"
            },
            {
              "line": 20,
              "source": "    encoder_depth:int = field(default=12)"
            }
          ]
        },
        {
          "start_line": 35,
          "end_line": 41,
          "lines": [
            {
              "line": 35,
              "source": "class MuQ(nn.Module, PyTorchModelHubMixin):"
            },
            {
              "line": 36,
              "source": "    def __init__(self, config: MuQConfig):"
            },
            {
              "line": 37,
              "source": "        super().__init__()"
            },
            {
              "line": 38,
              "source": "        if isinstance(config, dict):"
            },
            {
              "line": 39,
              "source": "            config = MuQConfig(**config)"
            },
            {
              "line": 40,
              "source": "        self.config = config"
            },
            {
              "line": 41,
              "source": "        self.model = MuQModel("
            }
          ]
        },
        {
          "start_line": 83,
          "end_line": 90,
          "lines": [
            {
              "line": 83,
              "source": "        _, hidden_states = self.model.get_predictions(x, attention_mask=attention_mask, is_features_only=True)"
            },
            {
              "line": 84,
              "source": "        last_hidden_state = hidden_states[-1]"
            },
            {
              "line": 85,
              "source": "        if not output_hidden_states:"
            },
            {
              "line": 86,
              "source": "            return BaseModelOutput(last_hidden_state=last_hidden_state)"
            },
            {
              "line": 87,
              "source": "        return BaseModelOutput("
            },
            {
              "line": 88,
              "source": "            last_hidden_state=last_hidden_state,"
            },
            {
              "line": 89,
              "source": "            hidden_states=hidden_states"
            },
            {
              "line": 90,
              "source": "        )"
            }
          ]
        }
      ]
    },
    "wrapper_cached_config": {
      "id": "wrapper_cached_config",
      "title": "적재 컨테이너 설정",
      "claim": "audio_model = OpenMuQ/MuQ-large-msd-iter를 확인합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/model/raina-laya-best-20261001/huggingface/hub/models--OpenMuQ--MuQ-MuLan-large/snapshots/2e01c796b71dca71b45251384c04cd7b237c9020/config.json",
      "source_path": "model/raina-laya-best-20261001/huggingface/hub/models--OpenMuQ--MuQ-MuLan-large/snapshots/2e01c796b71dca71b45251384c04cd7b237c9020/config.json",
      "sha256": "8fefc545ef87ecd9bcde7417dd03464370c48c321f36dcff20266a752079e468",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 12,
          "end_line": 16,
          "lines": [
            {
              "line": 12,
              "source": "  \"audio_model\": {"
            },
            {
              "line": 13,
              "source": "    \"name\": \"OpenMuQ/MuQ-large-msd-iter\","
            },
            {
              "line": 14,
              "source": "    \"model_dim\": 1024,"
            },
            {
              "line": 15,
              "source": "    \"use_layer_idx\": -1"
            },
            {
              "line": 16,
              "source": "  },"
            }
          ]
        }
      ]
    },
    "original_cached_config": {
      "id": "original_cached_config",
      "title": "원본 MuQ 설정",
      "claim": "encoder_dim = 1024, encoder_depth = 12입니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/model/raina-laya-best-20261001/huggingface/hub/models--OpenMuQ--MuQ-large-msd-iter/snapshots/0562a57814f6f8bbd9fdea0a25921a2fce1a841a/config.json",
      "source_path": "model/raina-laya-best-20261001/huggingface/hub/models--OpenMuQ--MuQ-large-msd-iter/snapshots/0562a57814f6f8bbd9fdea0a25921a2fce1a841a/config.json",
      "sha256": "237335ee27d8fb951ce778701a12a79e06c51ae636dd786f97e45f51ce532543",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 5,
          "end_line": 7,
          "lines": [
            {
              "line": 5,
              "source": "  \"encoder_depth\": 12,"
            },
            {
              "line": 6,
              "source": "  \"encoder_dim\": 1024,"
            },
            {
              "line": 7,
              "source": "  \"features\": ["
            }
          ]
        }
      ]
    },
    "hierarchical": {
      "id": "hierarchical",
      "title": "계층 확률·판정·증류 손실",
      "claim": "관문과 조건부 확률을 분해하며, 실제 Pass 곡에만 A/S 손실을 적용합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/domain/hierarchical.py",
      "source_path": "src/raina_laya/features/grade_model/domain/hierarchical.py",
      "sha256": "107af6d5ed654e5784d5198915a8fdc0b163bdd7b35e073d5aa5b20dcf7ef536",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 22,
          "end_line": 86,
          "lines": [
            {
              "line": 22,
              "source": "def hierarchical_log_probs(logits: torch.Tensor) -> torch.Tensor:"
            },
            {
              "line": 23,
              "source": "    \"\"\"Factor final Fail/A/S probabilities from raw [Fail, Pass, S|Pass] scores.\"\"\""
            },
            {
              "line": 24,
              "source": "    gate = functional.log_softmax(logits[:, :2], dim=1)"
            },
            {
              "line": 25,
              "source": "    h = logits[:, 2]"
            },
            {
              "line": 26,
              "source": "    return torch.stack("
            },
            {
              "line": 27,
              "source": "        ("
            },
            {
              "line": 28,
              "source": "            gate[:, 0],"
            },
            {
              "line": 29,
              "source": "            gate[:, 1] + functional.logsigmoid(-h),"
            },
            {
              "line": 30,
              "source": "            gate[:, 1] + functional.logsigmoid(h),"
            },
            {
              "line": 31,
              "source": "        ),"
            },
            {
              "line": 32,
              "source": "        dim=1,"
            },
            {
              "line": 33,
              "source": "    )"
            },
            {
              "line": 34,
              "source": ""
            },
            {
              "line": 35,
              "source": ""
            },
            {
              "line": 36,
              "source": "def hierarchical_predictions(logits: torch.Tensor) -> torch.Tensor:"
            },
            {
              "line": 37,
              "source": "    \"\"\"Resolve gate ties to Fail and conditional ties to A, never joint argmax.\"\"\""
            },
            {
              "line": 38,
              "source": "    return torch.where("
            },
            {
              "line": 39,
              "source": "        logits[:, 1] > logits[:, 0],"
            },
            {
              "line": 40,
              "source": "        1 + (logits[:, 2] > 0).long(),"
            },
            {
              "line": 41,
              "source": "        0,"
            },
            {
              "line": 42,
              "source": "    )"
            },
            {
              "line": 43,
              "source": ""
            },
            {
              "line": 44,
              "source": ""
            },
            {
              "line": 45,
              "source": "def hierarchical_gate_margin(logits: torch.Tensor) -> torch.Tensor:"
            },
            {
              "line": 46,
              "source": "    \"\"\"Return Pass-minus-Fail gate scores: above zero is Pass, ties stay Fail.\"\"\""
            },
            {
              "line": 47,
              "source": "    return logits[:, 1] - logits[:, 0]"
            },
            {
              "line": 48,
              "source": ""
            },
            {
              "line": 49,
              "source": ""
            },
            {
              "line": 50,
              "source": "def mix_gate_targets("
            },
            {
              "line": 51,
              "source": "    targets: torch.Tensor, teacher_margins: torch.Tensor, mix: float"
            },
            {
              "line": 52,
              "source": ") -> torch.Tensor:"
            },
            {
              "line": 53,
              "source": "    \"\"\"Mix the hard Pass indicator with the teacher gate's Pass probability per song.\"\"\""
            },
            {
              "line": 54,
              "source": "    return (1 - mix) * (targets != 0).to(teacher_margins.dtype) + ("
            },
            {
              "line": 55,
              "source": "        mix * teacher_margins.sigmoid()"
            },
            {
              "line": 56,
              "source": "    )"
            },
            {
              "line": 57,
              "source": ""
            },
            {
              "line": 58,
              "source": ""
            },
            {
              "line": 59,
              "source": "def hierarchical_loss("
            },
            {
              "line": 60,
              "source": "    logits: torch.Tensor,"
            },
            {
              "line": 61,
              "source": "    targets: torch.Tensor,"
            },
            {
              "line": 62,
              "source": "    *,"
            },
            {
              "line": 63,
              "source": "    fail_weight: float = 1.0,"
            },
            {
              "line": 64,
              "source": "    conditional_weight: float = 1.0,"
            },
            {
              "line": 65,
              "source": "    gate_target: torch.Tensor | None = None,"
            },
            {
              "line": 66,
              "source": ") -> torch.Tensor:"
            },
            {
              "line": 67,
              "source": "    \"\"\"Return per-song gate CE plus actual-Pass-masked conditional BCE."
            },
            {
              "line": 68,
              "source": ""
            },
            {
              "line": 69,
              "source": "    `gate_target` replaces only the gate's hard Pass indicator with a per-song soft"
            },
            {
              "line": 70,
              "source": "    Pass probability; Fail weights and the conditional term still follow `targets`."
            },
            {
              "line": 71,
              "source": "    \"\"\""
            },
            {
              "line": 72,
              "source": "    actual_pass = targets != 0"
            },
            {
              "line": 73,
              "source": "    gate = functional.cross_entropy("
            },
            {
              "line": 74,
              "source": "        logits[:, :2],"
            },
            {
              "line": 75,
              "source": "        actual_pass.long()"
            },
            {
              "line": 76,
              "source": "        if gate_target is None"
            },
            {
              "line": 77,
              "source": "        else torch.stack((1 - gate_target, gate_target), dim=1).to(logits.dtype),"
            },
            {
              "line": 78,
              "source": "        reduction=\"none\","
            },
            {
              "line": 79,
              "source": "    )"
            },
            {
              "line": 80,
              "source": "    gate = torch.where(actual_pass, gate, gate * fail_weight)"
            },
            {
              "line": 81,
              "source": "    conditional = functional.binary_cross_entropy_with_logits("
            },
            {
              "line": 82,
              "source": "        logits[:, 2],"
            },
            {
              "line": 83,
              "source": "        (targets == S_INDEX).to(logits.dtype),"
            },
            {
              "line": 84,
              "source": "        reduction=\"none\","
            },
            {
              "line": 85,
              "source": "    )"
            },
            {
              "line": 86,
              "source": "    return gate + conditional_weight * conditional * actual_pass.to(logits.dtype)"
            }
          ]
        }
      ]
    },
    "reject_selection": {
      "id": "reject_selection",
      "title": "거부 구간과 검증 선택 규칙",
      "claim": "실제 Pass 거부 70% 이하 및 판정 곡 Pass→Fail 제약을 두고 두 오류 개수를 순서대로 줄입니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/application/v4_evaluate.py",
      "source_path": "src/raina_laya/features/grade_model/application/v4_evaluate.py",
      "sha256": "cc37695f40e7a1d060788978575bc9020ec88e06ecbc03f4bd943ec8672c4e8c",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 230,
          "end_line": 285,
          "lines": [
            {
              "line": 230,
              "source": "# Share of actual Pass songs a band may reject (user decisions on 2026-10-07: 30%,"
            },
            {
              "line": 231,
              "source": "# then 50%, then 70% at 23:1x KST: \"no Fail->Pass at all comes first\"; see"
            },
            {
              "line": 232,
              "source": "# _Autoresearch/20261007/06_거부_구간_계획.md §7 and AGENTS.md 1-1)."
            },
            {
              "line": 233,
              "source": "MAX_PASS_LOSS: Final = 0.70"
            },
            {
              "line": 234,
              "source": ""
            },
            {
              "line": 235,
              "source": ""
            },
            {
              "line": 236,
              "source": "def select_reject_band("
            },
            {
              "line": 237,
              "source": "    margins: Sequence[float],"
            },
            {
              "line": 238,
              "source": "    targets: Sequence[int],"
            },
            {
              "line": 239,
              "source": "    max_pass_loss: float = MAX_PASS_LOSS,"
            },
            {
              "line": 240,
              "source": "    grid: int = 200,"
            },
            {
              "line": 241,
              "source": ") -> RejectBand:"
            },
            {
              "line": 242,
              "source": "    \"\"\"Choose (lo, hi) on one set's own margins; call it on validation only."
            },
            {
              "line": 243,
              "source": ""
            },
            {
              "line": 244,
              "source": "    Feasible bands reject at most `max_pass_loss` of the actual Pass songs and keep"
            },
            {
              "line": 245,
              "source": "    the decided Pass->Fail rate at or below the no-reject rate at boundary 0 (so a"
            },
            {
              "line": 246,
              "source": "    band never buys Fail->Pass by shifting errors onto Pass->Fail; without this cap"
            },
            {
              "line": 247,
              "source": "    hi = +inf is always \"optimal\"). Among feasible bands: fewest decided Fail->Pass,"
            },
            {
              "line": 248,
              "source": "    then fewest decided Pass->Fail, then fewest rejected songs. Cut points are the"
            },
            {
              "line": 249,
              "source": "    margin quantiles plus 0. Falls back to (0, 0) when nothing is feasible."
            },
            {
              "line": 250,
              "source": "    \"\"\""
            },
            {
              "line": 251,
              "source": "    m = np.asarray(margins, dtype=np.float64)"
            },
            {
              "line": 252,
              "source": "    is_pass = np.asarray(targets) != 0"
            },
            {
              "line": 253,
              "source": "    if m.ndim != 1 or m.shape != is_pass.shape or m.size == 0:"
            },
            {
              "line": 254,
              "source": "        raise EvaluationInputError(detail=\"reject band needs equal-length 1-D inputs\")"
            },
            {
              "line": 255,
              "source": "    pm, fm = np.sort(m[is_pass]), np.sort(m[~is_pass])"
            },
            {
              "line": 256,
              "source": "    if pm.size == 0 or fm.size == 0:"
            },
            {
              "line": 257,
              "source": "        raise EvaluationInputError(detail=\"reject band needs both Fail and Pass songs\")"
            },
            {
              "line": 258,
              "source": "    max_p2f_rate = (pm <= 0.0).sum() / pm.size"
            },
            {
              "line": 259,
              "source": "    cuts = np.unique(np.concatenate([np.quantile(m, np.linspace(0, 1, grid)), [0.0]]))"
            },
            {
              "line": 260,
              "source": "    lo, hi = cuts[:, None], cuts[None, :]"
            },
            {
              "line": 261,
              "source": "    pass_le_lo = np.searchsorted(pm, lo, side=\"right\")  # Pass decided Fail"
            },
            {
              "line": 262,
              "source": "    pass_ge_hi = pm.size - np.searchsorted(pm, hi, side=\"left\")  # Pass decided Pass"
            },
            {
              "line": 263,
              "source": "    fail_ge_hi = fm.size - np.searchsorted(fm, hi, side=\"left\")  # Fail decided Pass"
            },
            {
              "line": 264,
              "source": "    fail_le_lo = np.searchsorted(fm, lo, side=\"right\")"
            },
            {
              "line": 265,
              "source": "    decided_pass = pass_le_lo + pass_ge_hi"
            },
            {
              "line": 266,
              "source": "    rejected = (pm.size - decided_pass) + (fm.size - fail_le_lo - fail_ge_hi)"
            },
            {
              "line": 267,
              "source": "    p2f_rate = np.divide("
            },
            {
              "line": 268,
              "source": "        pass_le_lo,"
            },
            {
              "line": 269,
              "source": "        decided_pass,"
            },
            {
              "line": 270,
              "source": "        out=np.ones(decided_pass.shape),"
            },
            {
              "line": 271,
              "source": "        where=decided_pass > 0,"
            },
            {
              "line": 272,
              "source": "    )"
            },
            {
              "line": 273,
              "source": "    feasible = ("
            },
            {
              "line": 274,
              "source": "        (lo <= hi)"
            },
            {
              "line": 275,
              "source": "        & (pm.size - decided_pass <= max_pass_loss * pm.size + 1e-9)"
            },
            {
              "line": 276,
              "source": "        & (p2f_rate <= max_p2f_rate + 1e-12)"
            },
            {
              "line": 277,
              "source": "    )"
            },
            {
              "line": 278,
              "source": "    if not feasible.any():"
            },
            {
              "line": 279,
              "source": "        return RejectBand(lo=0.0, hi=0.0)"
            },
            {
              "line": 280,
              "source": "    big = 1 << 40"
            },
            {
              "line": 281,
              "source": "    keys = ["
            },
            {
              "line": 282,
              "source": "        np.where(feasible, k, big).ravel() for k in (fail_ge_hi, pass_le_lo, rejected)"
            },
            {
              "line": 283,
              "source": "    ]"
            },
            {
              "line": 284,
              "source": "    i, j = np.unravel_index(np.lexsort(keys[::-1])[0], feasible.shape)"
            },
            {
              "line": 285,
              "source": "    return RejectBand(lo=float(cuts[i]), hi=float(cuts[j]))"
            }
          ]
        },
        {
          "start_line": 315,
          "end_line": 357,
          "lines": [
            {
              "line": 315,
              "source": "def choice_checkpoint_key("
            },
            {
              "line": 316,
              "source": "    checkpoint: ChoiceCheckpoint,"
            },
            {
              "line": 317,
              "source": "    priority: ChoiceSelectionPriority = ChoiceSelectionPriority.GRADE,"
            },
            {
              "line": 318,
              "source": "    minimum_pass_recall: float = 0.79,"
            },
            {
              "line": 319,
              "source": "    *,"
            },
            {
              "line": 320,
              "source": "    maximum_fail_to_pass_rate: float = 0.05,"
            },
            {
              "line": 321,
              "source": ") -> tuple[float, ...]:"
            },
            {
              "line": 322,
              "source": "    \"\"\"Rank validated checkpoints under the explicitly selected research goal.\"\"\""
            },
            {
              "line": 323,
              "source": "    metrics = checkpoint.metrics"
            },
            {
              "line": 324,
              "source": "    macro_f1 = metrics.macro_f1"
            },
            {
              "line": 325,
              "source": "    s_f1 = metrics.per_class[2].f1"
            },
            {
              "line": 326,
              "source": "    nll = metrics.nll"
            },
            {
              "line": 327,
              "source": "    if macro_f1 is None or s_f1 is None or nll is None:"
            },
            {
              "line": 328,
              "source": "        raise CheckpointSelectionError("
            },
            {
              "line": 329,
              "source": "            detail=\"validation needs all three grades to rank checkpoints\""
            },
            {
              "line": 330,
              "source": "        )"
            },
            {
              "line": 331,
              "source": "    match priority:"
            },
            {
              "line": 332,
              "source": "        case ChoiceSelectionPriority.GRADE:"
            },
            {
              "line": 333,
              "source": "            return macro_f1, s_f1, -nll"
            },
            {
              "line": 334,
              "source": "        case ChoiceSelectionPriority.BINARY:"
            },
            {
              "line": 335,
              "source": "            binary = pass_fail_metrics(metrics)"
            },
            {
              "line": 336,
              "source": "            return ("
            },
            {
              "line": 337,
              "source": "                binary.binary_macro_f1,"
            },
            {
              "line": 338,
              "source": "                binary.fail_recall,"
            },
            {
              "line": 339,
              "source": "                binary.pass_recall,"
            },
            {
              "line": 340,
              "source": "                macro_f1,"
            },
            {
              "line": 341,
              "source": "                s_f1,"
            },
            {
              "line": 342,
              "source": "                -nll,"
            },
            {
              "line": 343,
              "source": "            )"
            },
            {
              "line": 344,
              "source": "        case ChoiceSelectionPriority.FAIL_MISS:"
            },
            {
              "line": 345,
              "source": "            binary = pass_fail_metrics(metrics)"
            },
            {
              "line": 346,
              "source": "            if binary.pass_recall < minimum_pass_recall:"
            },
            {
              "line": 347,
              "source": "                raise CheckpointSelectionError("
            },
            {
              "line": 348,
              "source": "                    detail=\"validation Pass recall is below the required floor\""
            },
            {
              "line": 349,
              "source": "                )"
            },
            {
              "line": 350,
              "source": "            return binary.fail_recall, binary.binary_macro_f1, macro_f1, s_f1, -nll"
            },
            {
              "line": 351,
              "source": "        case ChoiceSelectionPriority.RECALL_FIRST:"
            },
            {
              "line": 352,
              "source": "            binary = pass_fail_metrics(metrics)"
            },
            {
              "line": 353,
              "source": "            fail_to_pass_rate = binary.false_negatives / ("
            },
            {
              "line": 354,
              "source": "                binary.true_positives + binary.false_negatives"
            },
            {
              "line": 355,
              "source": "            )"
            },
            {
              "line": 356,
              "source": "            if ("
            },
            {
              "line": 357,
              "source": "                binary.pass_recall < minimum_pass_recall"
            }
          ]
        }
      ]
    },
    "promotion": {
      "id": "promotion",
      "title": "작업용 test의 최고 모델 승격",
      "claim": "검증 후보 목록과 별도로 작업용 test의 판정 곡 오류 개수로 최고 모델을 갱신합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/scripts/champion_loop.py",
      "source_path": "scripts/champion_loop.py",
      "sha256": "22ae2920944bfad26825ef2074ee259504c1231b3399f89b04a3c51359634a44",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 122,
          "end_line": 129,
          "lines": [
            {
              "line": 122,
              "source": "def dominates(new: Row, old: Row) -> bool:"
            },
            {
              "line": 123,
              "source": "    \"\"\"Both error counts <= and at least one < (same test set, equal denominators).\"\"\""
            },
            {
              "line": 124,
              "source": "    (new_f2p, new_p2f), (old_f2p, old_p2f) = counts(new), counts(old)"
            },
            {
              "line": 125,
              "source": "    return ("
            },
            {
              "line": 126,
              "source": "        new_f2p <= old_f2p"
            },
            {
              "line": 127,
              "source": "        and new_p2f <= old_p2f"
            },
            {
              "line": 128,
              "source": "        and (new_f2p < old_f2p or new_p2f < old_p2f)"
            },
            {
              "line": 129,
              "source": "    )"
            }
          ]
        },
        {
          "start_line": 132,
          "end_line": 148,
          "lines": [
            {
              "line": 132,
              "source": "def front_champion(front: list[Row], key: str) -> Row:"
            },
            {
              "line": 133,
              "source": "    \"\"\"The front member with the fewest Fail->Pass, then Pass->Fail, then rejections."
            },
            {
              "line": 134,
              "source": ""
            },
            {
              "line": 135,
              "source": "    Dominance alone leaves the champion to evaluation order (the first point of the"
            },
            {
              "line": 136,
              "source": "    front is never dominated by its neighbours), so under band decisions the"
            },
            {
              "line": 137,
              "source": "    champion is this lexicographic best of the front, the same order the reject"
            },
            {
              "line": 138,
              "source": "    band itself is chosen by. Ties fall to the earliest evaluation."
            },
            {
              "line": 139,
              "source": "    \"\"\""
            },
            {
              "line": 140,
              "source": "    return min("
            },
            {
              "line": 141,
              "source": "        front,"
            },
            {
              "line": 142,
              "source": "        key=lambda r: ("
            },
            {
              "line": 143,
              "source": "            r[key][\"fail_to_pass_count\"],"
            },
            {
              "line": 144,
              "source": "            r[key][\"pass_to_fail_count\"],"
            },
            {
              "line": 145,
              "source": "            r[key].get(\"rejected_total\", 0),"
            },
            {
              "line": 146,
              "source": "            r[\"finished\"],"
            },
            {
              "line": 147,
              "source": "        ),"
            },
            {
              "line": 148,
              "source": "    )"
            }
          ]
        },
        {
          "start_line": 528,
          "end_line": 549,
          "lines": [
            {
              "line": 528,
              "source": "    def apply_eval(self, row: Row) -> None:"
            },
            {
              "line": 529,
              "source": "        \"\"\"Track evaluated checkpoints, the champion and the Pareto set.\"\"\""
            },
            {
              "line": 530,
              "source": "        self.evaluated.add((row[\"run_id\"], row[\"checkpoint_name\"], row[\"role\"]))"
            },
            {
              "line": 531,
              "source": "        if ("
            },
            {
              "line": 532,
              "source": "            row[\"role\"] != \"test\""
            },
            {
              "line": 533,
              "source": "            or row[\"status\"] != \"ok\""
            },
            {
              "line": 534,
              "source": "            or row[\"generation\"] != self.generation"
            },
            {
              "line": 535,
              "source": "        ):"
            },
            {
              "line": 536,
              "source": "            return"
            },
            {
              "line": 537,
              "source": "        key = self.compare_key"
            },
            {
              "line": 538,
              "source": "        if row.get(key) is None:  # evaluated before the band existed: not comparable"
            },
            {
              "line": 539,
              "source": "            return"
            },
            {
              "line": 540,
              "source": "        self.evals.append(row)"
            },
            {
              "line": 541,
              "source": "        self.pareto = ("
            },
            {
              "line": 542,
              "source": "            incremental_pareto_front(self.pareto, row, key)"
            },
            {
              "line": 543,
              "source": "            if self.incremental_pareto"
            },
            {
              "line": 544,
              "source": "            else pareto_front(self.evals, key)"
            },
            {
              "line": 545,
              "source": "        )"
            },
            {
              "line": 546,
              "source": "        if self.band_decisions:"
            },
            {
              "line": 547,
              "source": "            self.champion = front_champion(self.pareto, key)"
            },
            {
              "line": 548,
              "source": "        elif self.champion is None or dominates(row[key], self.champion[key]):"
            },
            {
              "line": 549,
              "source": "            self.champion = row"
            }
          ]
        }
      ]
    },
    "serving_decision": {
      "id": "serving_decision",
      "title": "실제 서빙 판정 규칙",
      "claim": "상한 이상 Pass, 하한 이하 Fail, 그 사이 거부이며 Pass일 때 조건부 점수로 A/S를 정합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/serving/domain/decision.py",
      "source_path": "src/raina_laya/features/serving/domain/decision.py",
      "sha256": "347bd6930d8f80488d6169ce99575d2fdd83376cda19545471b52a94ff9d21d2",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 7,
          "end_line": 29,
          "lines": [
            {
              "line": 7,
              "source": "def decide("
            },
            {
              "line": 8,
              "source": "    margin: float,"
            },
            {
              "line": 9,
              "source": "    conditional: float,"
            },
            {
              "line": 10,
              "source": "    band: RejectBand | None,"
            },
            {
              "line": 11,
              "source": ") -> tuple[Decision, Grade | None]:"
            },
            {
              "line": 12,
              "source": "    \"\"\"Decide one song from its mean gate margin and mean S-given-Pass logit."
            },
            {
              "line": 13,
              "source": ""
            },
            {
              "line": 14,
              "source": "    With a band, `margin >= hi` is Pass, `margin <= lo` is Fail and anything strictly"
            },
            {
              "line": 15,
              "source": "    between is rejected, as in the research evaluation. Without a band the boundary is"
            },
            {
              "line": 16,
              "source": "    zero and a tie stays Fail. A Pass is S when the conditional logit is above zero and"
            },
            {
              "line": 17,
              "source": "    A otherwise."
            },
            {
              "line": 18,
              "source": "    \"\"\""
            },
            {
              "line": 19,
              "source": "    if band is None:"
            },
            {
              "line": 20,
              "source": "        passed = margin > 0.0"
            },
            {
              "line": 21,
              "source": "    elif margin >= band.hi:"
            },
            {
              "line": 22,
              "source": "        passed = True"
            },
            {
              "line": 23,
              "source": "    elif margin <= band.lo:"
            },
            {
              "line": 24,
              "source": "        passed = False"
            },
            {
              "line": 25,
              "source": "    else:"
            },
            {
              "line": 26,
              "source": "        return \"reject\", None"
            },
            {
              "line": 27,
              "source": "    if not passed:"
            },
            {
              "line": 28,
              "source": "        return \"fail\", \"Fail\""
            },
            {
              "line": 29,
              "source": "    return \"pass\", \"S\" if conditional > 0.0 else \"A\""
            }
          ]
        }
      ]
    },
    "current_config": {
      "id": "current_config",
      "title": "14세대 증류 사례의 생성 설정",
      "claim": "14세대 단일 학생 사례의 설정입니다. 현행 16세대 앙상블의 설정과 구분합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/artifacts/champion-loop/configs/gen-014/round-0005/dst_a05.yaml",
      "source_path": "artifacts/champion-loop/configs/gen-014/round-0005/dst_a05.yaml",
      "sha256": "1ea8eab891e4d71820212529edc2183dd7d748acac42d14a3c8ec41d547d3def",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 1,
          "end_line": 44,
          "lines": [
            {
              "line": 1,
              "source": "model_family: raina_laya_hierarchical_v5"
            },
            {
              "line": 2,
              "source": "model_width: 256"
            },
            {
              "line": 3,
              "source": "selection_priority: fail_miss"
            },
            {
              "line": 4,
              "source": "minimum_pass_recall: 0.4"
            },
            {
              "line": 5,
              "source": "maximum_fail_to_pass_rate: 0.05"
            },
            {
              "line": 6,
              "source": "preserve_pareto: true"
            },
            {
              "line": 7,
              "source": "binary_loss_weight: 0.0"
            },
            {
              "line": 8,
              "source": "fail_margin_weight: 0.0"
            },
            {
              "line": 9,
              "source": "binary_margin_weight: 0.0"
            },
            {
              "line": 10,
              "source": "class_order:"
            },
            {
              "line": 11,
              "source": "- Fail"
            },
            {
              "line": 12,
              "source": "- A"
            },
            {
              "line": 13,
              "source": "- S"
            },
            {
              "line": 14,
              "source": "count_source: final_train_dataset"
            },
            {
              "line": 15,
              "source": "class_counts: auto"
            },
            {
              "line": 16,
              "source": "data_root: data/20260912_for_training"
            },
            {
              "line": 17,
              "source": "split: /home/work/Projects/Raina-laya/artifacts/champion-loop/splits/gen-014.yaml"
            },
            {
              "line": 18,
              "source": "cache_inventory: artifacts/sqlite/inventory-20261007-relabel.jsonl"
            },
            {
              "line": 19,
              "source": "embedding_database: artifacts/sqlite/raina-laya-20261005-expert-regrade.sqlite3"
            },
            {
              "line": 20,
              "source": "sampler: shuffle_without_replacement"
            },
            {
              "line": 21,
              "source": "rare_weight_gamma: 0.25"
            },
            {
              "line": 22,
              "source": "class_weights: auto_from_train_counts"
            },
            {
              "line": 23,
              "source": "class_weight_grouping: pass_fail"
            },
            {
              "line": 24,
              "source": "bias_init: hierarchical_weighted_prior"
            },
            {
              "line": 25,
              "source": "supervised_loss: hierarchical_binary_conditional"
            },
            {
              "line": 26,
              "source": "choice_distribution: hierarchical_conditional"
            },
            {
              "line": 27,
              "source": "prediction: binary_gate_then_as"
            },
            {
              "line": 28,
              "source": "center_logits: false"
            },
            {
              "line": 29,
              "source": "rl_weight: 0.0"
            },
            {
              "line": 30,
              "source": "micro_batch: 256"
            },
            {
              "line": 31,
              "source": "grad_accumulation: auto_expected_one_rarest"
            },
            {
              "line": 32,
              "source": "max_accumulation: 16"
            },
            {
              "line": 33,
              "source": "max_epochs: 50"
            },
            {
              "line": 34,
              "source": "patience: 12"
            },
            {
              "line": 35,
              "source": "lr: 0.00015"
            },
            {
              "line": 36,
              "source": "min_lr: 1.0e-06"
            },
            {
              "line": 37,
              "source": "warmup_fraction: 0.05"
            },
            {
              "line": 38,
              "source": "schedule: cosine"
            },
            {
              "line": 39,
              "source": "weight_decay: 0.03"
            },
            {
              "line": 40,
              "source": "grad_clip: 1.0"
            },
            {
              "line": 41,
              "source": "seed: 20260933"
            },
            {
              "line": 42,
              "source": "hierarchical_fail_weight: 8.0"
            },
            {
              "line": 43,
              "source": "transformer_dropout: 0.3"
            },
            {
              "line": 44,
              "source": "gate_soft_targets: artifacts/teachers/gen-014/insample.jsonl"
            }
          ]
        }
      ]
    },
    "checkpoint": {
      "title": "14세대 증류 학생의 가중치 형태",
      "claim": "과거 단일 학생의 입력 폭은 2048입니다. 현행 앙상블 구성원 전체를 나타내는 수치는 아닙니다.",
      "path": "/home/work/Projects/Raina-laya/artifacts/training-runs/champ-g014-r0005-dst_a05/epoch-0050.ckpt",
      "sha256": "08bbc8246d09ecb336723fb08876163cc1e73138300a2804059f6d1a2cc44547",
      "json": {
        "model_family": "raina_laya_hierarchical_v5",
        "model_width": 256,
        "transformer_depth": 2,
        "transformer_dropout": 0.3,
        "embedding_layers": null,
        "raw_output_roles": [
          "fail_gate_score",
          "pass_gate_score",
          "s_given_pass_logit"
        ],
        "rl_weight": 0.0,
        "gate_soft_target_mix": 0.5,
        "feature_projection.weight": [
          256,
          2048
        ],
        "grade_tokens": [
          3,
          256
        ],
        "head_state_elements": 2172931,
        "head_state_shapes": {
          "class_bias": [
            3
          ],
          "temporal_head.grade_tokens": [
            3,
            256
          ],
          "temporal_head.feature_projection.weight": [
            256,
            2048
          ],
          "temporal_head.feature_projection.bias": [
            256
          ],
          "temporal_head.projection_norm.weight": [
            256
          ],
          "temporal_head.projection_norm.bias": [
            256
          ],
          "temporal_head.ratio_embedding.weight": [
            256,
            1
          ],
          "temporal_head.ratio_embedding.bias": [
            256
          ],
          "temporal_head.type_embedding.weight": [
            2,
            256
          ],
          "temporal_head.first_transformer_layer.self_attn.in_proj_weight": [
            768,
            256
          ],
          "temporal_head.first_transformer_layer.self_attn.in_proj_bias": [
            768
          ],
          "temporal_head.first_transformer_layer.self_attn.out_proj.weight": [
            256,
            256
          ],
          "temporal_head.first_transformer_layer.self_attn.out_proj.bias": [
            256
          ],
          "temporal_head.first_transformer_layer.linear1.weight": [
            1024,
            256
          ],
          "temporal_head.first_transformer_layer.linear1.bias": [
            1024
          ],
          "temporal_head.first_transformer_layer.linear2.weight": [
            256,
            1024
          ],
          "temporal_head.first_transformer_layer.linear2.bias": [
            256
          ],
          "temporal_head.first_transformer_layer.norm1.weight": [
            256
          ],
          "temporal_head.first_transformer_layer.norm1.bias": [
            256
          ],
          "temporal_head.first_transformer_layer.norm2.weight": [
            256
          ],
          "temporal_head.first_transformer_layer.norm2.bias": [
            256
          ],
          "temporal_head.second_transformer_layer.self_attn.in_proj_weight": [
            768,
            256
          ],
          "temporal_head.second_transformer_layer.self_attn.in_proj_bias": [
            768
          ],
          "temporal_head.second_transformer_layer.self_attn.out_proj.weight": [
            256,
            256
          ],
          "temporal_head.second_transformer_layer.self_attn.out_proj.bias": [
            256
          ],
          "temporal_head.second_transformer_layer.linear1.weight": [
            1024,
            256
          ],
          "temporal_head.second_transformer_layer.linear1.bias": [
            1024
          ],
          "temporal_head.second_transformer_layer.linear2.weight": [
            256,
            1024
          ],
          "temporal_head.second_transformer_layer.linear2.bias": [
            256
          ],
          "temporal_head.second_transformer_layer.norm1.weight": [
            256
          ],
          "temporal_head.second_transformer_layer.norm1.bias": [
            256
          ],
          "temporal_head.second_transformer_layer.norm2.weight": [
            256
          ],
          "temporal_head.second_transformer_layer.norm2.bias": [
            256
          ],
          "temporal_head.scorer.0.weight": [
            256
          ],
          "temporal_head.scorer.0.bias": [
            256
          ],
          "temporal_head.scorer.1.weight": [
            256,
            256
          ],
          "temporal_head.scorer.1.bias": [
            256
          ],
          "temporal_head.scorer.3.weight": [
            1,
            256
          ]
        }
      },
      "captured_kst": "2026-10-08 00:18:26 KST"
    },
    "single_checkpoint": {
      "title": "실행된 단일 층 후보의 입력",
      "claim": "14세대 L11 후보는 원본 MuQ 한 층의 1,024차원을 그대로 입력합니다.",
      "path": "/home/work/Projects/Raina-laya/artifacts/training-runs/champ-g014-r0008-l11_k8/epoch-0049.ckpt",
      "sha256": "05534e6a78afd0aa29173829131dbc4db05ed27bae4e0f78ee622881296f5b4b",
      "json": {
        "run_id": "champ-g014-r0008-l11_k8",
        "checkpoint_path": "/home/work/Projects/Raina-laya/artifacts/training-runs/champ-g014-r0008-l11_k8/epoch-0049.ckpt",
        "checkpoint_sha256": "05534e6a78afd0aa29173829131dbc4db05ed27bae4e0f78ee622881296f5b4b",
        "epoch": 49,
        "embedding_layers": [
          11
        ],
        "feature_projection_weight_shape": [
          256,
          1024
        ],
        "query_token_parameter_shape": [
          3,
          256
        ],
        "head_input_width": 1024,
        "embedding_database": "/home/work/Projects/Raina-laya/artifacts/sqlite/muq-layers-20261007/layer-11.sqlite3"
      },
      "captured_kst": "2026-10-08 00:18:26 KST"
    },
    "research": {
      "title": "14세대 과거 평가 기록",
      "claim": "작업용 test와 예비 test는 동일한 epoch 50 체크포인트의 수치입니다. 거부로 제외한 곡은 판정 곡 오류율의 분모에 포함되지 않습니다.",
      "path": "artifacts/champion-loop/evals/champ-g014-r0005-dst_a05/epoch-0050.test.json",
      "sha256": "40505de34a566b6e0acc3116789cab806b5583e9c39925eb754cbb436fa7b421",
      "json": {
        "identity": {
          "generation": 14,
          "run_id": "champ-g014-r0005-dst_a05",
          "candidate": "dst_a05",
          "round": 5,
          "epoch": 50,
          "checkpoint_name": "epoch-0050.ckpt",
          "package": "raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050",
          "package_created_kst": "2026-10-07 23:53:20 KST",
          "package_finished_kst": "2026-10-07 23:53:50 KST",
          "run_started_kst": "2026-10-07 23:48:50 KST",
          "run_finished_kst": "2026-10-07 23:52:34 KST",
          "epochs_run": 50
        },
        "metrics": {
          "validation_promoted_epoch": {
            "role": "validation",
            "songs": 3019,
            "whole": {
              "fail_count": 2007,
              "fail_to_pass_count": 94,
              "pass_count": 1012,
              "pass_to_fail_count": 435,
              "pass_correct_count": 577,
              "fail_to_pass_rate": 0.046836073741903336,
              "pass_to_fail_rate": 0.4298418972332016,
              "pass_recall": 0.5701581027667985
            },
            "decided": {
              "fail_count": 1505,
              "fail_to_pass_count": 4,
              "pass_count": 304,
              "pass_to_fail_count": 95,
              "rejected_pass_count": 708,
              "rejected_total": 1210,
              "pass_correct_count": 209,
              "fail_to_pass_rate": 0.0026578073089701,
              "pass_to_fail_rate": 0.3125,
              "pass_recall": 0.6875,
              "rejected_pass_rate": 0.6996047430830039,
              "rejected_total_rate": 0.40079496522027164,
              "decided_total": 1809,
              "decided_total_rate": 0.5992050347797284,
              "accepted_actual_pass_rate_all_actual_pass": 0.20652173913043478
            }
          },
          "test": {
            "source_finished_kst": "2026-10-07 23:53:01 KST",
            "role": "test",
            "songs": 3019,
            "grade_counts": {
              "A": 926,
              "Fail": 2007,
              "S": 86
            },
            "whole": {
              "fail_count": 2007,
              "fail_to_pass_count": 91,
              "pass_count": 1012,
              "pass_to_fail_count": 418,
              "pass_correct_count": 594,
              "fail_to_pass_rate": 0.04534130543099153,
              "pass_to_fail_rate": 0.41304347826086957,
              "pass_recall": 0.5869565217391305
            },
            "decided": {
              "fail_count": 1536,
              "fail_to_pass_count": 0,
              "fail_to_pass_rate": 0.0,
              "pass_correct_count": 216,
              "pass_count": 305,
              "pass_to_fail_count": 89,
              "pass_to_fail_rate": 0.29180327868852457,
              "rejected_pass_count": 707,
              "rejected_pass_rate": 0.6986166007905138,
              "rejected_total": 1178,
              "pass_recall": 0.7081967213114754,
              "rejected_total_rate": 0.39019542894998344,
              "decided_total": 1841,
              "decided_total_rate": 0.6098045710500165,
              "accepted_actual_pass_rate_all_actual_pass": 0.2134387351778656
            },
            "gate_auc": 0.9225066516205139,
            "macro_f1": 0.7444658852163971,
            "s_f1": 0.6938775510204083
          },
          "reserve": {
            "source_finished_kst": "2026-10-07 23:58:28 KST",
            "role": "reserve",
            "songs": 3019,
            "grade_counts": {
              "A": 926,
              "Fail": 2007,
              "S": 86
            },
            "whole": {
              "fail_count": 2007,
              "fail_to_pass_count": 81,
              "pass_count": 1012,
              "pass_to_fail_count": 427,
              "pass_correct_count": 585,
              "fail_to_pass_rate": 0.04035874439461883,
              "pass_to_fail_rate": 0.42193675889328064,
              "pass_recall": 0.5780632411067194
            },
            "decided": {
              "fail_count": 1495,
              "fail_to_pass_count": 3,
              "fail_to_pass_rate": 0.002006688963210702,
              "pass_correct_count": 211,
              "pass_count": 305,
              "pass_to_fail_count": 94,
              "pass_to_fail_rate": 0.3081967213114754,
              "rejected_pass_count": 707,
              "rejected_pass_rate": 0.6986166007905138,
              "rejected_total": 1219,
              "pass_recall": 0.6918032786885245,
              "rejected_total_rate": 0.4037760847962902,
              "decided_total": 1800,
              "decided_total_rate": 0.5962239152037099,
              "accepted_actual_pass_rate_all_actual_pass": 0.208498023715415
            },
            "gate_auc": 0.9232052933310488,
            "macro_f1": 0.7438569730162771,
            "s_f1": 0.697986577181208
          }
        },
        "reject_band": {
          "hi": 4.551337611136127,
          "lo": -3.6336498260498047,
          "max_pass_loss": 0.7,
          "source": "/home/work/Projects/Raina-laya/artifacts/training-runs/champ-g014-r0005-dst_a05/validation-epoch-0050.scores.jsonl",
          "source_sha256": "9e3647e93d3f3c99e3e9dd4a97cdb0e4cc251ee70b68f0a0fd12ef01d569f8e5",
          "source_songs": 3019
        },
        "reserve_check": {
          "generation": 14,
          "run_id": "champ-g014-r0005-dst_a05",
          "epoch": 50,
          "checkpoint_name": "epoch-0050.ckpt",
          "finished": "2026-10-07 23:58:28 KST",
          "test_evals": 800,
          "status": "ok",
          "verdict": "pass",
          "compared": "decided",
          "f2p_z": 1.7565101821121496,
          "f2p_p": 0.03950066718897594,
          "p2f_z": 0.441769205836719,
          "p2f_p": 0.3293281121554887,
          "alpha": 0.01
        },
        "artifacts": {
          "provenance": {
            "path": "model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/provenance.json",
            "sha256": "f56c5c73b5416289bf41e10c51613ca981dbb4bb0a2dbeb1457707bc6130d207"
          },
          "generated_config": {
            "path": "artifacts/champion-loop/configs/gen-014/round-0005/dst_a05.yaml",
            "sha256": "1ea8eab891e4d71820212529edc2183dd7d748acac42d14a3c8ec41d547d3def"
          },
          "packaged_config": {
            "path": "model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/metadata/config.yaml",
            "sha256": "9c7d8fe20b34c7f3e3fe0b76293e76a1b644f1d3e57ede5cd12b2d4a1ed6a2bb"
          },
          "source_checkpoint": {
            "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/epoch-0050.ckpt",
            "sha256": "08bbc8246d09ecb336723fb08876163cc1e73138300a2804059f6d1a2cc44547"
          },
          "local_packaged_checkpoint": {
            "path": "/home/work/Projects/Raina-laya-packages/model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/checkpoint/epoch-0050.ckpt",
            "sha256": "08bbc8246d09ecb336723fb08876163cc1e73138300a2804059f6d1a2cc44547"
          },
          "validation_selection": {
            "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/selection.json",
            "sha256": "c5907579aec322bdca2b77548e7e580e7bbe5b0464a06a8f3759c6cd9344db98"
          },
          "validation_shortlist": {
            "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/pareto.json",
            "sha256": "0f77cf8865da766f27af979ad762d4f688930569181e6e8aac129cfd96e423ef"
          },
          "epoch_validation_metrics": {
            "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/validation-epoch-0050.json",
            "sha256": "2c0d7c94f1fb9f44aeb8c9ebb67d4cf93b4807f6e0f62bb73389077dff2ca741"
          },
          "validation_band_scores": {
            "path": "/home/work/Projects/Raina-laya/artifacts/training-runs/champ-g014-r0005-dst_a05/validation-epoch-0050.scores.jsonl",
            "sha256": "9e3647e93d3f3c99e3e9dd4a97cdb0e4cc251ee70b68f0a0fd12ef01d569f8e5"
          },
          "test_evaluation": {
            "path": "artifacts/champion-loop/evals/champ-g014-r0005-dst_a05/epoch-0050.test.json",
            "sha256": "40505de34a566b6e0acc3116789cab806b5583e9c39925eb754cbb436fa7b421"
          },
          "packaged_test_evaluation": {
            "path": "model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/metadata/test-eval.json",
            "sha256": "40505de34a566b6e0acc3116789cab806b5583e9c39925eb754cbb436fa7b421"
          },
          "reserve_evaluation": {
            "path": "artifacts/champion-loop/evals/champ-g014-r0005-dst_a05/epoch-0050.reserve.json",
            "sha256": "8e63fbdb4da3e7cdb74e8f78cc803387f6831c938a778fa4bf6da1aa72194cc3"
          },
          "split": {
            "path": "/home/work/Projects/Raina-laya/artifacts/champion-loop/splits/gen-014.yaml",
            "sha256": "eb250e428273bd75f11bf478ddd7e40cb2e847aa6475038e5a07a9db0038328e"
          },
          "muq_config": {
            "path": "/home/work/Projects/Raina-laya-packages/model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/huggingface/hub/models--OpenMuQ--MuQ-large-msd-iter/snapshots/0562a57814f6f8bbd9fdea0a25921a2fce1a841a/config.json",
            "sha256": "237335ee27d8fb951ce778701a12a79e06c51ae636dd786f97e45f51ce532543"
          },
          "mulan_config": {
            "path": "/home/work/Projects/Raina-laya-packages/model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/huggingface/hub/models--OpenMuQ--MuQ-MuLan-large/snapshots/2e01c796b71dca71b45251384c04cd7b237c9020/config.json",
            "sha256": "8fefc545ef87ecd9bcde7417dd03464370c48c321f36dcff20266a752079e468"
          },
          "state": {
            "path": "artifacts/champion-loop/state.json",
            "sha256": "5ae95307129b2eaf266412cac8213cc91cb325df2c2e922968f84e2a82a43836",
            "updated_kst": "2026-10-08 00:18:14 KST"
          },
          "ledger": {
            "path": "artifacts/champion-loop/ledger.jsonl",
            "sha256": "a299e447e3428b9675b0672567f1e99fae23b8158da4506e7d07e47a0f87341e"
          }
        }
      },
      "captured_kst": "2026-10-08 00:18:26 KST"
    },
    "selection_record": {
      "title": "14세대 선택·승격 차이 사례",
      "claim": "검증 단일 선택은 epoch 20이며, 실제 승격은 검증 후보 목록의 epoch 50입니다.",
      "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/selection.json",
      "sha256": "c5907579aec322bdca2b77548e7e580e7bbe5b0464a06a8f3759c6cd9344db98",
      "json": {
        "validation_selection_checkpoint": "epoch-0020.ckpt",
        "validation_selection_epoch": 20,
        "validation_selection_priority": "fail_miss",
        "validation_selection_minimum_pass_recall": 0.4,
        "validation_selected_whole": {
          "fail_to_pass_count": 37,
          "fail_count": 2007,
          "pass_to_fail_count": 584,
          "pass_count": 1012,
          "pass_correct_count": 428
        },
        "validation_shortlist_epochs": [
          17,
          20,
          22,
          23,
          24,
          26,
          27,
          28,
          31,
          32,
          35,
          37,
          41,
          45,
          46,
          47,
          50
        ],
        "working_test_promoted_checkpoint": "epoch-0050.ckpt",
        "working_test_promoted_epoch": 50,
        "champion_comparison": "decided",
        "champion_key": [
          "fail_to_pass_count",
          "pass_to_fail_count",
          "rejected_total"
        ]
      },
      "captured_kst": "2026-10-08 00:18:26 KST"
    },
    "score_bias": {
      "id": "score_bias",
      "title": "공유 계산부와 출력별 편향",
      "claim": "시간 판단부가 낸 세 점수에 학습되는 출력별 편향 3개를 더합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/domain/v4_model.py",
      "source_path": "src/raina_laya/features/grade_model/domain/v4_model.py",
      "sha256": "42fe06b4023a0b575e8d95cbc1a293d8307ba6ba0ba1029cdc4440586b279d01",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 35,
          "end_line": 52,
          "lines": [
            {
              "line": 35,
              "source": "        self.temporal_head = TemporalGradeHead("
            },
            {
              "line": 36,
              "source": "            model_width,"
            },
            {
              "line": 37,
              "source": "            transformer_dropout=transformer_dropout,"
            },
            {
              "line": 38,
              "source": "            transformer_depth=transformer_depth,"
            },
            {
              "line": 39,
              "source": "            use_time_encoding=use_time_encoding,"
            },
            {
              "line": 40,
              "source": "            separate_conditional_scorer=separate_conditional_scorer,"
            },
            {
              "line": 41,
              "source": "            detach_conditional_features=detach_conditional_features,"
            },
            {
              "line": 42,
              "source": "            local_temporal_residual=local_temporal_residual,"
            },
            {
              "line": 43,
              "source": "            magnitude_normalizer=magnitude_normalizer,"
            },
            {
              "line": 44,
              "source": "            feature_width=feature_width,"
            },
            {
              "line": 45,
              "source": "        )"
            },
            {
              "line": 46,
              "source": "        self.class_bias = nn.Parameter(torch.tensor(biases, dtype=torch.float32))"
            },
            {
              "line": 47,
              "source": "        output = self.temporal_head.scorer[-1]"
            },
            {
              "line": 48,
              "source": "        if not isinstance(output, nn.Linear):"
            },
            {
              "line": 49,
              "source": "            raise TemporalGradeInputError("
            },
            {
              "line": 50,
              "source": "                detail=\"temporal scorer output must be linear\""
            },
            {
              "line": 51,
              "source": "            )"
            },
            {
              "line": 52,
              "source": "        nn.init.normal_(output.weight, mean=0.0, std=0.001)"
            }
          ]
        },
        {
          "start_line": 65,
          "end_line": 76,
          "lines": [
            {
              "line": 65,
              "source": "    def forward("
            },
            {
              "line": 66,
              "source": "        self,"
            },
            {
              "line": 67,
              "source": "        features: torch.Tensor,"
            },
            {
              "line": 68,
              "source": "        center_times: torch.Tensor,"
            },
            {
              "line": 69,
              "source": "        valid_ratios: torch.Tensor,"
            },
            {
              "line": 70,
              "source": "        padding_mask: torch.Tensor,"
            },
            {
              "line": 71,
              "source": "    ) -> torch.Tensor:"
            },
            {
              "line": 72,
              "source": "        \"\"\"Return uncentered logits with the trainable loss-prior bias.\"\"\""
            },
            {
              "line": 73,
              "source": "        return ("
            },
            {
              "line": 74,
              "source": "            self.temporal_head(features, center_times, valid_ratios, padding_mask)"
            },
            {
              "line": 75,
              "source": "            + self.class_bias"
            },
            {
              "line": 76,
              "source": "        )"
            }
          ]
        }
      ]
    },
    "audio_order": {
      "id": "audio_order",
      "title": "원본 문맥 절단과 소리 준비 순서",
      "claim": "원본 샘플 시각으로 문맥을 절단한 뒤 각 문맥의 모노 변환·리샘플링·채움을 수행합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/audio_features/application/build_cache.py",
      "source_path": "src/raina_laya/features/audio_features/application/build_cache.py",
      "sha256": "30cda64293a26e0892ea46b8edf6886c0ecee537ed4b0f549a72183bce888c00",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 118,
          "end_line": 134,
          "lines": [
            {
              "line": 118,
              "source": "    for offset in range(0, len(plan.windows), window_batch_size):"
            },
            {
              "line": 119,
              "source": "        windows = plan.windows[offset : offset + window_batch_size]"
            },
            {
              "line": 120,
              "source": "        contexts = tuple("
            },
            {
              "line": 121,
              "source": "            prepare_audio_context("
            },
            {
              "line": 122,
              "source": "                item.waveform["
            },
            {
              "line": 123,
              "source": "                    ...,"
            },
            {
              "line": 124,
              "source": "                    round(window.start * item.sample_rate) : min("
            },
            {
              "line": 125,
              "source": "                        round(window.end * item.sample_rate),"
            },
            {
              "line": 126,
              "source": "                        item.waveform.shape[-1],"
            },
            {
              "line": 127,
              "source": "                    ),"
            },
            {
              "line": 128,
              "source": "                ],"
            },
            {
              "line": 129,
              "source": "                item.sample_rate,"
            },
            {
              "line": 130,
              "source": "                resampler=resampler,"
            },
            {
              "line": 131,
              "source": "            )"
            },
            {
              "line": 132,
              "source": "            for window in windows"
            },
            {
              "line": 133,
              "source": "        )"
            },
            {
              "line": 134,
              "source": "        if window_batch_size == 1:"
            }
          ]
        },
        {
          "start_line": 196,
          "end_line": 213,
          "lines": [
            {
              "line": 196,
              "source": "    \"\"\""
            },
            {
              "line": 197,
              "source": "    duration_seconds = item.waveform.shape[-1] / item.sample_rate"
            },
            {
              "line": 198,
              "source": "    plan = plan_temporal_bins(duration_seconds)"
            },
            {
              "line": 199,
              "source": "    frames_by_window: dict[float, LayerFrames] = {}"
            },
            {
              "line": 200,
              "source": "    frame_counts: list[int] = []"
            },
            {
              "line": 201,
              "source": "    for window in plan.windows:"
            },
            {
              "line": 202,
              "source": "        context = prepare_audio_context("
            },
            {
              "line": 203,
              "source": "            item.waveform["
            },
            {
              "line": 204,
              "source": "                ...,"
            },
            {
              "line": 205,
              "source": "                round(window.start * item.sample_rate) : min("
            },
            {
              "line": 206,
              "source": "                    round(window.end * item.sample_rate),"
            },
            {
              "line": 207,
              "source": "                    item.waveform.shape[-1],"
            },
            {
              "line": 208,
              "source": "                ),"
            },
            {
              "line": 209,
              "source": "            ],"
            },
            {
              "line": 210,
              "source": "            item.sample_rate,"
            },
            {
              "line": 211,
              "source": "            resampler=resampler,"
            },
            {
              "line": 212,
              "source": "        )"
            },
            {
              "line": 213,
              "source": "        frames = extract_inner_model_layer_frames("
            }
          ]
        }
      ]
    },
    "temporal_bins": {
      "id": "temporal_bins",
      "title": "문맥·꼬리·구간 유효 비율",
      "claim": "실제 구간의 valid_ratio는 1.0이며, 0.5초 미만의 양수 꼬리만 앞 구간과 합칩니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/audio_features/domain/bins.py",
      "source_path": "src/raina_laya/features/audio_features/domain/bins.py",
      "sha256": "3dab9e4ccf9e2d4d8cbf25c121dd7afba5be77f98f4230fd693df4d60af7e25a",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 151,
          "end_line": 209,
          "lines": [
            {
              "line": 151,
              "source": "def _context_windows("
            },
            {
              "line": 152,
              "source": "    duration_seconds: float,"
            },
            {
              "line": 153,
              "source": "    policy: TemporalBinPolicy,"
            },
            {
              "line": 154,
              "source": ") -> tuple[ContextWindow, ...]:"
            },
            {
              "line": 155,
              "source": "    context = policy.context_seconds"
            },
            {
              "line": 156,
              "source": "    if duration_seconds <= context:"
            },
            {
              "line": 157,
              "source": "        return (ContextWindow(start=0.0, end=context),)"
            },
            {
              "line": 158,
              "source": ""
            },
            {
              "line": 159,
              "source": "    full_count = int(duration_seconds // context)"
            },
            {
              "line": 160,
              "source": "    starts = [float(index) * context for index in range(full_count)]"
            },
            {
              "line": 161,
              "source": "    if starts[-1] + context != duration_seconds:"
            },
            {
              "line": 162,
              "source": "        starts.append(duration_seconds - context)"
            },
            {
              "line": 163,
              "source": "    return tuple(ContextWindow(start=start, end=start + context) for start in starts)"
            },
            {
              "line": 164,
              "source": ""
            },
            {
              "line": 165,
              "source": ""
            },
            {
              "line": 166,
              "source": "def _global_intervals("
            },
            {
              "line": 167,
              "source": "    duration_seconds: float,"
            },
            {
              "line": 168,
              "source": "    policy: TemporalBinPolicy,"
            },
            {
              "line": 169,
              "source": ") -> tuple[tuple[float, float], ...]:"
            },
            {
              "line": 170,
              "source": "    width = policy.pool_bin_seconds"
            },
            {
              "line": 171,
              "source": "    full_count = int(duration_seconds // width)"
            },
            {
              "line": 172,
              "source": "    intervals = ["
            },
            {
              "line": 173,
              "source": "        (float(index) * width, float(index + 1) * width) for index in range(full_count)"
            },
            {
              "line": 174,
              "source": "    ]"
            },
            {
              "line": 175,
              "source": "    full_end = float(full_count) * width"
            },
            {
              "line": 176,
              "source": "    tail = duration_seconds - full_end"
            },
            {
              "line": 177,
              "source": "    if tail > 0:"
            },
            {
              "line": 178,
              "source": "        if tail < policy.min_tail_bin_seconds and intervals:"
            },
            {
              "line": 179,
              "source": "            previous_start, _ = intervals[-1]"
            },
            {
              "line": 180,
              "source": "            intervals[-1] = (previous_start, duration_seconds)"
            },
            {
              "line": 181,
              "source": "        else:"
            },
            {
              "line": 182,
              "source": "            intervals.append((full_end, duration_seconds))"
            },
            {
              "line": 183,
              "source": "    return tuple(intervals)"
            },
            {
              "line": 184,
              "source": ""
            },
            {
              "line": 185,
              "source": ""
            },
            {
              "line": 186,
              "source": "def plan_temporal_bins("
            },
            {
              "line": 187,
              "source": "    duration_seconds: float,"
            },
            {
              "line": 188,
              "source": "    policy: TemporalBinPolicy = DEFAULT_POLICY,"
            },
            {
              "line": 189,
              "source": ") -> TemporalPlan:"
            },
            {
              "line": 190,
              "source": "    \"\"\"Plan fixed contexts and assign each global bin to its earliest owner.\"\"\""
            },
            {
              "line": 191,
              "source": "    if not isfinite(duration_seconds) or duration_seconds <= 0:"
            },
            {
              "line": 192,
              "source": "        raise InvalidDurationError(duration_seconds=duration_seconds)"
            },
            {
              "line": 193,
              "source": "    validated_policy = _validated_policy(policy)"
            },
            {
              "line": 194,
              "source": "    windows = _context_windows(duration_seconds, validated_policy)"
            },
            {
              "line": 195,
              "source": "    bins = tuple("
            },
            {
              "line": 196,
              "source": "        GlobalBin("
            },
            {
              "line": 197,
              "source": "            start=start,"
            },
            {
              "line": 198,
              "source": "            end=end,"
            },
            {
              "line": 199,
              "source": "            center=(start + end) / 2,"
            },
            {
              "line": 200,
              "source": "            valid_ratio=1.0,"
            },
            {
              "line": 201,
              "source": "            owner_window_start=next("
            },
            {
              "line": 202,
              "source": "                window.start"
            },
            {
              "line": 203,
              "source": "                for window in windows"
            },
            {
              "line": 204,
              "source": "                if window.start <= start and end <= window.end"
            },
            {
              "line": 205,
              "source": "            ),"
            },
            {
              "line": 206,
              "source": "        )"
            },
            {
              "line": 207,
              "source": "        for start, end in _global_intervals(duration_seconds, validated_policy)"
            },
            {
              "line": 208,
              "source": "    )"
            },
            {
              "line": 209,
              "source": "    return TemporalPlan(windows=windows, bins=bins)"
            }
          ]
        }
      ]
    },
    "pooling_mask": {
      "id": "pooling_mask",
      "title": "프레임 중심과 채움 제외 범위",
      "claim": "반환된 프레임 수로 중심 시각을 만들고 유효 소리 밖의 중심을 평균에서 제외합니다. MuQ 호출에는 채움 attention_mask를 전달하지 않습니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/audio_features/infrastructure/features.py",
      "source_path": "src/raina_laya/features/audio_features/infrastructure/features.py",
      "sha256": "aec9c954ee2d06e43fb968632b7e1e420fb637c30059504197ec0c4daa6c1c17",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 323,
          "end_line": 340,
          "lines": [
            {
              "line": 323,
              "source": "def _frame_alignment("
            },
            {
              "line": 324,
              "source": "    frame_count: int,"
            },
            {
              "line": 325,
              "source": "    device: torch.device,"
            },
            {
              "line": 326,
              "source": "    context: AudioContext,"
            },
            {
              "line": 327,
              "source": "    window_start: float,"
            },
            {
              "line": 328,
              "source": ") -> tuple[torch.Tensor, torch.Tensor]:"
            },
            {
              "line": 329,
              "source": "    \"\"\"Return (global frame timestamps, valid-frame mask) of one model context.\"\"\""
            },
            {
              "line": 330,
              "source": "    if frame_count <= 0:"
            },
            {
              "line": 331,
              "source": "        raise HiddenStateContractError(reason=\"selected layers contain no frames\")"
            },
            {
              "line": 332,
              "source": "    context_seconds = context.waveform.numel() / context.sample_rate"
            },
            {
              "line": 333,
              "source": "    frame_width = context_seconds / frame_count"
            },
            {
              "line": 334,
              "source": "    local_centers = ("
            },
            {
              "line": 335,
              "source": "        torch.arange(frame_count, dtype=torch.float32, device=device) + 0.5"
            },
            {
              "line": 336,
              "source": "    ) * frame_width"
            },
            {
              "line": 337,
              "source": "    valid_seconds = context.valid_samples / context.sample_rate"
            },
            {
              "line": 338,
              "source": "    valid_frame_mask = local_centers < valid_seconds"
            },
            {
              "line": 339,
              "source": "    frame_timestamps = local_centers + window_start"
            },
            {
              "line": 340,
              "source": "    return frame_timestamps, valid_frame_mask"
            }
          ]
        },
        {
          "start_line": 417,
          "end_line": 438,
          "lines": [
            {
              "line": 417,
              "source": "def extract_inner_model_layer_frames("
            },
            {
              "line": 418,
              "source": "    model: InnerAudioModel,"
            },
            {
              "line": 419,
              "source": "    context: AudioContext,"
            },
            {
              "line": 420,
              "source": "    *,"
            },
            {
              "line": 421,
              "source": "    window_start: float,"
            },
            {
              "line": 422,
              "source": "    expected_width: int = EXPECTED_HIDDEN_WIDTH,"
            },
            {
              "line": 423,
              "source": ") -> LayerFrames:"
            },
            {
              "line": 424,
              "source": "    \"\"\"Run one context once and retain every hidden state with its alignment.\"\"\""
            },
            {
              "line": 425,
              "source": "    with torch.autocast(device_type=context.waveform.device.type, enabled=False):"
            },
            {
              "line": 426,
              "source": "        output = model("
            },
            {
              "line": 427,
              "source": "            context.waveform.unsqueeze(0).to(dtype=torch.float32),"
            },
            {
              "line": 428,
              "source": "            output_hidden_states=True,"
            },
            {
              "line": 429,
              "source": "        )"
            },
            {
              "line": 430,
              "source": "    layers = _all_hidden_states(output.hidden_states, expected_width)"
            },
            {
              "line": 431,
              "source": "    frame_timestamps, valid_frame_mask = _frame_alignment("
            },
            {
              "line": 432,
              "source": "        layers[0].shape[1], layers[0].device, context, window_start"
            },
            {
              "line": 433,
              "source": "    )"
            },
            {
              "line": 434,
              "source": "    return LayerFrames("
            },
            {
              "line": 435,
              "source": "        layers=layers,"
            },
            {
              "line": 436,
              "source": "        frame_timestamps=frame_timestamps,"
            },
            {
              "line": 437,
              "source": "        valid_frame_mask=valid_frame_mask,"
            },
            {
              "line": 438,
              "source": "    )"
            }
          ]
        },
        {
          "start_line": 464,
          "end_line": 479,
          "lines": [
            {
              "line": 464,
              "source": "    pooled: list[torch.Tensor] = []"
            },
            {
              "line": 465,
              "source": "    for interval in bins:"
            },
            {
              "line": 466,
              "source": "        selected = ("
            },
            {
              "line": 467,
              "source": "            frames.valid_frame_mask"
            },
            {
              "line": 468,
              "source": "            & (frames.frame_timestamps >= interval.start)"
            },
            {
              "line": 469,
              "source": "            & (frames.frame_timestamps < interval.end)"
            },
            {
              "line": 470,
              "source": "        )"
            },
            {
              "line": 471,
              "source": "        rows = selected.nonzero().squeeze(1)"
            },
            {
              "line": 472,
              "source": "        if rows.numel() == 0:"
            },
            {
              "line": 473,
              "source": "            raise EmptyPoolingBinError(start=interval.start, end=interval.end)"
            },
            {
              "line": 474,
              "source": "        pooled.append("
            },
            {
              "line": 475,
              "source": "            torch.stack("
            },
            {
              "line": 476,
              "source": "                [layer[0].index_select(0, rows).mean(dim=0) for layer in frames.layers],"
            },
            {
              "line": 477,
              "source": "            ),"
            },
            {
              "line": 478,
              "source": "        )"
            },
            {
              "line": 479,
              "source": "    return torch.stack(pooled).to(dtype=torch.float32)"
            }
          ]
        }
      ]
    },
    "equal_band_counts": {
      "id": "equal_band_counts",
      "title": "같은 거부 경계의 평가 불일치",
      "claim": "lo==hi의 정확한 동률은 서빙과 평가가 다르게 처리하며, 구간 선택에서는 중복 집계될 수 있습니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/application/v4_evaluate.py",
      "source_path": "src/raina_laya/features/grade_model/application/v4_evaluate.py",
      "sha256": "cc37695f40e7a1d060788978575bc9020ec88e06ecbc03f4bd943ec8672c4e8c",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 204,
          "end_line": 227,
          "lines": [
            {
              "line": 204,
              "source": "def reject_band_counts("
            },
            {
              "line": 205,
              "source": "    margins: Sequence[float], targets: Sequence[int], band: RejectBand"
            },
            {
              "line": 206,
              "source": ") -> dict[str, float]:"
            },
            {
              "line": 207,
              "source": "    \"\"\"Decided-song error counts once songs with lo < margin < hi are rejected.\"\"\""
            },
            {
              "line": 208,
              "source": "    m = np.asarray(margins, dtype=np.float64)"
            },
            {
              "line": 209,
              "source": "    is_pass = np.asarray(targets) != 0"
            },
            {
              "line": 210,
              "source": "    rejected = (m > band.lo) & (m < band.hi)"
            },
            {
              "line": 211,
              "source": "    f2p = int((~is_pass & (m >= band.hi)).sum())"
            },
            {
              "line": 212,
              "source": "    fail_count = int((~is_pass & ~rejected).sum())"
            },
            {
              "line": 213,
              "source": "    p2f = int((is_pass & (m <= band.lo)).sum())"
            },
            {
              "line": 214,
              "source": "    pass_count = int((is_pass & ~rejected).sum())"
            },
            {
              "line": 215,
              "source": "    rejected_pass = int((is_pass & rejected).sum())"
            },
            {
              "line": 216,
              "source": "    return {"
            },
            {
              "line": 217,
              "source": "        \"fail_to_pass_count\": f2p,"
            },
            {
              "line": 218,
              "source": "        \"fail_count\": fail_count,"
            },
            {
              "line": 219,
              "source": "        \"fail_to_pass_rate\": f2p / fail_count if fail_count else 0.0,"
            },
            {
              "line": 220,
              "source": "        \"pass_to_fail_count\": p2f,"
            },
            {
              "line": 221,
              "source": "        \"pass_correct_count\": pass_count - p2f,"
            },
            {
              "line": 222,
              "source": "        \"pass_count\": pass_count,"
            },
            {
              "line": 223,
              "source": "        \"pass_to_fail_rate\": p2f / pass_count if pass_count else 0.0,"
            },
            {
              "line": 224,
              "source": "        \"rejected_total\": int(rejected.sum()),"
            },
            {
              "line": 225,
              "source": "        \"rejected_pass_count\": rejected_pass,"
            },
            {
              "line": 226,
              "source": "        \"rejected_pass_rate\": rejected_pass / max(int(is_pass.sum()), 1),"
            },
            {
              "line": 227,
              "source": "    }"
            }
          ]
        },
        {
          "start_line": 261,
          "end_line": 281,
          "lines": [
            {
              "line": 261,
              "source": "    pass_le_lo = np.searchsorted(pm, lo, side=\"right\")  # Pass decided Fail"
            },
            {
              "line": 262,
              "source": "    pass_ge_hi = pm.size - np.searchsorted(pm, hi, side=\"left\")  # Pass decided Pass"
            },
            {
              "line": 263,
              "source": "    fail_ge_hi = fm.size - np.searchsorted(fm, hi, side=\"left\")  # Fail decided Pass"
            },
            {
              "line": 264,
              "source": "    fail_le_lo = np.searchsorted(fm, lo, side=\"right\")"
            },
            {
              "line": 265,
              "source": "    decided_pass = pass_le_lo + pass_ge_hi"
            },
            {
              "line": 266,
              "source": "    rejected = (pm.size - decided_pass) + (fm.size - fail_le_lo - fail_ge_hi)"
            },
            {
              "line": 267,
              "source": "    p2f_rate = np.divide("
            },
            {
              "line": 268,
              "source": "        pass_le_lo,"
            },
            {
              "line": 269,
              "source": "        decided_pass,"
            },
            {
              "line": 270,
              "source": "        out=np.ones(decided_pass.shape),"
            },
            {
              "line": 271,
              "source": "        where=decided_pass > 0,"
            },
            {
              "line": 272,
              "source": "    )"
            },
            {
              "line": 273,
              "source": "    feasible = ("
            },
            {
              "line": 274,
              "source": "        (lo <= hi)"
            },
            {
              "line": 275,
              "source": "        & (pm.size - decided_pass <= max_pass_loss * pm.size + 1e-9)"
            },
            {
              "line": 276,
              "source": "        & (p2f_rate <= max_p2f_rate + 1e-12)"
            },
            {
              "line": 277,
              "source": "    )"
            },
            {
              "line": 278,
              "source": "    if not feasible.any():"
            },
            {
              "line": 279,
              "source": "        return RejectBand(lo=0.0, hi=0.0)"
            },
            {
              "line": 280,
              "source": "    big = 1 << 40"
            },
            {
              "line": 281,
              "source": "    keys = ["
            }
          ]
        }
      ]
    },
    "band_contract": {
      "id": "band_contract",
      "title": "패키지 거부 경계 계약",
      "claim": "패키지 읽기 계약은 lo>hi만 거부하므로 lo==hi가 허용됩니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/serving/infrastructure/package.py",
      "source_path": "src/raina_laya/features/serving/infrastructure/package.py",
      "sha256": "ce1f7db6f88a2c48aca69c44945f7630c5468c8b76bfce3ea516d02fd5420172",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 45,
          "end_line": 65,
          "lines": [
            {
              "line": 45,
              "source": "    if ("
            },
            {
              "line": 46,
              "source": "        isinstance(value, bool)"
            },
            {
              "line": 47,
              "source": "        or not isinstance(value, (int, float))"
            },
            {
              "line": 48,
              "source": "        or not math.isfinite(value)"
            },
            {
              "line": 49,
              "source": "    ):"
            },
            {
              "line": 50,
              "source": "        raise BackendLoadError(detail=\"reject_band lo and hi must be finite numbers\")"
            },
            {
              "line": 51,
              "source": "    return float(value)"
            },
            {
              "line": 52,
              "source": ""
            },
            {
              "line": 53,
              "source": ""
            },
            {
              "line": 54,
              "source": "def _band(value: object) -> RejectBand | None:"
            },
            {
              "line": 55,
              "source": "    \"\"\"Parse the packaged reject band; an absent band decides at margin zero.\"\"\""
            },
            {
              "line": 56,
              "source": "    if value is None:"
            },
            {
              "line": 57,
              "source": "        return None"
            },
            {
              "line": 58,
              "source": "    if not isinstance(value, dict):"
            },
            {
              "line": 59,
              "source": "        raise BackendLoadError(detail=\"reject_band must be a mapping\")"
            },
            {
              "line": 60,
              "source": "    band = RejectBand(lo=_bound(value.get(\"lo\")), hi=_bound(value.get(\"hi\")))"
            },
            {
              "line": 61,
              "source": "    if band.lo > band.hi:"
            },
            {
              "line": 62,
              "source": "        raise BackendLoadError(detail=\"reject_band needs lo <= hi\")"
            },
            {
              "line": 63,
              "source": "    return band"
            },
            {
              "line": 64,
              "source": ""
            },
            {
              "line": 65,
              "source": ""
            }
          ]
        }
      ]
    },
    "training_objective": {
      "id": "training_objective",
      "title": "가중 손실과 실제 곡 수 정규화",
      "claim": "외부 클래스 가중치는 곡별 손실 전체에 곱하며, 누적 기울기는 실제 곡 수로 나눕니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/grade_model/application/v4_train.py",
      "source_path": "src/raina_laya/features/grade_model/application/v4_train.py",
      "sha256": "cd8a02944c48ba5e3a481d30cdaf7e592588c2bf122ae4103107f99176d847b0",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 98,
          "end_line": 159,
          "lines": [
            {
              "line": 98,
              "source": "def _backward("
            },
            {
              "line": 99,
              "source": "    request: ChoiceTrainRequest,"
            },
            {
              "line": 100,
              "source": "    indices: list[int],"
            },
            {
              "line": 101,
              "source": "    state: _EpochState,"
            },
            {
              "line": 102,
              "source": "    *,"
            },
            {
              "line": 103,
              "source": "    active: bool,"
            },
            {
              "line": 104,
              "source": "    bank: SongBank | None = None,"
            },
            {
              "line": 105,
              "source": ") -> int:"
            },
            {
              "line": 106,
              "source": "    \"\"\"Backpropagate one real or zero-weight synchronization microbatch.\"\"\""
            },
            {
              "line": 107,
              "source": "    validate_choice_config(request.config)"
            },
            {
              "line": 108,
              "source": "    if request.config.stochastic_views != 1 and request.gate_teacher is not None:"
            },
            {
              "line": 109,
              "source": "        raise GradeLossInputError(detail=\"two views reject gate distillation\")"
            },
            {
              "line": 110,
              "source": "    if bank is None:"
            },
            {
              "line": 111,
              "source": "        bank = SongBank(request.songs, request.device)"
            },
            {
              "line": 112,
              "source": "    features, times, ratios, mask, targets = bank.batch(indices)"
            },
            {
              "line": 113,
              "source": "    if request.config.stochastic_views != 1:"
            },
            {
              "line": 114,
              "source": "        features = torch.cat((features, features), dim=0)"
            },
            {
              "line": 115,
              "source": "        times = torch.cat((times, times), dim=0)"
            },
            {
              "line": 116,
              "source": "        ratios = torch.cat((ratios, ratios), dim=0)"
            },
            {
              "line": 117,
              "source": "        mask = torch.cat((mask, mask), dim=0)"
            },
            {
              "line": 118,
              "source": "    with torch.autocast("
            },
            {
              "line": 119,
              "source": "        request.device.type,"
            },
            {
              "line": 120,
              "source": "        dtype=torch.bfloat16,"
            },
            {
              "line": 121,
              "source": "        enabled=request.device.type == \"cuda\","
            },
            {
              "line": 122,
              "source": "    ):"
            },
            {
              "line": 123,
              "source": "        logits = request.head(features, times, ratios, mask)"
            },
            {
              "line": 124,
              "source": "    logits = logits.float()"
            },
            {
              "line": 125,
              "source": "    gate_target = None"
            },
            {
              "line": 126,
              "source": "    if request.gate_teacher is not None and active:"
            },
            {
              "line": 127,
              "source": "        with ("
            },
            {
              "line": 128,
              "source": "            torch.no_grad(),"
            },
            {
              "line": 129,
              "source": "            torch.autocast("
            },
            {
              "line": 130,
              "source": "                request.device.type,"
            },
            {
              "line": 131,
              "source": "                dtype=torch.bfloat16,"
            },
            {
              "line": 132,
              "source": "                enabled=request.device.type == \"cuda\","
            },
            {
              "line": 133,
              "source": "            ),"
            },
            {
              "line": 134,
              "source": "        ):"
            },
            {
              "line": 135,
              "source": "            first, second = request.gate_teacher.heads"
            },
            {
              "line": 136,
              "source": "            first_logits = first(features, times, ratios, mask)"
            },
            {
              "line": 137,
              "source": "            second_logits = second(features, times, ratios, mask)"
            },
            {
              "line": 138,
              "source": "        gate_target = GateTarget("
            },
            {
              "line": 139,
              "source": "            mean_gate_probability(first_logits, second_logits),"
            },
            {
              "line": 140,
              "source": "            request.gate_teacher.weight,"
            },
            {
              "line": 141,
              "source": "        )"
            },
            {
              "line": 142,
              "source": "    if request.gate_soft_targets is not None:"
            },
            {
              "line": 143,
              "source": "        soft = [request.gate_soft_targets[index] for index in indices]"
            },
            {
              "line": 144,
              "source": "        state = replace("
            },
            {
              "line": 145,
              "source": "            state,"
            },
            {
              "line": 146,
              "source": "            gate_soft_target=torch.tensor("
            },
            {
              "line": 147,
              "source": "                soft, dtype=logits.dtype, device=logits.device"
            },
            {
              "line": 148,
              "source": "            ),"
            },
            {
              "line": 149,
              "source": "        )"
            },
            {
              "line": 150,
              "source": "    per_song = choice_objective("
            },
            {
              "line": 151,
              "source": "        logits,"
            },
            {
              "line": 152,
              "source": "        targets,"
            },
            {
              "line": 153,
              "source": "        request.config,"
            },
            {
              "line": 154,
              "source": "        replace(state, gate_target=gate_target) if gate_target is not None else state,"
            },
            {
              "line": 155,
              "source": "        active=active,"
            },
            {
              "line": 156,
              "source": "    )"
            },
            {
              "line": 157,
              "source": "    numerator = (state.weights[targets] * per_song).sum()"
            },
            {
              "line": 158,
              "source": "    (numerator if active else numerator * 0.0).backward()"
            },
            {
              "line": 159,
              "source": "    return len(indices) if active else 0"
            }
          ]
        },
        {
          "start_line": 162,
          "end_line": 187,
          "lines": [
            {
              "line": 162,
              "source": "def _update("
            },
            {
              "line": 163,
              "source": "    request: ChoiceTrainRequest,"
            },
            {
              "line": 164,
              "source": "    optimizer: torch.optim.AdamW,"
            },
            {
              "line": 165,
              "source": "    count: int,"
            },
            {
              "line": 166,
              "source": "    step: int,"
            },
            {
              "line": 167,
              "source": "    total_steps: int,"
            },
            {
              "line": 168,
              "source": ") -> bool:"
            },
            {
              "line": 169,
              "source": "    \"\"\"Normalize by global real song count, then clip one global gradient norm."
            },
            {
              "line": 170,
              "source": ""
            },
            {
              "line": 171,
              "source": "    Detached conditional features block direct encoder gradients, but conditional"
            },
            {
              "line": 172,
              "source": "    gradient magnitudes can still rescale gate gradients through global clipping."
            },
            {
              "line": 173,
              "source": "    \"\"\""
            },
            {
              "line": 174,
              "source": "    observed = torch.tensor(float(count), device=request.device)"
            },
            {
              "line": 175,
              "source": "    if request.world_size > 1:"
            },
            {
              "line": 176,
              "source": "        dist.all_reduce(observed)"
            },
            {
              "line": 177,
              "source": "    denominator = observed.item()"
            },
            {
              "line": 178,
              "source": "    for parameter in request.head.parameters():"
            },
            {
              "line": 179,
              "source": "        if parameter.grad is not None:"
            },
            {
              "line": 180,
              "source": "            parameter.grad.mul_(request.world_size / denominator)"
            },
            {
              "line": 181,
              "source": "    rate = _learning_rate(step, total_steps, request.config)"
            },
            {
              "line": 182,
              "source": "    for group in optimizer.param_groups:"
            },
            {
              "line": 183,
              "source": "        group[\"lr\"] = rate"
            },
            {
              "line": 184,
              "source": "    norm = nn.utils.clip_grad_norm_(request.head.parameters(), request.config.grad_clip)"
            },
            {
              "line": 185,
              "source": "    optimizer.step()"
            },
            {
              "line": 186,
              "source": "    optimizer.zero_grad(set_to_none=True)"
            },
            {
              "line": 187,
              "source": "    return bool(norm > request.config.grad_clip)"
            }
          ]
        },
        {
          "start_line": 71,
          "end_line": 95,
          "lines": [
            {
              "line": 71,
              "source": "def _optimizer(head: nn.Module, config: ChoiceTrainConfig) -> torch.optim.AdamW:"
            },
            {
              "line": 72,
              "source": "    \"\"\"Keep the prior bias outside AdamW weight decay.\"\"\""
            },
            {
              "line": 73,
              "source": "    return torch.optim.AdamW("
            },
            {
              "line": 74,
              "source": "        ["
            },
            {
              "line": 75,
              "source": "            {"
            },
            {
              "line": 76,
              "source": "                \"params\": ["
            },
            {
              "line": 77,
              "source": "                    parameter"
            },
            {
              "line": 78,
              "source": "                    for name, parameter in head.named_parameters()"
            },
            {
              "line": 79,
              "source": "                    if name not in {\"module.class_bias\", \"class_bias\"}"
            },
            {
              "line": 80,
              "source": "                ],"
            },
            {
              "line": 81,
              "source": "                \"weight_decay\": config.weight_decay,"
            },
            {
              "line": 82,
              "source": "            },"
            },
            {
              "line": 83,
              "source": "            {"
            },
            {
              "line": 84,
              "source": "                \"params\": ["
            },
            {
              "line": 85,
              "source": "                    parameter"
            },
            {
              "line": 86,
              "source": "                    for name, parameter in head.named_parameters()"
            },
            {
              "line": 87,
              "source": "                    if name in {\"module.class_bias\", \"class_bias\"}"
            },
            {
              "line": 88,
              "source": "                ],"
            },
            {
              "line": 89,
              "source": "                \"weight_decay\": 0.0,"
            },
            {
              "line": 90,
              "source": "            },"
            },
            {
              "line": 91,
              "source": "        ],"
            },
            {
              "line": 92,
              "source": "        lr=config.learning_rate,"
            },
            {
              "line": 93,
              "source": "        betas=(0.9, config.adam_beta2),"
            },
            {
              "line": 94,
              "source": "        fused=any(parameter.is_cuda for parameter in head.parameters()),"
            },
            {
              "line": 95,
              "source": "    )"
            }
          ]
        }
      ]
    },
    "ensemble_inference": {
      "id": "ensemble_inference",
      "title": "앙상블 추론과 API 출력",
      "claim": "관문 차이와 조건부 로짓을 평균하며, v5 API의 logits 필드는 결합 로그 확률을 반환합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/src/raina_laya/features/serving/application/runtime.py",
      "source_path": "src/raina_laya/features/serving/application/runtime.py",
      "sha256": "bd9ccb1e017fec59b69242b71c45bd667874977b44b855e6904dbb5863d0decc",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 354,
          "end_line": 394,
          "lines": [
            {
              "line": 354,
              "source": "def _hierarchical_prediction("
            },
            {
              "line": 355,
              "source": "    rows: Sequence[torch.Tensor],"
            },
            {
              "line": 356,
              "source": "    band: RejectBand | None,"
            },
            {
              "line": 357,
              "source": "    *,"
            },
            {
              "line": 358,
              "source": "    input_sha256: str,"
            },
            {
              "line": 359,
              "source": "    checkpoint_sha256: str,"
            },
            {
              "line": 360,
              "source": "    duration_seconds: float,"
            },
            {
              "line": 361,
              "source": ") -> Prediction:"
            },
            {
              "line": 362,
              "source": "    \"\"\"Average member gate margins and conditional logits, then apply the band.\"\"\""
            },
            {
              "line": 363,
              "source": "    if any("
            },
            {
              "line": 364,
              "source": "        row.shape != (1, len(GRADES)) or not torch.isfinite(row).all() for row in rows"
            },
            {
              "line": 365,
              "source": "    ):"
            },
            {
              "line": 366,
              "source": "        raise PredictionExecutionError("
            },
            {
              "line": 367,
              "source": "            detail=\"head must return one finite gate and conditional logit row\","
            },
            {
              "line": 368,
              "source": "        )"
            },
            {
              "line": 369,
              "source": "    # Same arithmetic as the research ensemble: [-m/2, +m/2, c] from the member means."
            },
            {
              "line": 370,
              "source": "    margin = torch.stack([hierarchical_gate_margin(row) for row in rows]).mean(dim=0)"
            },
            {
              "line": 371,
              "source": "    conditional = torch.stack([row[:, 2] for row in rows]).mean(dim=0)"
            },
            {
              "line": 372,
              "source": "    log_probabilities = hierarchical_log_probs("
            },
            {
              "line": 373,
              "source": "        torch.stack((-margin / 2, margin / 2, conditional), dim=1)"
            },
            {
              "line": 374,
              "source": "    )"
            },
            {
              "line": 375,
              "source": "    gate_margin = float(margin.item())"
            },
            {
              "line": 376,
              "source": "    decision, grade = decide(gate_margin, float(conditional.item()), band)"
            },
            {
              "line": 377,
              "source": "    return Prediction("
            },
            {
              "line": 378,
              "source": "        input_sha256=input_sha256,"
            },
            {
              "line": 379,
              "source": "        checkpoint_sha256=checkpoint_sha256,"
            },
            {
              "line": 380,
              "source": "        grade=grade,"
            },
            {
              "line": 381,
              "source": "        passed=None if decision == \"reject\" else decision == \"pass\","
            },
            {
              "line": 382,
              "source": "        logits={"
            },
            {
              "line": 383,
              "source": "            grade_name: float(log_probabilities[0, index].item())"
            },
            {
              "line": 384,
              "source": "            for index, grade_name in enumerate(GRADES)"
            },
            {
              "line": 385,
              "source": "        },"
            },
            {
              "line": 386,
              "source": "        grade_probabilities={"
            },
            {
              "line": 387,
              "source": "            grade_name: float(log_probabilities[0, index].exp().item())"
            },
            {
              "line": 388,
              "source": "            for index, grade_name in enumerate(GRADES)"
            },
            {
              "line": 389,
              "source": "        },"
            },
            {
              "line": 390,
              "source": "        duration_seconds=duration_seconds,"
            },
            {
              "line": 391,
              "source": "        decision=decision,"
            },
            {
              "line": 392,
              "source": "        gate_margin=gate_margin,"
            },
            {
              "line": 393,
              "source": "        reject_band=band,"
            },
            {
              "line": 394,
              "source": "    )"
            }
          ]
        }
      ]
    },
    "current_members": {
      "id": "current_members",
      "title": "현행 16세대 앙상블의 14개 가중치",
      "claim": "동일 manifest의 구성원14개를 CPU에서 읽어 층·폭·깊이·매개변수와 검증 선택을 대조했습니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/artifacts/champion-loop/ensembles/gen-016/teacher-members.json",
      "source_path": "artifacts/champion-loop/ensembles/gen-016/teacher-members.json",
      "sha256": "382d308cc77e20281fdb8663db10d0f754fd6d5c4e8fb1effc7b28fb965fd5eb",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [],
      "json": {
        "run_id": "ens-g016-teacher",
        "generation": 16,
        "member_count": 14,
        "manifest_path": "artifacts/champion-loop/ensembles/gen-016/teacher-members.json",
        "manifest_sha256": "382d308cc77e20281fdb8663db10d0f754fd6d5c4e8fb1effc7b28fb965fd5eb",
        "shared_frozen_muq": true,
        "aggregate_trainable_head_parameter_count": 29903402,
        "input_widths": [
          1024,
          2048
        ],
        "model_widths": [
          256
        ],
        "depths": [
          2,
          3
        ],
        "dropouts": [
          0.3
        ],
        "layer_orders": [
          [
            8,
            9
          ],
          [
            9
          ],
          [
            10
          ],
          [
            10,
            9
          ],
          [
            11
          ],
          [
            12
          ]
        ],
        "all_fail_gate_cost_8": true,
        "all_conditional_cost_1": true,
        "all_non_distilled": true,
        "all_validation_selected_member_checkpoints": true,
        "parameter_count_excludes_frozen_muq": true,
        "members": [
          {
            "run_id": "champ-g016-r0001-k8_depth3",
            "epoch": 8,
            "width": 256,
            "depth": 3,
            "layers": [
              10,
              9
            ],
            "layers_explicit": false,
            "input_width": 2048,
            "dropout": 0.3,
            "params": 2962691,
            "parameter_count": 2962691,
            "path": "artifacts/training-runs/champ-g016-r0001-k8_depth3/epoch-0008.ckpt",
            "sha256": "224df711764ce4b9b1df793af236e6308d6c57cf106c159c6bf31d667c5dbc0f",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0001-k8_depth3/epoch-0008.ckpt",
            "checkpoint_sha256": "224df711764ce4b9b1df793af236e6308d6c57cf106c159c6bf31d667c5dbc0f",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0001/k8_depth3.yaml",
            "config_sha256": "4aa107b066c85a9d19c4d30acd4ef351383a9f7d55e0f3695a3335db925d069b",
            "selection_path": "artifacts/training-runs/champ-g016-r0001-k8_depth3/selection.json",
            "selection_sha256": "74d684086d7f697d491bae81dc9f5bc594100c311d0868e39b85156e6f9ec2a6",
            "validation_selected_checkpoint": "epoch-0008.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0008.ckpt",
            "embedding_layers": [
              10,
              9
            ],
            "transformer_depth": 3
          },
          {
            "run_id": "champ-g016-r0001-k8_do30",
            "epoch": 25,
            "width": 256,
            "depth": 2,
            "layers": [
              10,
              9
            ],
            "layers_explicit": false,
            "input_width": 2048,
            "dropout": 0.3,
            "params": 2172931,
            "parameter_count": 2172931,
            "path": "artifacts/training-runs/champ-g016-r0001-k8_do30/epoch-0025.ckpt",
            "sha256": "decfcd6082a00865c779e56fbde0b9eeb011e392ac64c4546b04c5cc8f072a7e",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0001-k8_do30/epoch-0025.ckpt",
            "checkpoint_sha256": "decfcd6082a00865c779e56fbde0b9eeb011e392ac64c4546b04c5cc8f072a7e",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0001/k8_do30.yaml",
            "config_sha256": "e85a59686f10955c2a89317fef6ca76f02606443448b69eb758bcb62459b31f3",
            "selection_path": "artifacts/training-runs/champ-g016-r0001-k8_do30/selection.json",
            "selection_sha256": "78855bbb59b7670d8286234ce4fa53bf40d891b6201d5b1d41959e5df7f5937a",
            "validation_selected_checkpoint": "epoch-0025.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0025.ckpt",
            "embedding_layers": [
              10,
              9
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0001-l10_k8",
            "epoch": 10,
            "width": 256,
            "depth": 2,
            "layers": [
              10
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0001-l10_k8/epoch-0010.ckpt",
            "sha256": "07a9fb06569c02fcad985ae1737e96e1a5d3915c75ec960e431a24b9303bf0b8",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0001-l10_k8/epoch-0010.ckpt",
            "checkpoint_sha256": "07a9fb06569c02fcad985ae1737e96e1a5d3915c75ec960e431a24b9303bf0b8",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0001/l10_k8.yaml",
            "config_sha256": "d75949ea223caecb96c99aac7652b0155d3b67757e1b2b03da75637b0c37ea45",
            "selection_path": "artifacts/training-runs/champ-g016-r0001-l10_k8/selection.json",
            "selection_sha256": "fe2a0791edd091e9c7d7351b0d429df4c5c1b09900be811325d9b74f496b8693",
            "validation_selected_checkpoint": "epoch-0010.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0010.ckpt",
            "embedding_layers": [
              10
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0001-l11_k8",
            "epoch": 29,
            "width": 256,
            "depth": 2,
            "layers": [
              11
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0001-l11_k8/epoch-0029.ckpt",
            "sha256": "194961d4ca42630c41cdf7a8766bddc3e1685f80433b6b28d45c9bd0d63b8045",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0001-l11_k8/epoch-0029.ckpt",
            "checkpoint_sha256": "194961d4ca42630c41cdf7a8766bddc3e1685f80433b6b28d45c9bd0d63b8045",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0001/l11_k8.yaml",
            "config_sha256": "fd7f32088b8c6b4f11241f280fca5fc0408b7fb253fd6232bfd128b7f3b1bb39",
            "selection_path": "artifacts/training-runs/champ-g016-r0001-l11_k8/selection.json",
            "selection_sha256": "fe72d75706be977a0620b47f37327e0dc2c2d5fcd948d2bd47262072d83f98b2",
            "validation_selected_checkpoint": "epoch-0029.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0029.ckpt",
            "embedding_layers": [
              11
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0001-l12_k8",
            "epoch": 20,
            "width": 256,
            "depth": 2,
            "layers": [
              12
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0001-l12_k8/epoch-0020.ckpt",
            "sha256": "1523ed3c77d7ce43c8c3b1834923a81f4db0f5e86b1d656f0642d4e2a9d419ef",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0001-l12_k8/epoch-0020.ckpt",
            "checkpoint_sha256": "1523ed3c77d7ce43c8c3b1834923a81f4db0f5e86b1d656f0642d4e2a9d419ef",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0001/l12_k8.yaml",
            "config_sha256": "7767367f6c06d06fdaafc2f59f4bf0e5b3825af8863a28b6756329eca29addfb",
            "selection_path": "artifacts/training-runs/champ-g016-r0001-l12_k8/selection.json",
            "selection_sha256": "d81b9bc6faa540b9bc6f17ba0adff9771dcf7a4d9252f0bb7687c7eebd16a9d7",
            "validation_selected_checkpoint": "epoch-0020.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0020.ckpt",
            "embedding_layers": [
              12
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0001-l89_k8",
            "epoch": 18,
            "width": 256,
            "depth": 2,
            "layers": [
              8,
              9
            ],
            "layers_explicit": true,
            "input_width": 2048,
            "dropout": 0.3,
            "params": 2172931,
            "parameter_count": 2172931,
            "path": "artifacts/training-runs/champ-g016-r0001-l89_k8/epoch-0018.ckpt",
            "sha256": "aedc27794efbe79a9cb4e6b53518573c4d708b4529b78363008dd0554de779e9",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0001-l89_k8/epoch-0018.ckpt",
            "checkpoint_sha256": "aedc27794efbe79a9cb4e6b53518573c4d708b4529b78363008dd0554de779e9",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0001/l89_k8.yaml",
            "config_sha256": "3c5c2815b5cf1e643d8fb525992c8f8c564a32afe934e8e84e94f986553076d1",
            "selection_path": "artifacts/training-runs/champ-g016-r0001-l89_k8/selection.json",
            "selection_sha256": "1653767d3c362947ef6a9918ff5c4a62ae7761cea55fa6f32defc83371035b55",
            "validation_selected_checkpoint": "epoch-0018.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0018.ckpt",
            "embedding_layers": [
              8,
              9
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0001-l9_k8",
            "epoch": 19,
            "width": 256,
            "depth": 2,
            "layers": [
              9
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0001-l9_k8/epoch-0019.ckpt",
            "sha256": "f89b70c046212ef7f65ca906bd8c46f1ba4c7a065fea0f72391fe283c8da5e31",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0001-l9_k8/epoch-0019.ckpt",
            "checkpoint_sha256": "f89b70c046212ef7f65ca906bd8c46f1ba4c7a065fea0f72391fe283c8da5e31",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0001/l9_k8.yaml",
            "config_sha256": "58763350f09e4d42c073dd4c1cd808626eabf21809421c7df309e7513c7ebb34",
            "selection_path": "artifacts/training-runs/champ-g016-r0001-l9_k8/selection.json",
            "selection_sha256": "50f20d3d99ed58df8bdd8108a4c2392f53d88a21dad7b3b2e717b9de05154f2a",
            "validation_selected_checkpoint": "epoch-0019.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0019.ckpt",
            "embedding_layers": [
              9
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0002-k8_depth3",
            "epoch": 12,
            "width": 256,
            "depth": 3,
            "layers": [
              10,
              9
            ],
            "layers_explicit": false,
            "input_width": 2048,
            "dropout": 0.3,
            "params": 2962691,
            "parameter_count": 2962691,
            "path": "artifacts/training-runs/champ-g016-r0002-k8_depth3/epoch-0012.ckpt",
            "sha256": "372ffa172ec6dd436cbdb44b60beeca68e1e3b9117ad0b7f2da7ba9727f39e48",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0002-k8_depth3/epoch-0012.ckpt",
            "checkpoint_sha256": "372ffa172ec6dd436cbdb44b60beeca68e1e3b9117ad0b7f2da7ba9727f39e48",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0002/k8_depth3.yaml",
            "config_sha256": "6fd343972a334cb31d81348266c256e681acc05fe35ee7b9558203b05c60052e",
            "selection_path": "artifacts/training-runs/champ-g016-r0002-k8_depth3/selection.json",
            "selection_sha256": "1d2c18d7a0897e6d18478f6bea349d768b41c86986776b70aefc3cebee503ce6",
            "validation_selected_checkpoint": "epoch-0012.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0012.ckpt",
            "embedding_layers": [
              10,
              9
            ],
            "transformer_depth": 3
          },
          {
            "run_id": "champ-g016-r0002-k8_do30",
            "epoch": 13,
            "width": 256,
            "depth": 2,
            "layers": [
              10,
              9
            ],
            "layers_explicit": false,
            "input_width": 2048,
            "dropout": 0.3,
            "params": 2172931,
            "parameter_count": 2172931,
            "path": "artifacts/training-runs/champ-g016-r0002-k8_do30/epoch-0013.ckpt",
            "sha256": "842e0120e73c01b7b6291665e35fd349b2de8bc263f064526a0f47fd7982b5da",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0002-k8_do30/epoch-0013.ckpt",
            "checkpoint_sha256": "842e0120e73c01b7b6291665e35fd349b2de8bc263f064526a0f47fd7982b5da",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0002/k8_do30.yaml",
            "config_sha256": "d5a915340e5ec547cf4e79b9f4ab44ef8de9226f06d11460da599a262ebb1824",
            "selection_path": "artifacts/training-runs/champ-g016-r0002-k8_do30/selection.json",
            "selection_sha256": "ac8f85e408ce8c0df3ea4a9683d5db12b39a3bd9a67871840d56df3a9732a77e",
            "validation_selected_checkpoint": "epoch-0013.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0013.ckpt",
            "embedding_layers": [
              10,
              9
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0002-l10_k8",
            "epoch": 22,
            "width": 256,
            "depth": 2,
            "layers": [
              10
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0002-l10_k8/epoch-0022.ckpt",
            "sha256": "283291ee3f50c62a27d3f1d0de3b57850f205082406cae709ed1a3554558e103",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0002-l10_k8/epoch-0022.ckpt",
            "checkpoint_sha256": "283291ee3f50c62a27d3f1d0de3b57850f205082406cae709ed1a3554558e103",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0002/l10_k8.yaml",
            "config_sha256": "b43805755e39e7037a10fc61b8d5082c82475b7ef5b170703b92cff5b9162f62",
            "selection_path": "artifacts/training-runs/champ-g016-r0002-l10_k8/selection.json",
            "selection_sha256": "df473d246b68ec7abaefd83da50c70b18ff710d4e9720edd554c6c2a7818724f",
            "validation_selected_checkpoint": "epoch-0022.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0022.ckpt",
            "embedding_layers": [
              10
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0002-l11_k8",
            "epoch": 26,
            "width": 256,
            "depth": 2,
            "layers": [
              11
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0002-l11_k8/epoch-0026.ckpt",
            "sha256": "ecb4dd3d5ab499b337b429b724a2783cc3260559e3e7b6e97aec62813c71e4dc",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0002-l11_k8/epoch-0026.ckpt",
            "checkpoint_sha256": "ecb4dd3d5ab499b337b429b724a2783cc3260559e3e7b6e97aec62813c71e4dc",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0002/l11_k8.yaml",
            "config_sha256": "01516e0a2740020c22621c11a9315bfa85f9e6fdcfde39a31ca6c84edeb3ede8",
            "selection_path": "artifacts/training-runs/champ-g016-r0002-l11_k8/selection.json",
            "selection_sha256": "67edf2a54f02b140ff5a9a710afb7021e0f22bbc7aa333d1456c8970549d866b",
            "validation_selected_checkpoint": "epoch-0026.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0026.ckpt",
            "embedding_layers": [
              11
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0002-l12_k8",
            "epoch": 15,
            "width": 256,
            "depth": 2,
            "layers": [
              12
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0002-l12_k8/epoch-0015.ckpt",
            "sha256": "df9424737e1eff63e32a37b8e83ce8d55cf947a46163aec473e46ee3c7048278",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0002-l12_k8/epoch-0015.ckpt",
            "checkpoint_sha256": "df9424737e1eff63e32a37b8e83ce8d55cf947a46163aec473e46ee3c7048278",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0002/l12_k8.yaml",
            "config_sha256": "dd7316c8036e6c41b92950fb979a2609a83698d9df9bb9d113de66d9c418277e",
            "selection_path": "artifacts/training-runs/champ-g016-r0002-l12_k8/selection.json",
            "selection_sha256": "8e976798509b7a4f2804bddac5223ee8442b433cb48c854c52395e15c1269a58",
            "validation_selected_checkpoint": "epoch-0015.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0015.ckpt",
            "embedding_layers": [
              12
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0002-l89_k8",
            "epoch": 12,
            "width": 256,
            "depth": 2,
            "layers": [
              8,
              9
            ],
            "layers_explicit": true,
            "input_width": 2048,
            "dropout": 0.3,
            "params": 2172931,
            "parameter_count": 2172931,
            "path": "artifacts/training-runs/champ-g016-r0002-l89_k8/epoch-0012.ckpt",
            "sha256": "826c684f343eb1768cbbe102600d854e6ef33490ee85999d857717844ca71cfe",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0002-l89_k8/epoch-0012.ckpt",
            "checkpoint_sha256": "826c684f343eb1768cbbe102600d854e6ef33490ee85999d857717844ca71cfe",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0002/l89_k8.yaml",
            "config_sha256": "d3600685da5be4077e126cb0c1eb55b2384237a292d8b5fb3b2c80831ff4adab",
            "selection_path": "artifacts/training-runs/champ-g016-r0002-l89_k8/selection.json",
            "selection_sha256": "b43d7d1bc29b2786e389591e4755aac5ceed5d552d11cfebbbffc1103e507457",
            "validation_selected_checkpoint": "epoch-0012.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0012.ckpt",
            "embedding_layers": [
              8,
              9
            ],
            "transformer_depth": 2
          },
          {
            "run_id": "champ-g016-r0002-l9_k8",
            "epoch": 22,
            "width": 256,
            "depth": 2,
            "layers": [
              9
            ],
            "layers_explicit": true,
            "input_width": 1024,
            "dropout": 0.3,
            "params": 1910787,
            "parameter_count": 1910787,
            "path": "artifacts/training-runs/champ-g016-r0002-l9_k8/epoch-0022.ckpt",
            "sha256": "e888340ca5e4e294b59394ed0e4b230e05025df60fbb182a04d2057dc8b85d4a",
            "checkpoint_path": "artifacts/training-runs/champ-g016-r0002-l9_k8/epoch-0022.ckpt",
            "checkpoint_sha256": "e888340ca5e4e294b59394ed0e4b230e05025df60fbb182a04d2057dc8b85d4a",
            "config_path": "artifacts/champion-loop/configs/gen-016/round-0002/l9_k8.yaml",
            "config_sha256": "2ab03a5c06d9364c8cd294a095730c5f9b7d6912ca52ad5fcdd920601083c327",
            "selection_path": "artifacts/training-runs/champ-g016-r0002-l9_k8/selection.json",
            "selection_sha256": "dc061abf2d9fb8073dda6b34fddef5cf762822f0032ea1b07d97b1939327c592",
            "validation_selected_checkpoint": "epoch-0022.ckpt",
            "matches_validation_selection": true,
            "gate_fail_cost": 8.0,
            "conditional_cost": 1.0,
            "checkpoint_name": "epoch-0022.ckpt",
            "embedding_layers": [
              9
            ],
            "transformer_depth": 2
          }
        ]
      }
    },
    "current_research": {
      "id": "current_research",
      "title": "현행 앙상블의 검증·작업용·예비 평가",
      "claim": "세 집합의 원시 곡별 점수에서 오류·거부·분모를 다시 계산했습니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.test.json",
      "source_path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.test.json",
      "sha256": "2984035657bb7a185cee31d868bc723d70a13afa30324b95a4d6329b3fb9cc8b",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [],
      "json": {
        "identity": {
          "generation": 16,
          "run_id": "ens-g016-teacher",
          "candidate": "ensemble_teacher_members",
          "epoch": null,
          "checkpoint_name": "teacher-members.json",
          "checkpoint_is_ensemble_manifest": true,
          "member_count": 14,
          "package": "raina-laya-v5-g016-ens-teacher-members",
          "package_created_kst": "2026-10-08 03:52:18 KST",
          "package_finished_kst": "2026-10-08 03:52:43 KST",
          "source_repo_head_at_package": "b3ae49bee7807631c6107b37b761778a362d6f90",
          "ensemble_checkpoint_digest": "337084d19e9ef6f84b2af17539b59ee1ea8a3fed7ae91fe49736f70ce30f1970",
          "source_manifest": {
            "path": "artifacts/champion-loop/ensembles/gen-016/teacher-members.json",
            "sha256": "382d308cc77e20281fdb8663db10d0f754fd6d5c4e8fb1effc7b28fb965fd5eb",
            "size_bytes": 3436,
            "mtime_kst": "2026-10-08T03:51:50.884011+09:00"
          },
          "provenance": {
            "path": "model/raina-laya-v5-g016-ens-teacher-members/provenance.json",
            "sha256": "6af98ae0bc222dbaf06499143bf3918ab2fb0d04f59e090a19b5253613aec73e",
            "size_bytes": 10723,
            "mtime_kst": "2026-10-08T04:21:33.634000+09:00"
          }
        },
        "reject_band": {
          "hi": 3.3710739181269327,
          "lo": -2.7795170168181755,
          "max_pass_loss": 0.7,
          "source": "/home/work/Projects/Raina-laya/artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.validation.scores.jsonl",
          "source_sha256": "500510cd340e3d0069409cf68a44b4b72de676b0bc931ad9f80687f4429515de",
          "source_songs": 3019
        },
        "metrics": {
          "validation": {
            "role": "validation",
            "source_finished_kst": null,
            "report": {
              "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.validation.json",
              "sha256": "cb0b49b63b4278b26a4061ceaa9681699d01a67ae74fa1b1602ae74fa761dab2",
              "size_bytes": 8265,
              "mtime_kst": "2026-10-08T03:52:35.721411+09:00"
            },
            "scores": {
              "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.validation.scores.jsonl",
              "sha256": "500510cd340e3d0069409cf68a44b4b72de676b0bc931ad9f80687f4429515de",
              "size_bytes": 370973,
              "mtime_kst": "2026-10-08T03:52:35.718706+09:00"
            },
            "whole": {
              "songs": 3019,
              "original_fail_count": 2007,
              "original_pass_count": 1012,
              "fail_count": 2007,
              "fail_to_pass_count": 32,
              "fail_to_pass_rate": 0.015944195316392625,
              "pass_count": 1012,
              "pass_to_fail_count": 579,
              "pass_to_fail_rate": 0.5721343873517787,
              "pass_correct_count": 433,
              "pass_recall": 0.4278656126482213,
              "rejected_pass_count": 0,
              "rejected_pass_rate": 0.0,
              "rejected_fail_count": 0,
              "rejected_total": 0,
              "rejected_total_rate": 0.0,
              "decided_total": 3019,
              "decided_total_rate": 1.0,
              "accepted_actual_pass_rate_all_actual_pass": 0.4278656126482213
            },
            "decided": {
              "songs": 3019,
              "original_fail_count": 2007,
              "original_pass_count": 1012,
              "fail_count": 1650,
              "fail_to_pass_count": 1,
              "fail_to_pass_rate": 0.0006060606060606061,
              "pass_count": 307,
              "pass_to_fail_count": 141,
              "pass_to_fail_rate": 0.4592833876221498,
              "pass_correct_count": 166,
              "pass_recall": 0.5407166123778502,
              "rejected_pass_count": 705,
              "rejected_pass_rate": 0.6966403162055336,
              "rejected_fail_count": 357,
              "rejected_total": 1062,
              "rejected_total_rate": 0.3517721099701888,
              "decided_total": 1957,
              "decided_total_rate": 0.6482278900298112,
              "accepted_actual_pass_rate_all_actual_pass": 0.16403162055335968
            },
            "grade_counts": {
              "A": 926,
              "Fail": 2007,
              "S": 86
            },
            "gate_auc": 0.9265239645430716,
            "macro_f1": 0.6936838909129522,
            "s_f1": 0.6814814814814815,
            "actual_pass_rejection_exceeds_validation_limit": false,
            "songs": 3019
          },
          "test": {
            "role": "test",
            "source_finished_kst": "2026-10-08 03:52:18 KST",
            "report": {
              "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.test.json",
              "sha256": "2984035657bb7a185cee31d868bc723d70a13afa30324b95a4d6329b3fb9cc8b",
              "size_bytes": 8854,
              "mtime_kst": "2026-10-08T03:53:24.984651+09:00"
            },
            "scores": {
              "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.test.scores.jsonl",
              "sha256": "812ead1435e9e23d846281c560cb26234db85b7a15b3ffef12d50178ad661757",
              "size_bytes": 372016,
              "mtime_kst": "2026-10-08T03:53:24.982475+09:00"
            },
            "whole": {
              "songs": 3019,
              "original_fail_count": 2007,
              "original_pass_count": 1012,
              "fail_count": 2007,
              "fail_to_pass_count": 41,
              "fail_to_pass_rate": 0.02042850024912805,
              "pass_count": 1012,
              "pass_to_fail_count": 577,
              "pass_to_fail_rate": 0.5701581027667985,
              "pass_correct_count": 435,
              "pass_recall": 0.4298418972332016,
              "rejected_pass_count": 0,
              "rejected_pass_rate": 0.0,
              "rejected_fail_count": 0,
              "rejected_total": 0,
              "rejected_total_rate": 0.0,
              "decided_total": 3019,
              "decided_total_rate": 1.0,
              "accepted_actual_pass_rate_all_actual_pass": 0.4298418972332016
            },
            "decided": {
              "songs": 3019,
              "original_fail_count": 2007,
              "original_pass_count": 1012,
              "fail_count": 1652,
              "fail_to_pass_count": 0,
              "fail_to_pass_rate": 0.0,
              "pass_count": 275,
              "pass_to_fail_count": 139,
              "pass_to_fail_rate": 0.5054545454545455,
              "pass_correct_count": 136,
              "pass_recall": 0.49454545454545457,
              "rejected_pass_count": 737,
              "rejected_pass_rate": 0.7282608695652174,
              "rejected_fail_count": 355,
              "rejected_total": 1092,
              "rejected_total_rate": 0.361709175223584,
              "decided_total": 1927,
              "decided_total_rate": 0.6382908247764161,
              "accepted_actual_pass_rate_all_actual_pass": 0.13438735177865613
            },
            "grade_counts": {
              "A": 926,
              "Fail": 2007,
              "S": 86
            },
            "gate_auc": 0.9200062626656504,
            "macro_f1": 0.605330127944507,
            "s_f1": 0.4144144144144144,
            "actual_pass_rejection_exceeds_validation_limit": true,
            "songs": 3019
          },
          "reserve": {
            "role": "reserve",
            "source_finished_kst": "2026-10-08 04:11:11 KST",
            "report": {
              "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.reserve.json",
              "sha256": "e92c34b67acf0e749c0daa8950acd78f95a9beced089e60ed4b3a5b6558d0563",
              "size_bytes": 8904,
              "mtime_kst": "2026-10-08T04:12:14.337676+09:00"
            },
            "scores": {
              "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.reserve.scores.jsonl",
              "sha256": "f73eee508e1a21913333737ca651ef5a9a83a8cb988ff005d1c9ac5e549be267",
              "size_bytes": 369748,
              "mtime_kst": "2026-10-08T04:12:18.662551+09:00"
            },
            "whole": {
              "songs": 3019,
              "original_fail_count": 2007,
              "original_pass_count": 1012,
              "fail_count": 2007,
              "fail_to_pass_count": 28,
              "fail_to_pass_rate": 0.013951170901843548,
              "pass_count": 1012,
              "pass_to_fail_count": 578,
              "pass_to_fail_rate": 0.5711462450592886,
              "pass_correct_count": 434,
              "pass_recall": 0.4288537549407115,
              "rejected_pass_count": 0,
              "rejected_pass_rate": 0.0,
              "rejected_fail_count": 0,
              "rejected_total": 0,
              "rejected_total_rate": 0.0,
              "decided_total": 3019,
              "decided_total_rate": 1.0,
              "accepted_actual_pass_rate_all_actual_pass": 0.4288537549407115
            },
            "decided": {
              "songs": 3019,
              "original_fail_count": 2007,
              "original_pass_count": 1012,
              "fail_count": 1675,
              "fail_to_pass_count": 1,
              "fail_to_pass_rate": 0.0005970149253731343,
              "pass_count": 291,
              "pass_to_fail_count": 140,
              "pass_to_fail_rate": 0.48109965635738833,
              "pass_correct_count": 151,
              "pass_recall": 0.5189003436426117,
              "rejected_pass_count": 721,
              "rejected_pass_rate": 0.7124505928853755,
              "rejected_fail_count": 332,
              "rejected_total": 1053,
              "rejected_total_rate": 0.3487909903941703,
              "decided_total": 1966,
              "decided_total_rate": 0.6512090096058297,
              "accepted_actual_pass_rate_all_actual_pass": 0.1492094861660079
            },
            "grade_counts": {
              "A": 926,
              "Fail": 2007,
              "S": 86
            },
            "gate_auc": 0.9299807393490372,
            "macro_f1": 0.6820151640303127,
            "s_f1": 0.6412213740458015,
            "actual_pass_rejection_exceeds_validation_limit": true,
            "songs": 3019
          }
        },
        "reserve_check": {
          "ledger_row": {
            "type": "reserve_check",
            "generation": 16,
            "run_id": "ens-g016-teacher",
            "candidate": "ensemble_teacher_members",
            "checkpoint_name": "teacher-members.json",
            "epoch": null,
            "test_evals": 800,
            "status": "ok",
            "verdict": "pass",
            "test": {
              "fail_to_pass_count": 41,
              "fail_count": 2007,
              "fail_to_pass_rate": 0.02042850024912805,
              "pass_to_fail_count": 577,
              "pass_correct_count": 435,
              "pass_count": 1012,
              "pass_to_fail_rate": 0.5701581027667985,
              "macro_f1": 0.605330127944507,
              "s_f1": 0.4144144144144144
            },
            "reserve": {
              "fail_to_pass_count": 28,
              "fail_count": 2007,
              "fail_to_pass_rate": 0.013951170901843548,
              "pass_to_fail_count": 578,
              "pass_correct_count": 434,
              "pass_count": 1012,
              "pass_to_fail_rate": 0.5711462450592886,
              "macro_f1": 0.6820151640303127,
              "s_f1": 0.6412213740458015
            },
            "test_decided": {
              "fail_count": 1652,
              "fail_to_pass_count": 0,
              "fail_to_pass_rate": 0.0,
              "pass_correct_count": 136,
              "pass_count": 275,
              "pass_to_fail_count": 139,
              "pass_to_fail_rate": 0.5054545454545455,
              "rejected_pass_count": 737,
              "rejected_pass_rate": 0.7282608695652174,
              "rejected_total": 1092
            },
            "reserve_decided": {
              "fail_count": 1675,
              "fail_to_pass_count": 1,
              "fail_to_pass_rate": 0.0005970149253731343,
              "pass_correct_count": 151,
              "pass_count": 291,
              "pass_to_fail_count": 140,
              "pass_to_fail_rate": 0.48109965635738833,
              "rejected_pass_count": 721,
              "rejected_pass_rate": 0.7124505928853755,
              "rejected_total": 1053
            },
            "compared": "decided",
            "eval_json": "/home/work/Projects/Raina-laya/artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.reserve.json",
            "finished": "2026-10-08 04:11:11 KST",
            "f2p_z": 0.993259880235765,
            "f2p_p": 0.16029166182244944,
            "p2f_z": -0.5792474936308025,
            "p2f_p": 0.7187889056913315
          },
          "recomputed_one_sided_two_proportion_z_tests": {
            "fail_to_pass": {
              "z": 0.993259880235765,
              "p": 0.16029166182244944
            },
            "pass_to_fail": {
              "z": -0.5792474936308025,
              "p": 0.7187889056913315
            }
          },
          "alpha": 0.01,
          "interpretation": "유의한 악화를 검출하지 않았다는 뜻입니다. 과적합 없음·미래 무오류·거부율 상한 준수의 증명은 아닙니다. 현재 세대의 점검은 1/3만 완료됐습니다."
        }
      }
    },
    "current_provenance": {
      "id": "current_provenance",
      "title": "현행 패키지의 출처와 해시",
      "claim": "원본 manifest 해시, 경로가 다른 패키지 manifest 해시, 순서가 있는 구성원 가중치의 결합 식별값을 구분합니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/model/raina-laya-v5-g016-ens-teacher-members/provenance.json",
      "source_path": "model/raina-laya-v5-g016-ens-teacher-members/provenance.json",
      "sha256": "6af98ae0bc222dbaf06499143bf3918ab2fb0d04f59e090a19b5253613aec73e",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [],
      "json": {
        "generation": 16,
        "run_id": "ens-g016-teacher",
        "candidate": "ensemble_teacher_members",
        "epoch": null,
        "checkpoint_name": "teacher-members.json",
        "checkpoint_is_ensemble_manifest": true,
        "member_count": 14,
        "package": "raina-laya-v5-g016-ens-teacher-members",
        "package_created_kst": "2026-10-08 03:52:18 KST",
        "package_finished_kst": "2026-10-08 03:52:43 KST",
        "source_repo_head_at_package": "b3ae49bee7807631c6107b37b761778a362d6f90",
        "ensemble_checkpoint_digest": "337084d19e9ef6f84b2af17539b59ee1ea8a3fed7ae91fe49736f70ce30f1970",
        "source_manifest": {
          "path": "artifacts/champion-loop/ensembles/gen-016/teacher-members.json",
          "sha256": "382d308cc77e20281fdb8663db10d0f754fd6d5c4e8fb1effc7b28fb965fd5eb",
          "size_bytes": 3436,
          "mtime_kst": "2026-10-08T03:51:50.884011+09:00"
        },
        "provenance": {
          "path": "model/raina-laya-v5-g016-ens-teacher-members/provenance.json",
          "sha256": "6af98ae0bc222dbaf06499143bf3918ab2fb0d04f59e090a19b5253613aec73e",
          "size_bytes": 10723,
          "mtime_kst": "2026-10-08T04:21:33.634000+09:00"
        }
      }
    },
    "current_configuration": {
      "id": "current_configuration",
      "title": "현행 비증류 구성원의 생성 설정",
      "claim": "Fail 관문 비용8·조건부 비용1·rl_weight0이며, 현행14개에는 파일 교사 혼합을 적용하지 않았습니다.",
      "path": "_docs/20261007_모델_설명/audit_20261008/frozen_sources/artifacts/champion-loop/configs/gen-016/round-0001/k8_depth3.yaml",
      "source_path": "artifacts/champion-loop/configs/gen-016/round-0001/k8_depth3.yaml",
      "sha256": "4aa107b066c85a9d19c4d30acd4ef351383a9f7d55e0f3695a3335db925d069b",
      "captured_kst": "2026-10-08 11:51:24 KST",
      "excerpts": [
        {
          "start_line": 1,
          "end_line": 44,
          "lines": [
            {
              "line": 1,
              "source": "model_family: raina_laya_hierarchical_v5"
            },
            {
              "line": 2,
              "source": "model_width: 256"
            },
            {
              "line": 3,
              "source": "selection_priority: fail_miss"
            },
            {
              "line": 4,
              "source": "minimum_pass_recall: 0.4"
            },
            {
              "line": 5,
              "source": "maximum_fail_to_pass_rate: 0.05"
            },
            {
              "line": 6,
              "source": "preserve_pareto: true"
            },
            {
              "line": 7,
              "source": "binary_loss_weight: 0.0"
            },
            {
              "line": 8,
              "source": "fail_margin_weight: 0.0"
            },
            {
              "line": 9,
              "source": "binary_margin_weight: 0.0"
            },
            {
              "line": 10,
              "source": "class_order:"
            },
            {
              "line": 11,
              "source": "- Fail"
            },
            {
              "line": 12,
              "source": "- A"
            },
            {
              "line": 13,
              "source": "- S"
            },
            {
              "line": 14,
              "source": "count_source: final_train_dataset"
            },
            {
              "line": 15,
              "source": "class_counts: auto"
            },
            {
              "line": 16,
              "source": "data_root: data/20260912_for_training"
            },
            {
              "line": 17,
              "source": "split: /home/work/Projects/Raina-laya/artifacts/champion-loop/splits/gen-016.yaml"
            },
            {
              "line": 18,
              "source": "cache_inventory: artifacts/sqlite/inventory-20261007-relabel.jsonl"
            },
            {
              "line": 19,
              "source": "embedding_database: artifacts/sqlite/raina-laya-20261005-expert-regrade.sqlite3"
            },
            {
              "line": 20,
              "source": "sampler: shuffle_without_replacement"
            },
            {
              "line": 21,
              "source": "rare_weight_gamma: 0.25"
            },
            {
              "line": 22,
              "source": "class_weights: auto_from_train_counts"
            },
            {
              "line": 23,
              "source": "class_weight_grouping: pass_fail"
            },
            {
              "line": 24,
              "source": "bias_init: hierarchical_weighted_prior"
            },
            {
              "line": 25,
              "source": "supervised_loss: hierarchical_binary_conditional"
            },
            {
              "line": 26,
              "source": "choice_distribution: hierarchical_conditional"
            },
            {
              "line": 27,
              "source": "prediction: binary_gate_then_as"
            },
            {
              "line": 28,
              "source": "center_logits: false"
            },
            {
              "line": 29,
              "source": "rl_weight: 0.0"
            },
            {
              "line": 30,
              "source": "micro_batch: 256"
            },
            {
              "line": 31,
              "source": "grad_accumulation: auto_expected_one_rarest"
            },
            {
              "line": 32,
              "source": "max_accumulation: 16"
            },
            {
              "line": 33,
              "source": "max_epochs: 50"
            },
            {
              "line": 34,
              "source": "patience: 12"
            },
            {
              "line": 35,
              "source": "lr: 0.00015"
            },
            {
              "line": 36,
              "source": "min_lr: 1.0e-06"
            },
            {
              "line": 37,
              "source": "warmup_fraction: 0.05"
            },
            {
              "line": 38,
              "source": "schedule: cosine"
            },
            {
              "line": 39,
              "source": "weight_decay: 0.03"
            },
            {
              "line": 40,
              "source": "grad_clip: 1.0"
            },
            {
              "line": 41,
              "source": "seed: 20260929"
            },
            {
              "line": 42,
              "source": "hierarchical_fail_weight: 8.0"
            },
            {
              "line": 43,
              "source": "transformer_dropout: 0.3"
            },
            {
              "line": 44,
              "source": "transformer_depth: 3"
            }
          ]
        }
      ]
    }
  },
  "research": {
    "captured_at_kst": "2026-10-08 11:39:25 KST",
    "identity": {
      "generation": 16,
      "run_id": "ens-g016-teacher",
      "candidate": "ensemble_teacher_members",
      "epoch": null,
      "checkpoint_name": "teacher-members.json",
      "checkpoint_is_ensemble_manifest": true,
      "member_count": 14,
      "package": "raina-laya-v5-g016-ens-teacher-members",
      "package_created_kst": "2026-10-08 03:52:18 KST",
      "package_finished_kst": "2026-10-08 03:52:43 KST",
      "source_repo_head_at_package": "b3ae49bee7807631c6107b37b761778a362d6f90",
      "ensemble_checkpoint_digest": "337084d19e9ef6f84b2af17539b59ee1ea8a3fed7ae91fe49736f70ce30f1970",
      "source_manifest": {
        "path": "artifacts/champion-loop/ensembles/gen-016/teacher-members.json",
        "sha256": "382d308cc77e20281fdb8663db10d0f754fd6d5c4e8fb1effc7b28fb965fd5eb",
        "size_bytes": 3436,
        "mtime_kst": "2026-10-08T03:51:50.884011+09:00"
      },
      "provenance": {
        "path": "model/raina-laya-v5-g016-ens-teacher-members/provenance.json",
        "sha256": "6af98ae0bc222dbaf06499143bf3918ab2fb0d04f59e090a19b5253613aec73e",
        "size_bytes": 10723,
        "mtime_kst": "2026-10-08T04:21:33.634000+09:00"
      }
    },
    "metrics": {
      "validation": {
        "role": "validation",
        "source_finished_kst": null,
        "report": {
          "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.validation.json",
          "sha256": "cb0b49b63b4278b26a4061ceaa9681699d01a67ae74fa1b1602ae74fa761dab2",
          "size_bytes": 8265,
          "mtime_kst": "2026-10-08T03:52:35.721411+09:00"
        },
        "scores": {
          "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.validation.scores.jsonl",
          "sha256": "500510cd340e3d0069409cf68a44b4b72de676b0bc931ad9f80687f4429515de",
          "size_bytes": 370973,
          "mtime_kst": "2026-10-08T03:52:35.718706+09:00"
        },
        "whole": {
          "songs": 3019,
          "original_fail_count": 2007,
          "original_pass_count": 1012,
          "fail_count": 2007,
          "fail_to_pass_count": 32,
          "fail_to_pass_rate": 0.015944195316392625,
          "pass_count": 1012,
          "pass_to_fail_count": 579,
          "pass_to_fail_rate": 0.5721343873517787,
          "pass_correct_count": 433,
          "pass_recall": 0.4278656126482213,
          "rejected_pass_count": 0,
          "rejected_pass_rate": 0.0,
          "rejected_fail_count": 0,
          "rejected_total": 0,
          "rejected_total_rate": 0.0,
          "decided_total": 3019,
          "decided_total_rate": 1.0,
          "accepted_actual_pass_rate_all_actual_pass": 0.4278656126482213
        },
        "decided": {
          "songs": 3019,
          "original_fail_count": 2007,
          "original_pass_count": 1012,
          "fail_count": 1650,
          "fail_to_pass_count": 1,
          "fail_to_pass_rate": 0.0006060606060606061,
          "pass_count": 307,
          "pass_to_fail_count": 141,
          "pass_to_fail_rate": 0.4592833876221498,
          "pass_correct_count": 166,
          "pass_recall": 0.5407166123778502,
          "rejected_pass_count": 705,
          "rejected_pass_rate": 0.6966403162055336,
          "rejected_fail_count": 357,
          "rejected_total": 1062,
          "rejected_total_rate": 0.3517721099701888,
          "decided_total": 1957,
          "decided_total_rate": 0.6482278900298112,
          "accepted_actual_pass_rate_all_actual_pass": 0.16403162055335968
        },
        "grade_counts": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        },
        "gate_auc": 0.9265239645430716,
        "macro_f1": 0.6936838909129522,
        "s_f1": 0.6814814814814815,
        "actual_pass_rejection_exceeds_validation_limit": false,
        "songs": 3019
      },
      "test": {
        "role": "test",
        "source_finished_kst": "2026-10-08 03:52:18 KST",
        "report": {
          "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.test.json",
          "sha256": "2984035657bb7a185cee31d868bc723d70a13afa30324b95a4d6329b3fb9cc8b",
          "size_bytes": 8854,
          "mtime_kst": "2026-10-08T03:53:24.984651+09:00"
        },
        "scores": {
          "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.test.scores.jsonl",
          "sha256": "812ead1435e9e23d846281c560cb26234db85b7a15b3ffef12d50178ad661757",
          "size_bytes": 372016,
          "mtime_kst": "2026-10-08T03:53:24.982475+09:00"
        },
        "whole": {
          "songs": 3019,
          "original_fail_count": 2007,
          "original_pass_count": 1012,
          "fail_count": 2007,
          "fail_to_pass_count": 41,
          "fail_to_pass_rate": 0.02042850024912805,
          "pass_count": 1012,
          "pass_to_fail_count": 577,
          "pass_to_fail_rate": 0.5701581027667985,
          "pass_correct_count": 435,
          "pass_recall": 0.4298418972332016,
          "rejected_pass_count": 0,
          "rejected_pass_rate": 0.0,
          "rejected_fail_count": 0,
          "rejected_total": 0,
          "rejected_total_rate": 0.0,
          "decided_total": 3019,
          "decided_total_rate": 1.0,
          "accepted_actual_pass_rate_all_actual_pass": 0.4298418972332016
        },
        "decided": {
          "songs": 3019,
          "original_fail_count": 2007,
          "original_pass_count": 1012,
          "fail_count": 1652,
          "fail_to_pass_count": 0,
          "fail_to_pass_rate": 0.0,
          "pass_count": 275,
          "pass_to_fail_count": 139,
          "pass_to_fail_rate": 0.5054545454545455,
          "pass_correct_count": 136,
          "pass_recall": 0.49454545454545457,
          "rejected_pass_count": 737,
          "rejected_pass_rate": 0.7282608695652174,
          "rejected_fail_count": 355,
          "rejected_total": 1092,
          "rejected_total_rate": 0.361709175223584,
          "decided_total": 1927,
          "decided_total_rate": 0.6382908247764161,
          "accepted_actual_pass_rate_all_actual_pass": 0.13438735177865613
        },
        "grade_counts": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        },
        "gate_auc": 0.9200062626656504,
        "macro_f1": 0.605330127944507,
        "s_f1": 0.4144144144144144,
        "actual_pass_rejection_exceeds_validation_limit": true,
        "songs": 3019
      },
      "reserve": {
        "role": "reserve",
        "source_finished_kst": "2026-10-08 04:11:11 KST",
        "report": {
          "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.reserve.json",
          "sha256": "e92c34b67acf0e749c0daa8950acd78f95a9beced089e60ed4b3a5b6558d0563",
          "size_bytes": 8904,
          "mtime_kst": "2026-10-08T04:12:14.337676+09:00"
        },
        "scores": {
          "path": "artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.reserve.scores.jsonl",
          "sha256": "f73eee508e1a21913333737ca651ef5a9a83a8cb988ff005d1c9ac5e549be267",
          "size_bytes": 369748,
          "mtime_kst": "2026-10-08T04:12:18.662551+09:00"
        },
        "whole": {
          "songs": 3019,
          "original_fail_count": 2007,
          "original_pass_count": 1012,
          "fail_count": 2007,
          "fail_to_pass_count": 28,
          "fail_to_pass_rate": 0.013951170901843548,
          "pass_count": 1012,
          "pass_to_fail_count": 578,
          "pass_to_fail_rate": 0.5711462450592886,
          "pass_correct_count": 434,
          "pass_recall": 0.4288537549407115,
          "rejected_pass_count": 0,
          "rejected_pass_rate": 0.0,
          "rejected_fail_count": 0,
          "rejected_total": 0,
          "rejected_total_rate": 0.0,
          "decided_total": 3019,
          "decided_total_rate": 1.0,
          "accepted_actual_pass_rate_all_actual_pass": 0.4288537549407115
        },
        "decided": {
          "songs": 3019,
          "original_fail_count": 2007,
          "original_pass_count": 1012,
          "fail_count": 1675,
          "fail_to_pass_count": 1,
          "fail_to_pass_rate": 0.0005970149253731343,
          "pass_count": 291,
          "pass_to_fail_count": 140,
          "pass_to_fail_rate": 0.48109965635738833,
          "pass_correct_count": 151,
          "pass_recall": 0.5189003436426117,
          "rejected_pass_count": 721,
          "rejected_pass_rate": 0.7124505928853755,
          "rejected_fail_count": 332,
          "rejected_total": 1053,
          "rejected_total_rate": 0.3487909903941703,
          "decided_total": 1966,
          "decided_total_rate": 0.6512090096058297,
          "accepted_actual_pass_rate_all_actual_pass": 0.1492094861660079
        },
        "grade_counts": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        },
        "gate_auc": 0.9299807393490372,
        "macro_f1": 0.6820151640303127,
        "s_f1": 0.6412213740458015,
        "actual_pass_rejection_exceeds_validation_limit": true,
        "songs": 3019
      }
    },
    "reject_band": {
      "hi": 3.3710739181269327,
      "lo": -2.7795170168181755,
      "max_pass_loss": 0.7,
      "source": "/home/work/Projects/Raina-laya/artifacts/champion-loop/evals/ens-g016-teacher/teacher-members.validation.scores.jsonl",
      "source_sha256": "500510cd340e3d0069409cf68a44b4b72de676b0bc931ad9f80687f4429515de",
      "source_songs": 3019
    },
    "selection": {
      "champion_comparison": "decided counts on repeated working test",
      "champion_key": [
        "fail_to_pass_count",
        "pass_to_fail_count",
        "rejected_total",
        "finished"
      ],
      "independent_frontier_count": 8,
      "test_evals_recomputed": 981,
      "all_current_ensemble_members_are_validation_selected": true,
      "working_test_promotes_across_validation_shortlist": true,
      "cannot_claim_independent_validation_only_final_selection": true,
      "counts_not_error_rates_are_minimized": true,
      "across_generation_direct_performance_comparison_not_valid": true
    },
    "split": {
      "file": {
        "path": "artifacts/champion-loop/splits/gen-016.yaml",
        "sha256": "42fff7adac3e315b46ca4533c2ee990873aee7e45cdcbdcdbd7e1564da1159bd",
        "size_bytes": 5072051,
        "mtime_kst": "2026-10-08T03:32:49.029157+09:00"
      },
      "role_counts": {
        "development": 21122,
        "validation": 3019,
        "test": 3019,
        "reserve": 3019
      },
      "total_songs": 30179,
      "current_generation_role_isolation_verified": true,
      "project_wide_never_seen_by_prior_generations_not_claimed": true,
      "split_digest_as_reported": "42a8dcff42af79df46cb34fbf239e399081abbd94e282915dc363862c615f155",
      "cache_inventory_digest_as_reported": "9620c1f2ede29339fbe8ffef42a3dafb3381864da8870d682f10c51ddf935c5a"
    }
  },
  "historical_gen14": {
    "schema_version": 1,
    "captured_at_kst": "2026-10-08 00:18:26 KST",
    "captured_at_iso": "2026-10-08T00:18:26+09:00",
    "repository_head": "22776220a7cf65cb69a19ef8741916401aaed7df",
    "identity": {
      "generation": 14,
      "run_id": "champ-g014-r0005-dst_a05",
      "candidate": "dst_a05",
      "round": 5,
      "epoch": 50,
      "checkpoint_name": "epoch-0050.ckpt",
      "package": "raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050",
      "package_created_kst": "2026-10-07 23:53:20 KST",
      "package_finished_kst": "2026-10-07 23:53:50 KST",
      "run_started_kst": "2026-10-07 23:48:50 KST",
      "run_finished_kst": "2026-10-07 23:52:34 KST",
      "epochs_run": 50
    },
    "state_at_capture": {
      "generation": 14,
      "updated_kst": "2026-10-08 00:18:14 KST",
      "champion_run_id": "champ-g014-r0005-dst_a05",
      "champion_epoch": 50,
      "pinned_run_matches_state_champion": true,
      "test_evals": 1130,
      "reserve_checks": 1
    },
    "architecture": {
      "model_family": "raina_laya_hierarchical_v5",
      "head_architecture": "temporal_transformer",
      "head_class": "TemporalChoiceHead",
      "model_width": 256,
      "input_feature_width": 2048,
      "embedding_layers": [
        10,
        9
      ],
      "single_layer_width": 1024,
      "muq_encoder_depth": 12,
      "hidden_state_count": 13,
      "transformer_depth": 2,
      "attention_heads": 4,
      "feedforward_width": 1024,
      "query_token_count": 3,
      "transformer_dropout": 0.3,
      "use_time_encoding": true,
      "separate_conditional_scorer": false,
      "head_state_numel": 2172931,
      "head_state_shapes": {
        "class_bias": [
          3
        ],
        "temporal_head.grade_tokens": [
          3,
          256
        ],
        "temporal_head.feature_projection.weight": [
          256,
          2048
        ],
        "temporal_head.feature_projection.bias": [
          256
        ],
        "temporal_head.projection_norm.weight": [
          256
        ],
        "temporal_head.projection_norm.bias": [
          256
        ],
        "temporal_head.ratio_embedding.weight": [
          256,
          1
        ],
        "temporal_head.ratio_embedding.bias": [
          256
        ],
        "temporal_head.type_embedding.weight": [
          2,
          256
        ],
        "temporal_head.first_transformer_layer.self_attn.in_proj_weight": [
          768,
          256
        ],
        "temporal_head.first_transformer_layer.self_attn.in_proj_bias": [
          768
        ],
        "temporal_head.first_transformer_layer.self_attn.out_proj.weight": [
          256,
          256
        ],
        "temporal_head.first_transformer_layer.self_attn.out_proj.bias": [
          256
        ],
        "temporal_head.first_transformer_layer.linear1.weight": [
          1024,
          256
        ],
        "temporal_head.first_transformer_layer.linear1.bias": [
          1024
        ],
        "temporal_head.first_transformer_layer.linear2.weight": [
          256,
          1024
        ],
        "temporal_head.first_transformer_layer.linear2.bias": [
          256
        ],
        "temporal_head.first_transformer_layer.norm1.weight": [
          256
        ],
        "temporal_head.first_transformer_layer.norm1.bias": [
          256
        ],
        "temporal_head.first_transformer_layer.norm2.weight": [
          256
        ],
        "temporal_head.first_transformer_layer.norm2.bias": [
          256
        ],
        "temporal_head.second_transformer_layer.self_attn.in_proj_weight": [
          768,
          256
        ],
        "temporal_head.second_transformer_layer.self_attn.in_proj_bias": [
          768
        ],
        "temporal_head.second_transformer_layer.self_attn.out_proj.weight": [
          256,
          256
        ],
        "temporal_head.second_transformer_layer.self_attn.out_proj.bias": [
          256
        ],
        "temporal_head.second_transformer_layer.linear1.weight": [
          1024,
          256
        ],
        "temporal_head.second_transformer_layer.linear1.bias": [
          1024
        ],
        "temporal_head.second_transformer_layer.linear2.weight": [
          256,
          1024
        ],
        "temporal_head.second_transformer_layer.linear2.bias": [
          256
        ],
        "temporal_head.second_transformer_layer.norm1.weight": [
          256
        ],
        "temporal_head.second_transformer_layer.norm1.bias": [
          256
        ],
        "temporal_head.second_transformer_layer.norm2.weight": [
          256
        ],
        "temporal_head.second_transformer_layer.norm2.bias": [
          256
        ],
        "temporal_head.scorer.0.weight": [
          256
        ],
        "temporal_head.scorer.0.bias": [
          256
        ],
        "temporal_head.scorer.1.weight": [
          256,
          256
        ],
        "temporal_head.scorer.1.bias": [
          256
        ],
        "temporal_head.scorer.3.weight": [
          1,
          256
        ]
      },
      "root_loader_class": "MuQMuLan",
      "root_repository": "OpenMuQ/MuQ-MuLan-large",
      "root_revision": "2e01c796b71dca71b45251384c04cd7b237c9020",
      "inner_model_path": "mulan.audio.model",
      "inner_audio_model_repository": "OpenMuQ/MuQ-large-msd-iter",
      "inner_audio_model_config_revision": "0562a57814f6f8bbd9fdea0a25921a2fce1a841a",
      "mulan_latent_dim": 512,
      "audio_sample_rate": 24000,
      "audio_context_seconds": 10,
      "temporal_bin_seconds": 2.0,
      "feature_dtype": "float32",
      "head_autocast_dtype": "bfloat16",
      "raw_output_roles": [
        "fail_gate_score",
        "pass_gate_score",
        "s_given_pass_logit"
      ],
      "probability_factorization": [
        "1-q",
        "q*(1-r)",
        "q*r"
      ]
    },
    "training": {
      "generated_config": {
        "model_family": "raina_laya_hierarchical_v5",
        "model_width": 256,
        "selection_priority": "fail_miss",
        "minimum_pass_recall": 0.4,
        "maximum_fail_to_pass_rate": 0.05,
        "preserve_pareto": true,
        "binary_loss_weight": 0.0,
        "fail_margin_weight": 0.0,
        "binary_margin_weight": 0.0,
        "class_order": [
          "Fail",
          "A",
          "S"
        ],
        "count_source": "final_train_dataset",
        "class_counts": "auto",
        "data_root": "data/20260912_for_training",
        "split": "/home/work/Projects/Raina-laya/artifacts/champion-loop/splits/gen-014.yaml",
        "cache_inventory": "artifacts/sqlite/inventory-20261007-relabel.jsonl",
        "embedding_database": "artifacts/sqlite/raina-laya-20261005-expert-regrade.sqlite3",
        "sampler": "shuffle_without_replacement",
        "rare_weight_gamma": 0.25,
        "class_weights": "auto_from_train_counts",
        "class_weight_grouping": "pass_fail",
        "bias_init": "hierarchical_weighted_prior",
        "supervised_loss": "hierarchical_binary_conditional",
        "choice_distribution": "hierarchical_conditional",
        "prediction": "binary_gate_then_as",
        "center_logits": false,
        "rl_weight": 0.0,
        "micro_batch": 256,
        "grad_accumulation": "auto_expected_one_rarest",
        "max_accumulation": 16,
        "max_epochs": 50,
        "patience": 12,
        "lr": 0.00015,
        "min_lr": 1e-06,
        "warmup_fraction": 0.05,
        "schedule": "cosine",
        "weight_decay": 0.03,
        "grad_clip": 1.0,
        "seed": 20260933,
        "hierarchical_fail_weight": 8.0,
        "transformer_dropout": 0.3,
        "gate_soft_targets": "artifacts/teachers/gen-014/insample.jsonl",
        "gate_soft_target_mix": 0.5
      },
      "effective_config": {
        "micro_batch": 256,
        "rare_weight_gamma": 0.25,
        "class_weight_grouping": "pass_fail",
        "model_width": 256,
        "transformer_depth": 2,
        "max_epochs": 50,
        "patience": 12,
        "learning_rate": 0.00015,
        "min_lr": 1e-06,
        "warmup_fraction": 0.05,
        "weight_decay": 0.03,
        "grad_clip": 1.0,
        "seed": 20260933,
        "selection_priority": "fail_miss",
        "binary_loss_weight": 0.0,
        "binary_margin_weight": 0.0,
        "minimum_pass_recall": 0.4,
        "maximum_fail_to_pass_rate": 0.05,
        "preserve_pareto": true,
        "rl_weight": 0.0,
        "fail_supervised_weight": 1.0,
        "binary_fail_multiplier": 1.0,
        "fail_margin_weight": 0.0,
        "transformer_dropout": 0.3,
        "use_time_encoding": true,
        "ranking_loss_weight": 0.0,
        "ranking_tail_fraction": 0.05,
        "model_family": "raina_laya_hierarchical_v5",
        "hierarchical_fail_weight": 8.0,
        "hierarchical_conditional_weight": 1.0,
        "separate_conditional_scorer": false,
        "detach_conditional_features": false,
        "stochastic_views": 1,
        "gate_consistency_weight": 0.0,
        "head_architecture": "temporal_transformer",
        "magnitude_normalizer": null,
        "adam_beta2": 0.999,
        "embedding_layers": null,
        "gate_soft_target_mix": 0.5,
        "gate_soft_targets_sha256": "e4b7cb54fa76575ff7af8458769bb6e4ac2bd0f307c65810f425bb1a54b75256"
      },
      "train_counts": {
        "Fail": 14045,
        "A": 6480,
        "S": 597
      },
      "class_weights": [
        0.9410656080200648,
        1.1169610760715263,
        1.1169610760715263
      ],
      "loss_mass": [
        0.625758283526267,
        0.34267151656772515,
        0.03157019990600801
      ],
      "initial_biases": [
        1.6106504306786833,
        -0.9828533895980723,
        -2.384558675953718
      ],
      "optimizer": "AdamW",
      "adam_betas": [
        0.9,
        0.999
      ],
      "gradient_accumulation": 1,
      "teacher_members": 16,
      "teacher_finished_kst": "2026-10-07 23:40:53 KST",
      "teacher_sha256": "e4b7cb54fa76575ff7af8458769bb6e4ac2bd0f307c65810f425bb1a54b75256",
      "maximum_fail_to_pass_rate_enforced_by_fail_miss": false
    },
    "split": {
      "roles": {
        "reserve": 3019,
        "development": 21122,
        "validation": 3019,
        "test": 3019
      },
      "grade_counts_by_role": {
        "reserve": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        },
        "development": {
          "A": 6480,
          "Fail": 14045,
          "S": 597
        },
        "validation": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        },
        "test": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        }
      },
      "total_songs": 30179,
      "split_digest": "42a8dcff42af79df46cb34fbf239e399081abbd94e282915dc363862c615f155",
      "cache_inventory_digest": "9620c1f2ede29339fbe8ffef42a3dafb3381864da8870d682f10c51ddf935c5a"
    },
    "cache": {
      "joint_database": "artifacts/sqlite/raina-laya-20261005-expert-regrade.sqlite3",
      "joint_layer_order": [
        10,
        9
      ],
      "joint_sample_token_count": 45,
      "joint_sample_feature_bytes": 368640,
      "joint_sample_width_from_fp32_bytes": 2048,
      "layer_database": "artifacts/sqlite/muq-layers-20261007/layer-10.sqlite3",
      "layer_contract": {
        "format_version": 1,
        "layer": 10,
        "width": 1024,
        "schema_version": "temporal_features_v1",
        "backbone_repository": "OpenMuQ/MuQ-MuLan-large",
        "backbone_revision": "2e01c796b71dca71b45251384c04cd7b237c9020",
        "policy_fingerprint": "4d481713a614e925"
      }
    },
    "selection": {
      "validation_selection_checkpoint": "epoch-0020.ckpt",
      "validation_selection_epoch": 20,
      "validation_selection_priority": "fail_miss",
      "validation_selection_minimum_pass_recall": 0.4,
      "validation_selected_whole": {
        "fail_to_pass_count": 37,
        "fail_count": 2007,
        "pass_to_fail_count": 584,
        "pass_count": 1012,
        "pass_correct_count": 428
      },
      "validation_shortlist_epochs": [
        17,
        20,
        22,
        23,
        24,
        26,
        27,
        28,
        31,
        32,
        35,
        37,
        41,
        45,
        46,
        47,
        50
      ],
      "working_test_promoted_checkpoint": "epoch-0050.ckpt",
      "working_test_promoted_epoch": 50,
      "champion_comparison": "decided",
      "champion_key": [
        "fail_to_pass_count",
        "pass_to_fail_count",
        "rejected_total"
      ]
    },
    "reject_band": {
      "hi": 4.551337611136127,
      "lo": -3.6336498260498047,
      "max_pass_loss": 0.7,
      "source": "/home/work/Projects/Raina-laya/artifacts/training-runs/champ-g014-r0005-dst_a05/validation-epoch-0050.scores.jsonl",
      "source_sha256": "9e3647e93d3f3c99e3e9dd4a97cdb0e4cc251ee70b68f0a0fd12ef01d569f8e5",
      "source_songs": 3019
    },
    "metrics": {
      "validation_promoted_epoch": {
        "role": "validation",
        "songs": 3019,
        "whole": {
          "fail_count": 2007,
          "fail_to_pass_count": 94,
          "pass_count": 1012,
          "pass_to_fail_count": 435,
          "pass_correct_count": 577,
          "fail_to_pass_rate": 0.046836073741903336,
          "pass_to_fail_rate": 0.4298418972332016,
          "pass_recall": 0.5701581027667985
        },
        "decided": {
          "fail_count": 1505,
          "fail_to_pass_count": 4,
          "pass_count": 304,
          "pass_to_fail_count": 95,
          "rejected_pass_count": 708,
          "rejected_total": 1210,
          "pass_correct_count": 209,
          "fail_to_pass_rate": 0.0026578073089701,
          "pass_to_fail_rate": 0.3125,
          "pass_recall": 0.6875,
          "rejected_pass_rate": 0.6996047430830039,
          "rejected_total_rate": 0.40079496522027164,
          "decided_total": 1809,
          "decided_total_rate": 0.5992050347797284,
          "accepted_actual_pass_rate_all_actual_pass": 0.20652173913043478
        }
      },
      "test": {
        "source_finished_kst": "2026-10-07 23:53:01 KST",
        "role": "test",
        "songs": 3019,
        "grade_counts": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        },
        "whole": {
          "fail_count": 2007,
          "fail_to_pass_count": 91,
          "pass_count": 1012,
          "pass_to_fail_count": 418,
          "pass_correct_count": 594,
          "fail_to_pass_rate": 0.04534130543099153,
          "pass_to_fail_rate": 0.41304347826086957,
          "pass_recall": 0.5869565217391305
        },
        "decided": {
          "fail_count": 1536,
          "fail_to_pass_count": 0,
          "fail_to_pass_rate": 0.0,
          "pass_correct_count": 216,
          "pass_count": 305,
          "pass_to_fail_count": 89,
          "pass_to_fail_rate": 0.29180327868852457,
          "rejected_pass_count": 707,
          "rejected_pass_rate": 0.6986166007905138,
          "rejected_total": 1178,
          "pass_recall": 0.7081967213114754,
          "rejected_total_rate": 0.39019542894998344,
          "decided_total": 1841,
          "decided_total_rate": 0.6098045710500165,
          "accepted_actual_pass_rate_all_actual_pass": 0.2134387351778656
        },
        "gate_auc": 0.9225066516205139,
        "macro_f1": 0.7444658852163971,
        "s_f1": 0.6938775510204083
      },
      "reserve": {
        "source_finished_kst": "2026-10-07 23:58:28 KST",
        "role": "reserve",
        "songs": 3019,
        "grade_counts": {
          "A": 926,
          "Fail": 2007,
          "S": 86
        },
        "whole": {
          "fail_count": 2007,
          "fail_to_pass_count": 81,
          "pass_count": 1012,
          "pass_to_fail_count": 427,
          "pass_correct_count": 585,
          "fail_to_pass_rate": 0.04035874439461883,
          "pass_to_fail_rate": 0.42193675889328064,
          "pass_recall": 0.5780632411067194
        },
        "decided": {
          "fail_count": 1495,
          "fail_to_pass_count": 3,
          "fail_to_pass_rate": 0.002006688963210702,
          "pass_correct_count": 211,
          "pass_count": 305,
          "pass_to_fail_count": 94,
          "pass_to_fail_rate": 0.3081967213114754,
          "rejected_pass_count": 707,
          "rejected_pass_rate": 0.6986166007905138,
          "rejected_total": 1219,
          "pass_recall": 0.6918032786885245,
          "rejected_total_rate": 0.4037760847962902,
          "decided_total": 1800,
          "decided_total_rate": 0.5962239152037099,
          "accepted_actual_pass_rate_all_actual_pass": 0.208498023715415
        },
        "gate_auc": 0.9232052933310488,
        "macro_f1": 0.7438569730162771,
        "s_f1": 0.697986577181208
      }
    },
    "reserve_check": {
      "generation": 14,
      "run_id": "champ-g014-r0005-dst_a05",
      "epoch": 50,
      "checkpoint_name": "epoch-0050.ckpt",
      "finished": "2026-10-07 23:58:28 KST",
      "test_evals": 800,
      "status": "ok",
      "verdict": "pass",
      "compared": "decided",
      "f2p_z": 1.7565101821121496,
      "f2p_p": 0.03950066718897594,
      "p2f_z": 0.441769205836719,
      "p2f_p": 0.3293281121554887,
      "alpha": 0.01
    },
    "artifacts": {
      "provenance": {
        "path": "model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/provenance.json",
        "sha256": "f56c5c73b5416289bf41e10c51613ca981dbb4bb0a2dbeb1457707bc6130d207"
      },
      "generated_config": {
        "path": "artifacts/champion-loop/configs/gen-014/round-0005/dst_a05.yaml",
        "sha256": "1ea8eab891e4d71820212529edc2183dd7d748acac42d14a3c8ec41d547d3def"
      },
      "packaged_config": {
        "path": "model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/metadata/config.yaml",
        "sha256": "9c7d8fe20b34c7f3e3fe0b76293e76a1b644f1d3e57ede5cd12b2d4a1ed6a2bb"
      },
      "source_checkpoint": {
        "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/epoch-0050.ckpt",
        "sha256": "08bbc8246d09ecb336723fb08876163cc1e73138300a2804059f6d1a2cc44547"
      },
      "local_packaged_checkpoint": {
        "path": "/home/work/Projects/Raina-laya-packages/model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/checkpoint/epoch-0050.ckpt",
        "sha256": "08bbc8246d09ecb336723fb08876163cc1e73138300a2804059f6d1a2cc44547"
      },
      "validation_selection": {
        "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/selection.json",
        "sha256": "c5907579aec322bdca2b77548e7e580e7bbe5b0464a06a8f3759c6cd9344db98"
      },
      "validation_shortlist": {
        "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/pareto.json",
        "sha256": "0f77cf8865da766f27af979ad762d4f688930569181e6e8aac129cfd96e423ef"
      },
      "epoch_validation_metrics": {
        "path": "artifacts/training-runs/champ-g014-r0005-dst_a05/validation-epoch-0050.json",
        "sha256": "2c0d7c94f1fb9f44aeb8c9ebb67d4cf93b4807f6e0f62bb73389077dff2ca741"
      },
      "validation_band_scores": {
        "path": "/home/work/Projects/Raina-laya/artifacts/training-runs/champ-g014-r0005-dst_a05/validation-epoch-0050.scores.jsonl",
        "sha256": "9e3647e93d3f3c99e3e9dd4a97cdb0e4cc251ee70b68f0a0fd12ef01d569f8e5"
      },
      "test_evaluation": {
        "path": "artifacts/champion-loop/evals/champ-g014-r0005-dst_a05/epoch-0050.test.json",
        "sha256": "40505de34a566b6e0acc3116789cab806b5583e9c39925eb754cbb436fa7b421"
      },
      "packaged_test_evaluation": {
        "path": "model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/metadata/test-eval.json",
        "sha256": "40505de34a566b6e0acc3116789cab806b5583e9c39925eb754cbb436fa7b421"
      },
      "reserve_evaluation": {
        "path": "artifacts/champion-loop/evals/champ-g014-r0005-dst_a05/epoch-0050.reserve.json",
        "sha256": "8e63fbdb4da3e7cdb74e8f78cc803387f6831c938a778fa4bf6da1aa72194cc3"
      },
      "split": {
        "path": "/home/work/Projects/Raina-laya/artifacts/champion-loop/splits/gen-014.yaml",
        "sha256": "eb250e428273bd75f11bf478ddd7e40cb2e847aa6475038e5a07a9db0038328e"
      },
      "muq_config": {
        "path": "/home/work/Projects/Raina-laya-packages/model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/huggingface/hub/models--OpenMuQ--MuQ-large-msd-iter/snapshots/0562a57814f6f8bbd9fdea0a25921a2fce1a841a/config.json",
        "sha256": "237335ee27d8fb951ce778701a12a79e06c51ae636dd786f97e45f51ce532543"
      },
      "mulan_config": {
        "path": "/home/work/Projects/Raina-laya-packages/model/raina-laya-v5-g014-champ-g014-r0005-dst_a05-e0050/huggingface/hub/models--OpenMuQ--MuQ-MuLan-large/snapshots/2e01c796b71dca71b45251384c04cd7b237c9020/config.json",
        "sha256": "8fefc545ef87ecd9bcde7417dd03464370c48c321f36dcff20266a752079e468"
      },
      "state": {
        "path": "artifacts/champion-loop/state.json",
        "sha256": "5ae95307129b2eaf266412cac8213cc91cb325df2c2e922968f84e2a82a43836",
        "updated_kst": "2026-10-08 00:18:14 KST"
      },
      "ledger": {
        "path": "artifacts/champion-loop/ledger.jsonl",
        "sha256": "a299e447e3428b9675b0672567f1e99fae23b8158da4506e7d07e47a0f87341e"
      }
    },
    "source_files": [
      {
        "path": "src/raina_laya/features/audio_features/infrastructure/features.py",
        "sha256": "75f22e9164b4a10fec27fa2f3cb118656ea103c641fbf20f59370e8815f8318e"
      },
      {
        "path": "src/raina_laya/features/grade_model/domain/model.py",
        "sha256": "ca8996df129dcffe6ebd3cf1a69d3bd20b18e69c31b633b1127a1ad5c7a777a1"
      },
      {
        "path": "src/raina_laya/features/grade_model/domain/hierarchical.py",
        "sha256": "107af6d5ed654e5784d5198915a8fdc0b163bdd7b35e073d5aa5b20dcf7ef536"
      },
      {
        "path": "src/raina_laya/features/grade_model/domain/v4_stats.py",
        "sha256": "7405dda53aea48947a943a177168b4f5097f984d550c59d7e78c657d0f112b06"
      },
      {
        "path": "src/raina_laya/features/grade_model/application/v4_evaluate.py",
        "sha256": "cc37695f40e7a1d060788978575bc9020ec88e06ecbc03f4bd943ec8672c4e8c"
      },
      {
        "path": "src/raina_laya/features/grade_model/application/v4_training_types.py",
        "sha256": "27e050e94120b536e277e2d658f278985a42f0cffc2de0592ca57fb8420c1055"
      },
      {
        "path": "src/raina_laya/features/grade_model/application/v4_train.py",
        "sha256": "6d1e9b9a4e374529df36aff40c48016e0bff417f5d3ddd265a487604824866c5"
      },
      {
        "path": "src/raina_laya/workflows/v4_choice_soft_targets.py",
        "sha256": "a79bc22702dd542c551da5f7c9810b4790c24d7807db3b40aa5fcf9ec37c4e41"
      },
      {
        "path": "scripts/champion_loop.py",
        "sha256": "4542b0aeb7737721feb82cd6d20695281f92dca58a3b626329225ee85997e202"
      },
      {
        "path": "scripts/package_champion.py",
        "sha256": "078892b9edf5c2b55604d69874230d9eeeba0afde5ea52fbf72e52abf4af9758"
      },
      {
        "path": "AGENTS.md",
        "sha256": "d4182a1b5aba4afb7ae173bbce201d0e9244a87826a0c45f065dcde774ec76d8"
      },
      {
        "path": "_Autoresearch/20261007/HANDOFF.md",
        "sha256": "e9b894d6304a9d836555e712813ba71542d366e60b99f54ca5f85386f1b08330"
      }
    ],
    "verification": {
      "checked_at_kst": "2026-10-08 00:18:26 KST",
      "final_metric_source_finished_kst": "2026-10-07 23:58:28 KST",
      "checks": {
        "source_checkpoint_sha256_matches_provenance": true,
        "source_checkpoint_sha256_matches_test": true,
        "source_checkpoint_sha256_matches_reserve": true,
        "source_config_sha256_matches_provenance": true,
        "source_test_eval_sha256_matches_provenance": true,
        "packaged_test_eval_sha256_matches_provenance": true,
        "split_sha256_matches_provenance": true,
        "validation_score_sha256_matches_band_source": true,
        "test_reserve_band_identical": true,
        "test_reserve_split_digest_identical": true,
        "reserve_check_run_id_matches": true,
        "reserve_check_epoch_matches": true,
        "reserve_check_test_decided_matches_report": true,
        "reserve_check_reserve_decided_matches_report": true,
        "teacher_source_sha256_matches": true,
        "teacher_packaged_sha256_matches": true,
        "local_packaged_checkpoint_sha256_matches": true,
        "promoted_epoch_in_validation_shortlist": true,
        "validation_selected_epoch_differs_from_promoted_epoch": true,
        "validation_pass_loss_within_limit": true,
        "validation_decided_pass_to_fail_rate_within_zero_boundary_rate": true,
        "package_finished_exit_code_zero": true,
        "test_whole_fail_to_pass_rate_recomputed": true,
        "test_whole_pass_to_fail_rate_recomputed": true,
        "test_decided_fail_to_pass_rate_recomputed": true,
        "test_decided_pass_to_fail_rate_recomputed": true,
        "test_decided_rejected_pass_rate_recomputed": true,
        "reserve_whole_fail_to_pass_rate_recomputed": true,
        "reserve_whole_pass_to_fail_rate_recomputed": true,
        "reserve_decided_fail_to_pass_rate_recomputed": true,
        "reserve_decided_pass_to_fail_rate_recomputed": true,
        "reserve_decided_rejected_pass_rate_recomputed": true
      }
    }
  }
}
