slides: Multiple UX issues reported by Robert #87
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Robert generated an 8-slide deck from a Dutch PDF business plan. Generation worked well, but he hit several blockers:
see doc attached
Investigation findings (on current
developmentbranch)Bug 1 — Slides stuck "Generating" after jobs complete ✅ Fixed
Root cause:
_generatingSlidesis a client-side optimistic-tracking Set that is populated when generation is submitted. It was only cleared whenhas_pngbecametruein the auto-refresh timer. Two failure modes:has_pngstaysfalseforever → badge stuck in "Generating" indefinitelyonSlideJobChangedbefore the timer clears the set, the badge stays "Generating" until the 2s timer firesFix applied in two places:
onSlideJobChanged: now calls_generatingSlides.delete(slug)immediately when a job transitions to a terminal state (done/failed/cancelled/timed_out), before refreshing the deck view_generatingSlideswhen!slideJobActive(s.name)(job is no longer active in the panel), not only whenhas_pngis trueBug 2 — Create PDF fails with errors
No code bug found. The PDF creation is pure Rust (
printpdf0.7) and reads PNGs fromoutput/. Possible causes on the deployed instance:output/(partial write during generation)Ok(())The fix for Bug 1 might indirectly help here — if slides that "failed" are now correctly shown as Pending instead of Done, the user will know to regenerate before creating a PDF.
Needs error log from the deployed instance to diagnose further.
Bug 3 — No PPTX or ODP download option
Confirmed missing feature. Only PDF export is implemented. PPTX/ODP would require a new export pipeline. Tracking as a separate feature request.
Bug 4 — Buttons in lower sections point to non-existing destinations
Unable to reproduce without the attached document. Investigation found:
index.htmlreferences 6 functions (fixSlideContent,rewriteSlideContent,toggleInstructPanel,startInstructRecording,stopInstructRecording,executeInstruct) that are not defined indashboard.js— but this overlay is dead code (never activated in current code flow,openEditor()navigates to the full-page editor instead)navigateTo()routes in the template are handled by the routerPlease share the attached document or screenshot so we can identify the specific buttons.
@casper-stevens those buttons I assume (document is attached in my issue above)
Follow-up investigation
Bug 1 — Slides stuck "Generating" ✅ Fixed (
d2e9c27)Already resolved in the previous comment. 30+ commits ahead of the deployed instance.
Bug 2 — PDF creation fails with
missing field 'src'✅ Fixed (d55b8d4)Root cause confirmed:
handle_deck_pdf_job_logsused the typed hero_proc SDKjob_logs()call, which deserializes log line objects with a requiredsrcfield. hero_proc occasionally omitssrcfrom log entries, causing the entire poll to fail with a deserialization error, which the JS client displayed as the repeatingPoll error (retrying): job.logs: Deserialization error: Failed to deserialize result: missing field 'src'loop visible in the screenshot.Fix: replaced the typed call with a raw tolerant deserialization that uses
#[serde(default)]on all fields. Deploying currentdevelopmentto the devslides VM will fix both Bug 1 and Bug 2.Bug 3 — No PPTX / ODP export
Still a missing feature. Only PDF export is implemented. Would require a new export pipeline. Keeping open as a feature request.
Bug 4 — Job card ⧉ button points to a non-existing destination
The external-link button in each job card links to
/hero_proc/ui#jobs/<id>. This path works on a full Hero OS install (routed byhero_router), but is a 404 on the standalone devslides VM where hero_proc admin is not exposed at that path.The clipboard (□) button is unrelated — it copies the job ID and works fine.
Fix: inject
HERO_PROC_UI_BASEfrom the Rust server instead of hardcoding/hero_proc/uiin JS. It would read from a hero_proc secret (e.g.HERO_PROC_ADMIN_URL), default to empty string on standalone deployments, and suppress the button entirely when empty.