diff --git a/discussion/index.ndjson b/discussion/index.ndjson index f4d4d056..a0306ab6 100644 --- a/discussion/index.ndjson +++ b/discussion/index.ndjson @@ -1,5 +1,5 @@ {"type":"meta","next_id":{"DSC":39,"AGD":42,"DEC":38,"PLN":87,"LSN":53,"CLSN":1}} -{"type":"discussion","id":"DSC-0038","status":"open","ticket":"studio-packer-rgba8888-asset-pipeline","title":"Studio and Packer RGBA8888 Asset Pipeline Alignment","created_at":"2026-05-23","updated_at":"2026-05-23","tags":["studio","packer","assets","glyph-bank","palette","rgba8888","runtime-alignment"],"agendas":[{"id":"AGD-0041","file":"AGD-0041-studio-packer-rgba8888-asset-pipeline.md","status":"accepted","created_at":"2026-05-23","updated_at":"2026-05-23"}],"decisions":[{"id":"DEC-0037","file":"DEC-0037-studio-packer-rgba8888-asset-pipeline.md","status":"accepted","created_at":"2026-05-23","updated_at":"2026-05-23","ref_agenda":"AGD-0041"}],"plans":[{"id":"PLN-0081","file":"PLN-0081-rgba8888-packer-and-studio-spec-propagation.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0082","file":"PLN-0082-rgba8888-palette-model-and-argb-conversion.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0083","file":"PLN-0083-rgba8888-glyph-payload-emission-and-sizes.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0084","file":"PLN-0084-rgba8888-packer-projections-and-workspace-apis.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0085","file":"PLN-0085-rgba8888-tests-fixtures-and-conformance.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0086","file":"PLN-0086-rgba8888-final-integration-and-residue-removal.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]}],"lessons":[]} +{"type":"discussion","id":"DSC-0038","status":"open","ticket":"studio-packer-rgba8888-asset-pipeline","title":"Studio and Packer RGBA8888 Asset Pipeline Alignment","created_at":"2026-05-23","updated_at":"2026-05-23","tags":["studio","packer","assets","glyph-bank","palette","rgba8888","runtime-alignment"],"agendas":[{"id":"AGD-0041","file":"AGD-0041-studio-packer-rgba8888-asset-pipeline.md","status":"accepted","created_at":"2026-05-23","updated_at":"2026-05-23"}],"decisions":[{"id":"DEC-0037","file":"DEC-0037-studio-packer-rgba8888-asset-pipeline.md","status":"accepted","created_at":"2026-05-23","updated_at":"2026-05-23","ref_agenda":"AGD-0041"}],"plans":[{"id":"PLN-0081","file":"PLN-0081-rgba8888-packer-and-studio-spec-propagation.md","status":"done","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0082","file":"PLN-0082-rgba8888-palette-model-and-argb-conversion.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0083","file":"PLN-0083-rgba8888-glyph-payload-emission-and-sizes.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0084","file":"PLN-0084-rgba8888-packer-projections-and-workspace-apis.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0085","file":"PLN-0085-rgba8888-tests-fixtures-and-conformance.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]},{"id":"PLN-0086","file":"PLN-0086-rgba8888-final-integration-and-residue-removal.md","status":"review","created_at":"2026-05-23","updated_at":"2026-05-23","ref_decisions":["DEC-0037"]}],"lessons":[]} {"type":"discussion","id":"DSC-0037","status":"done","ticket":"pbs-autocomplete-parameter-names","title":"PBS autocomplete parameter names for stdlib and method calls","created_at":"2026-05-08","updated_at":"2026-05-14","tags":["compiler-pbs","studio","lsp","autocomplete","signature-help","stdlib"],"agendas":[],"decisions":[],"plans":[],"lessons":[{"id":"LSN-0052","file":"discussion/lessons/DSC-0037-pbs-autocomplete-parameter-names/LSN-0052-canonical-callable-parameter-names-through-pbs-editor-assistance.md","status":"done","created_at":"2026-05-14","updated_at":"2026-05-14"}]} {"type":"discussion","id":"DSC-0036","status":"open","ticket":"pbs-symbol-documentation-and-hover-markdown","title":"Modelo de documentacao de simbolos em PBS e consumo markdown no hover","created_at":"2026-05-08","updated_at":"2026-05-08","tags":["compiler","compiler-pbs","studio","lsp","vscode","editor","hover","documentation","markdown"],"agendas":[{"id":"AGD-0039","file":"AGD-0039-pbs-symbol-documentation-and-hover-markdown.md","status":"open","created_at":"2026-05-08","updated_at":"2026-05-08"}],"decisions":[],"plans":[],"lessons":[]} {"type":"discussion","id":"DSC-0035","status":"done","ticket":"pbs-lsp-editor-assistance-wave-1","title":"Wave 1 de assistencia editorial via LSP para PBS no VS Code","created_at":"2026-05-08","updated_at":"2026-05-08","tags":["studio","lsp","vscode","compiler","compiler-pbs","editor","completion","hover","signature-help"],"agendas":[],"decisions":[],"plans":[],"lessons":[{"id":"LSN-0051","file":"discussion/lessons/DSC-0035-pbs-lsp-editor-assistance-wave-1/LSN-0051-compiler-backed-editor-assistance-for-pbs.md","status":"done","created_at":"2026-05-08","updated_at":"2026-05-08"}]} diff --git a/discussion/workflow/plans/PLN-0081-rgba8888-packer-and-studio-spec-propagation.md b/discussion/workflow/plans/PLN-0081-rgba8888-packer-and-studio-spec-propagation.md index e14c1d59..150d90eb 100644 --- a/discussion/workflow/plans/PLN-0081-rgba8888-packer-and-studio-spec-propagation.md +++ b/discussion/workflow/plans/PLN-0081-rgba8888-packer-and-studio-spec-propagation.md @@ -2,9 +2,9 @@ id: PLN-0081 ticket: studio-packer-rgba8888-asset-pipeline title: RGBA8888 Packer and Studio Spec Propagation -status: review +status: done created: 2026-05-23 -completed: +completed: 2026-05-23 ref_decisions: - DEC-0037 tags: @@ -116,12 +116,12 @@ semantics unchanged. ## Acceptance Criteria -- [ ] Packer specs define `rgba8888` as the canonical palette field. -- [ ] `GLYPH/indexed_v1` remains named exactly that. -- [ ] Palette block formulas use `64 * 16 * 4 = 4096`. -- [ ] Specs state palette index `0` is ordinary and all 16 entries are usable. -- [ ] Specs state partial alpha is valid and magenta color-key is removed. -- [ ] Specs leave `DSC-0005` variable palette-count work out of scope. +- [x] Packer specs define `rgba8888` as the canonical palette field. +- [x] `GLYPH/indexed_v1` remains named exactly that. +- [x] Palette block formulas use `64 * 16 * 4 = 4096`. +- [x] Specs state palette index `0` is ordinary and all 16 entries are usable. +- [x] Specs state partial alpha is valid and magenta color-key is removed. +- [x] Specs leave `DSC-0005` variable palette-count work out of scope. ## Dependencies diff --git a/docs/specs/packer/3. Asset Declaration and Virtual Asset Contract Specification.md b/docs/specs/packer/3. Asset Declaration and Virtual Asset Contract Specification.md index 7e365193..25d0fbb8 100644 --- a/docs/specs/packer/3. Asset Declaration and Virtual Asset Contract Specification.md +++ b/docs/specs/packer/3. Asset Declaration and Virtual Asset Contract Specification.md @@ -118,6 +118,9 @@ Rules: - collections such as `output.pipeline.palettes` may remain JSON arrays for authoring ergonomics; - when a collection member has runtime- or packing-relevant identity, each entry must carry an explicit `index`; - `output.pipeline.palettes` entries must use the shape `{ "index": , "palette": { ... } }`; +- glyph-bank palette payloads must expose canonical `rgba8888` color values in runtime RGBA channel order; +- ARGB values produced by host image APIs are import-side implementation details, not canonical declaration or projection fields; +- `convertedRgb565` is not part of the normal palette contract; - the packer must sort such entries by numeric `index`, not by physical array position; - duplicate or malformed indices are structural errors; - missing or malformed `palette` payloads are structural errors; @@ -133,8 +136,7 @@ Example: { "index": 0, "palette": { - "originalArgb8888": [4294901760, 4278255360], - "convertedRgb565": [63488, 2016] + "rgba8888": [4294901760, 16711935] } } ] @@ -143,6 +145,19 @@ Example: } ``` +For glyph-bank palettes, each `rgba8888` integer is interpreted as +`0xRRGGBBAA`. + +Rules: + +- palette index `0` is an ordinary palette slot; +- glyph palettes expose 16 usable colors; +- transparency and partial transparency are represented only by the alpha byte + in the RGBA8888 palette value; +- alpha values from `0` through `255` are valid; +- magenta color-key behavior is not supported as a normal declaration, + projection, or publication rule. + ## Metadata Source Segmentation and Runtime Sink `asset.json` may keep metadata segmented by concern during authoring. diff --git a/docs/specs/packer/4. Build Artifacts and Deterministic Packing Specification.md b/docs/specs/packer/4. Build Artifacts and Deterministic Packing Specification.md index c5f2ec77..a91b9f1a 100644 --- a/docs/specs/packer/4. Build Artifacts and Deterministic Packing Specification.md +++ b/docs/specs/packer/4. Build Artifacts and Deterministic Packing Specification.md @@ -178,10 +178,10 @@ Rules: - the serialized payload for `GLYPH/indexed_v1` is: 1. one packed `u4` pixel plane for the full emitted sheet; - 2. one palette block of `64 * 16 * 2 = 2048` bytes; + 2. one palette block of `64 * 16 * 4 = 4096` bytes; - packed pixel bytes must be emitted by the packer, not inferred later by the runtime; -- the palette block is serialized as `RGB565` `u16` values; -- palette bytes must be emitted in little-endian order; +- the palette block is serialized as RGBA8888 values in runtime RGBA channel order; +- each palette entry is emitted as four bytes in `R`, `G`, `B`, `A` order; - payload interpretation must not depend on incidental per-artifact boundaries. ### Runtime Entry Derivation @@ -198,8 +198,8 @@ Rules: - `palette_count` - tile-bank v1 requires `palette_count = 64`; - tile-bank v1 size formulas are: - - `size = ceil(width * height / 2) + 2048` - - `decoded_size = (width * height) + 2048` + - `size = ceil(width * height / 2) + 4096` + - `decoded_size = (width * height) + 4096` ### Palette Contract @@ -207,8 +207,13 @@ Rules: - bank palettes are declared under `output.pipeline.palettes`; - each palette declaration uses the shape `{ "index": , "palette": { ... } }`; +- each palette payload uses canonical `rgba8888` entries interpreted as `0xRRGGBBAA`; - palette ordering is ascending numeric `index`, never raw array position; - palette ids in the emitted glyph bank are the normalized declared palette indices; +- palette index `0` is ordinary and may carry any RGBA8888 value; +- glyph palettes have 16 usable entries; +- transparency and partial transparency are encoded only by RGBA alpha; +- magenta color-key behavior is not part of the normal glyph-bank contract; - any tile in the bank may be rendered with any palette in the bank at runtime; - palette selection is a runtime draw concern, not a tile-payload embedding concern. diff --git a/docs/specs/studio/4. Assets Workspace Specification.md b/docs/specs/studio/4. Assets Workspace Specification.md index a2b26e75..a721f34b 100644 --- a/docs/specs/studio/4. Assets Workspace Specification.md +++ b/docs/specs/studio/4. Assets Workspace Specification.md @@ -224,6 +224,10 @@ Rules: - `output.format` - `codec` - `preload` +- Glyph-bank palette projections must use canonical `rgba8888` values when + palette data is shown. +- Studio-facing glyph palette views must not expose `convertedRgb565` as normal + runtime or tooling truth. - Runtime-facing output information must not require raw JSON inspection. ### Inputs / Preview @@ -328,6 +332,10 @@ Rules: - `glyph_asset_id` is derived from the glyph asset selected for the layer; - `parallax_factor_x` and `parallax_factor_y` are layer-owned editorial fields in Studio; - `palette_id` has a layer-owned default and may be overridden per tile when the supported editorial surface provides an explicit override; +- `palette_id` remains an index into the referenced glyph palette and does not + imply a color format change in the scene request; +- referenced glyph palettes resolve to RGBA8888 entries, with palette index `0` + treated as an ordinary palette slot; - layer `active` determines whether the layer participates in publication output; - tile `active` determines whether the tile contributes an active tile record to the published request; - canonical scene persistence must not depend on `TMX`, `TSX`, or any other external file format remaining present on disk.