Fix inspection follow-ups: docs, import UX, rendering fidelity#5
Merged
Conversation
Align the product with the v1 spec and the post-tier-4 inspection report: honor schema draw fields, validate CSV imports, fix Templates CSS, add file drop/upload and AI mode, progress/cancel generation, live previews from core draw paths, real README, and working package lint scripts.
Match generateJob's draw branch so overview/detail previews match ZIP output when an image, tileset, or ui_panel carries an embedded recipe.
renderBuilderRecipe throws for schema-valid but unsupported features (image/pattern fills, rasters). generateJob catches those; preview must too so the overview does not crash before the user can generate.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Addresses the post-tier-4 repo inspection findings: truthfulness of docs vs code, import UX, schema fields that were ignored by the renderer, preview fidelity, AI mode, and tooling hygiene.
Fixes
${}strings)validateManifestbefore acceptframe_style,show_grid,numbering_style,panel_guides,fill_mode(procedural checker),export_panel_metadatasidecardrawAssetso preview matches ZIP outputAbortSignalbuilderLayerFactories(no duplicated factories)pnpm lintrunstsc --noEmitin each package@placeholderer/templatespackage scaffolded (engine re-exports)Known remaining limits (documented)
builder_recipepath is solid-fill only vs full web Buildercustom_fill_imagedoes not load external rasters in core (checker overlay when tile fill is requested)Test plan
pnpm test(core + CLI) — 99 testspnpm -r buildpnpm lintpnpm e2e(Playwright; updated for Import JSON button + AI mode)Greptile Summary
This PR updates Placeholderer’s import, preview, generation, rendering, docs, and tooling flows. The main changes are:
AssetPreviewrendering aligned withgenerateJob.@placeholderer/templatesscaffold.Confidence Score: 5/5
Safe to merge with low risk from the reviewed changes.
No new issues were identified in the changed code paths. The earlier
AssetPreviewpreview mismatch and crash concerns appear addressed by matchinggenerateJobrendering branches and catching renderer failures. CSV parsing, generation sidecars, package lint scripts, and tests are consistent with the updated behavior.No files require special attention.
What T-Rex did
Important Files Changed
Sequence Diagram
%%{init: {'theme': 'neutral'}}%% sequenceDiagram participant User participant App as apps/web App participant CSV as CSVImport / parseCsvToManifest participant Core as @placeholderer/core participant Preview as AssetPreview participant Zip as ZIP download/report User->>App: Paste/upload/drop JSON or CSV alt JSON import App->>Core: validateManifest(parsed JSON) else CSV import App->>CSV: parseCsvToManifest(text, selected kind) CSV->>Core: validateManifest(manifest) end Core-->>App: valid manifest or errors App->>Preview: render overview preview strip Preview->>Core: drawAsset or renderBuilderRecipe User->>App: Generate / Cancel App->>Core: generateJob(manifest, backend, signal, onProgress) Core-->>App: progress callbacks and GenerateResult alt success App->>Zip: download ZIP and read manifest-report.json else cancelled or errors App-->>User: show cancellation/error report end%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% sequenceDiagram participant User participant App as apps/web App participant CSV as CSVImport / parseCsvToManifest participant Core as @placeholderer/core participant Preview as AssetPreview participant Zip as ZIP download/report User->>App: Paste/upload/drop JSON or CSV alt JSON import App->>Core: validateManifest(parsed JSON) else CSV import App->>CSV: parseCsvToManifest(text, selected kind) CSV->>Core: validateManifest(manifest) end Core-->>App: valid manifest or errors App->>Preview: render overview preview strip Preview->>Core: drawAsset or renderBuilderRecipe User->>App: Generate / Cancel App->>Core: generateJob(manifest, backend, signal, onProgress) Core-->>App: progress callbacks and GenerateResult alt success App->>Zip: download ZIP and read manifest-report.json else cancelled or errors App-->>User: show cancellation/error report endReviews (3): Last reviewed commit: "Guard AssetPreview against core recipe r..." | Re-trigger Greptile