diff --git a/crates/console/prometeu-drivers/src/asset.rs b/crates/console/prometeu-drivers/src/asset.rs index 20aa81c9..b50eecce 100644 --- a/crates/console/prometeu-drivers/src/asset.rs +++ b/crates/console/prometeu-drivers/src/asset.rs @@ -180,6 +180,10 @@ impl AssetBridge for AssetManager { } impl AssetManager { + fn codec_is_none_or_legacy_raw(codec: &str) -> bool { + matches!(codec, "NONE" | "RAW") + } + fn decode_tile_bank_layout( entry: &AssetEntry, ) -> Result<(TileSize, usize, usize, usize), String> { @@ -246,9 +250,13 @@ impl AssetManager { } fn op_mode_for(entry: &AssetEntry) -> Result { - match (entry.bank_type, entry.codec.as_str()) { - (BankType::TILES, "RAW") => Ok(AssetOpMode::StageInMemory), - (BankType::SOUNDS, "RAW") => Ok(AssetOpMode::DirectFromSlice), + match entry.bank_type { + BankType::TILES if Self::codec_is_none_or_legacy_raw(entry.codec.as_str()) => { + Ok(AssetOpMode::StageInMemory) + } + BankType::SOUNDS if Self::codec_is_none_or_legacy_raw(entry.codec.as_str()) => { + Ok(AssetOpMode::DirectFromSlice) + } _ => Err(format!("Unsupported codec: {}", entry.codec)), } } @@ -914,7 +922,7 @@ mod tests { offset: 0, size: expected_tile_payload_size(width, height) as u64, decoded_size: expected_tile_decoded_size(width, height) as u64, - codec: "RAW".to_string(), + codec: "NONE".to_string(), metadata: serde_json::json!({ "tile_size": 16, "width": width, @@ -966,14 +974,22 @@ mod tests { } #[test] - fn test_op_mode_for_tiles_raw_stages_in_memory() { + fn test_op_mode_for_tiles_none_stages_in_memory() { let entry = test_tile_asset_entry("tiles", 16, 16); assert_eq!(AssetManager::op_mode_for(&entry), Ok(AssetOpMode::StageInMemory)); } #[test] - fn test_op_mode_for_sounds_raw_reads_direct_from_slice() { + fn test_op_mode_for_tiles_raw_is_legacy_alias() { + let mut entry = test_tile_asset_entry("tiles", 16, 16); + entry.codec = "RAW".to_string(); + + assert_eq!(AssetManager::op_mode_for(&entry), Ok(AssetOpMode::StageInMemory)); + } + + #[test] + fn test_op_mode_for_sounds_none_reads_direct_from_slice() { let entry = AssetEntry { asset_id: 1, asset_name: "sound".to_string(), @@ -981,7 +997,7 @@ mod tests { offset: 0, size: 8, decoded_size: 8, - codec: "RAW".to_string(), + codec: "NONE".to_string(), metadata: serde_json::json!({ "sample_rate": 44100 }), @@ -1077,7 +1093,7 @@ mod tests { offset: 0, size: data.len() as u64, decoded_size: data.len() as u64, - codec: "RAW".to_string(), + codec: "NONE".to_string(), metadata: serde_json::json!({ "sample_rate": 44100 }), @@ -1122,7 +1138,7 @@ mod tests { offset: 0, size: data.len() as u64, decoded_size: data.len() as u64, - codec: "RAW".to_string(), + codec: "NONE".to_string(), metadata: serde_json::json!({ "sample_rate": 44100 }), diff --git a/crates/console/prometeu-hal/src/asset.rs b/crates/console/prometeu-hal/src/asset.rs index 0a3d3ab9..6ca8ee49 100644 --- a/crates/console/prometeu-hal/src/asset.rs +++ b/crates/console/prometeu-hal/src/asset.rs @@ -20,7 +20,7 @@ pub struct AssetEntry { pub offset: u64, pub size: u64, pub decoded_size: u64, - pub codec: String, // e.g., "RAW" + pub codec: String, // e.g., "NONE" (legacy alias: "RAW") pub metadata: serde_json::Value, } diff --git a/crates/console/prometeu-hal/src/cartridge_loader.rs b/crates/console/prometeu-hal/src/cartridge_loader.rs index 2257a622..70675aaa 100644 --- a/crates/console/prometeu-hal/src/cartridge_loader.rs +++ b/crates/console/prometeu-hal/src/cartridge_loader.rs @@ -369,7 +369,7 @@ mod tests { offset, size, decoded_size: 16 * 16 + (TILE_BANK_PALETTE_COUNT_V1 as u64 * 16 * 2), - codec: "RAW".to_string(), + codec: "NONE".to_string(), metadata: json!({ "tile_size": 16, "width": 16, @@ -451,7 +451,7 @@ mod tests { offset: 4, size: 4, decoded_size: 16 * 16 + (TILE_BANK_PALETTE_COUNT_V1 as u64 * 16 * 2), - codec: "RAW".to_string(), + codec: "NONE".to_string(), metadata: json!({ "tile_size": 16, "width": 16, diff --git a/crates/console/prometeu-system/src/virtual_machine_runtime/tests.rs b/crates/console/prometeu-system/src/virtual_machine_runtime/tests.rs index 419054d6..44787156 100644 --- a/crates/console/prometeu-system/src/virtual_machine_runtime/tests.rs +++ b/crates/console/prometeu-system/src/virtual_machine_runtime/tests.rs @@ -109,7 +109,7 @@ fn test_tile_asset_entry(asset_name: &str, data_len: usize) -> AssetEntry { offset: 0, size: data_len as u64, decoded_size: test_tile_decoded_size(16, 16) as u64, - codec: "RAW".to_string(), + codec: "NONE".to_string(), metadata: serde_json::json!({ "tile_size": 16, "width": 16, diff --git a/docs/runtime/pull-requests/016-asset-codec-none-runtime-and-tests.md b/docs/runtime/pull-requests/016-asset-codec-none-runtime-and-tests.md deleted file mode 100644 index 59a5ddf5..00000000 --- a/docs/runtime/pull-requests/016-asset-codec-none-runtime-and-tests.md +++ /dev/null @@ -1,61 +0,0 @@ -# 016 Asset Codec `NONE` Runtime and Tests - -## Briefing - -Com a decision `013`, o runtime deve migrar o valor canonico de `codec` para `NONE` sem quebrar a transicao curta a partir de `RAW`. - -Esta PR executa a propagacao em codigo, fixtures e testes do runtime. - -## Decisions de Origem - -- `docs/runtime/decisions/013-asset-codec-none-vs-raw.md` - -## Alvo - -Atualizar o runtime para que: - -1. `NONE` seja aceito como valor principal de `codec`; -2. `RAW` seja aceito apenas como alias legado durante a janela curta de transicao; -3. fixtures e testes passem a publicar `NONE` como valor canonico; -4. `TILES` e `SOUNDS` fiquem coerentes com a decision. - -## Escopo - -- atualizar `crates/console/prometeu-drivers/src/asset.rs` -- atualizar fixtures/testes em `prometeu-drivers`, `prometeu-hal` e `prometeu-system` -- ajustar comentarios inline onde `RAW` ainda apareca como valor canonico - -## Fora de Escopo - -- remover imediatamente a compatibilidade com `RAW` -- alterar packer -- introduzir novos codecs -- mudar contratos de layout de `TILES` ou `SOUNDS` -- publicar banks genericos novos como `BLOB` - -## Plano de Execucao - -1. Atualizar o path de resolucao de `codec` para aceitar `NONE` como valor canonico. -2. Preservar `RAW` como alias legado durante a transicao curta. -3. Migrar fixtures e testes para emitir `NONE`. -4. Revisar comentarios e exemplos inline para remover `RAW` como default canonico. -5. Validar que `TILES` e `SOUNDS` continuam operando sem regressao comportamental. - -## Criterios de Aceite - -- runtime aceita `NONE` em `TILES` e `SOUNDS` -- runtime continua aceitando `RAW` apenas como alias legado -- fixtures e testes passam a usar `NONE` como valor canonico -- nenhum comentario ou helper novo reforca `RAW` como valor principal - -## Tests / Validacao - -- testes unitarios do asset loader -- testes do runtime/VM que passam por asset loading -- revisao de fixtures de cartridge/asset metadata - -## Riscos - -- deixar paths diferentes tratando `NONE` e `RAW` de forma inconsistente -- migrar fixtures parcialmente e mascarar regressao real -- prolongar compatibilidade legacy sem rastro claro para remocao futura diff --git a/docs/runtime/pull-requests/README.md b/docs/runtime/pull-requests/README.md index 93edeb84..f5aab88c 100644 --- a/docs/runtime/pull-requests/README.md +++ b/docs/runtime/pull-requests/README.md @@ -36,7 +36,7 @@ Uma PR deste diretório deve: ## Roadmap Atual -- `016-asset-codec-none-runtime-and-tests.md` +Nenhuma PR em aberto no momento. ## PRs Finalizadas @@ -44,3 +44,4 @@ Uma PR deste diretório deve: - `013-tile-bank-runtime-contract-alignment.md`: concluída. Contrato normativo de `tile bank` v1 alinhado entre `specs/04` e `specs/15`. - `014-tile-bank-loader-packed-nibbles-and-palette-boundary.md`: concluída. Loader/runtime atualizado para consumir payload serializado `4bpp` packed com `64` paletas por bank. - `015-asset-codec-none-canonicalization-in-specs.md`: concluída. `NONE` publicado como valor canonico de ausencia de codec adicional nas specs. +- `016-asset-codec-none-runtime-and-tests.md`: concluída. Runtime e fixtures migrados para `NONE`, preservando `RAW` apenas como alias legado temporário.