Repository navigation
Quick Deck v2: the app from the approved designs - #506
Merged
Merged
Conversation
App Flow's first two steps for a desktop deck editor over the deck engine, in the same family as PDF Tools v2. No images are generated: that paid step waits for the maintainer's approval. - design/BRIEF.md: jobs, the window layout (tabs, toolbar, slide navigator, canvas, a Format / Layout / Theme / Notes inspector, status line), ten screens and their states, every action mapped to the deckcraft commands it runs with their safety classes, what the deck service lacks today, the engine limits the design accepts, data and open questions. - design/source/prompts.md: the shared style block and ten screen blocks (nine light, one dark) at 1536 x 1024, structured like PDF Tools' prompts so the same generation script parses it. - design/SERVICE-DRAFT.md: a draft of the app-facing deck service contract (open documents per caller with undo, typed editing methods, renders in a managed cache, present steps, export options, error codes and caps), each method mapped to engine commands, for the coordinator to settle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ten screens generated with the OpenAI Image API (gpt-image-2, 1536 x 1024, quality high) from source/prompts.md, authorized by the maintainer on 11 Oct 2026. Each screen keeps its exact prompt text (NN-*.prompt.txt), its untouched PNG and its measurement (NN-*.measured.json, from measure_desktop.py, a copy of PDF Tools' desktop adaptation of App Flow's observe and measure steps, with App Flow's ocr.swift). generation.json records the provider, model, sizes, hashes and usage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SERVICE-DRAFT.md becomes SERVICE.md with the coordinator's decisions on its eight open questions (op-grouped API, a per-method command count, undo through the engine's public History, the service's own import guard before the engine sees a byte, deckcraft-anim for present, PDF Tools' cache numbers, no font bundling, the pdf service's test standard), plus Draft with AI through model.complete and a 1536 x 1024 window hint. The maintainer approved the ten designs on 11 Oct 2026. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drops the draft header, and brings the body in line with the settled decisions: the gate admits every command with each method's own count, the import guard runs on every path that opens a file and names its codes, a cells fill holds at most 1,024 cells, and deckcraft-anim is a dependency. Settles BRIEF.md's five open questions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One map per approved screen in apps/quickdeck/design/map/, in PDF Tools' form: every measured text run, surface and divider tied to the region and widget that rebuild it, with its geometry, light and dark colours (dark from 10-dark-notes), type size from the ink heights, the review decision that applies, the runtime source it relies on, and what the runtime or the service can't do yet. Sample art inside slides, thumbnails, tiles, covers, layout pictures and theme previews is the engine's render (deck.view, deck.layouts, deck.cover, deck.themes), not rebuilt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A presentation editor rebuilt from the ten approved designs through App Flow, on the deck service's open documents (design/SERVICE.md, as built in #503): a library with the engine's covers; tabs; a toolbar with insert strips; a navigator with sections; a canvas with the engine's render, selection, handles and text edited in place; an inspector with Format, Layout, Theme and Notes; a sorter with sections; New from an outline, typed or drafted with the person's own provider (model.complete); Present on a dark stage inside the window; Export to .pptx, PDF and pictures; and every state the brief lists. Light and dark through shared tokens; state on mod.quickdeck_state; no fixture or replay path in the bundle. The manifest declares storage, files, deck and model, asks for the designs' 1536 x 1024 window (schema_minor 1) and moves to 0.2.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dev-fixture/engine.splash is a stand-in for the deck service that answers SERVICE.md's methods as #503 does (layouts by id, a notes preview in deck.slides, transitions in milliseconds, colour schemes by name); make_fixture.py fills the app's storage with the designs' sample decks and the engine's real catalogs. v1's fixture goes. tests/ui.py runs every designed screen and state in card-host, light and dark, beside its design, and the real engine's journey in a hidden desktop shell (on Linux on a private headless weston, as PDF Tools' ui.py does), then a restart. quickdeck_model_tests.rs runs the bundle's pure functions in a script VM. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
apps/quickdeck/README.md (and its Chinese) describes v2: the window, the screens and the engine methods behind them, opening a presentation from the device, storage, the runtime's limits the script works around, the tests and what is verified. tests/evidence/v2-20261011 holds the card-host side-by-sides and states, light and dark, the real engine's frames from a hidden Linux shell, and a receipt with digests, commands, the failed rounds before these, and what wasn't verified. apps/README.md and its Chinese follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The branch is rebased on main 202d7cc, which has the deck service. The shell runs (light, dark, restart) passed again with a shell built from that tree, with no script error or overrun; nothing changed for the app. The Linux frames and the receipt now name that head and the merged service instead of the earlier local merge with the service's branch. The card-host frames stand: the rebase changed no file of the app, its fixture or its tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ymote
force-pushed
the
design/quickdeck-v2
branch
from
October 11, 2026 20:59
8eb2ad5 to
ee8d2e8
Compare
ymote
marked this pull request as ready for review
October 11, 2026 21:00
Contributor
Author
|
Local CI passed on ee8d2e8 ( GitHub would run for this PR: desktop.yml, phone.yml, apps.yml. Merged on this local pass (macOS runner queue); GitHub CI runs on the merge commit on main.
Skipped (these did NOT pass; (!) marks a skip that blocks tools/ci-local-merge.sh):
Notes:
|
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.
Quick Deck v2 (
os.quickdeck), rebuilt through App Flow from the ten designs the maintainer approved on 11 Oct 2026. This PR is the UI and the design files only. It calls the deck service's open-document methods inapps/quickdeck/design/SERVICE.md. That service is #503, merged into main as 202d7cc, and this branch is rebased on it.What's here
SERVICE.md: contract as built in #503andSERVICE.md: the guard's final rules (#503): the coordinator's as-built contract and the guard's final rules, each committed alone.apps/quickdeck/design/map/NN-*.json). One per screen, in PDF Tools' form: every measured run, surface and divider is tied to the region and widget that rebuild it, with geometry, light and dark colours, type size, the review decision and runtime citations. Unmapped: 0 on every screen.bundle/main.splash, manifest 0.2.0, 57 icons):model.complete); Present on a dark stage; Export (.pptx, PDF, pictures).storage,files,deck,model(all in App Hub'sKNOWN_CAPABILITIESat the pin) and asks for a 1536 x 1024 window (schema_minor1).crates/shell/src/quickdeck_model_tests.rs: the pure functions in a script VM.tests/ui.py: card-host runs on the dev fixture; the real-engine journey in a hidden shell, now also on Linux on a private headless weston, as PDF Tools does.dev-fixture/: a stand-in that answers the way deck service v2: open documents for Quick Deck v2 #503 does.apps/quickdeck/README.md(English and Chinese),apps/README*.md, andapps/quickdeck/tests/evidence/v2-20261011/(frames, side-by-sides,receipt.json).How it was tested
cargo test --locked -p octosense-shell --lib quickdeck_model: 22 pass. With--features app-hub: 23 pass; the extra one is the manifest's window hint.card-host(macOS, Apple silicon, 64 ms budget).missing,fixtureandstatespass, light and dark, with no script errors. This card-host ignoresMAKEPAD_SPLASH_BUDGET_MS. An earlier round passed every step, but its log had one budget overrun right after a PNG decode, at load averages of 36 to 100. The rebase changed no file of the app, its fixture or its tests (same digests), so these frames stand.shellpasses, light then dark through the shell's style menu, and so doesrestart. No script errors and no overruns. Nothing changed for the app with the final guard.no_providerin the app's words; a deck from a typed outline; text edited in place; bold; a chart with its grid; undo and redo; a layout; a theme; notes; sorter duplicate, hide and section; save; .pptx and PDF exports; Present; then a restart.receipt.json. Ten shell rounds found five app bugs, all fixed:deck.hitrefuses an emptyselectedlist.include_hidden, which the service refuses.Maps: one line per screen
deck.themescolours (no theme fonts). Covers aredeck.cover. Duplicate and Remove are quiet icons on each card, from the brief's job 9.deck.view {editing}render. It shows plain lines without bullets.format_statehas no anchor or autofit.deck.slidein milliseconds. Transitions don't play.deck.slidewhen the preview was cut.deck.slide, with "Reading the notes…" until they arrive. The navigator opens a window around the current slide, with a "‹ Slides 1–n" link.Remaining differences against the designs, and why
theme.font_bolddraws regular; in the shell it is bold.Runtime gaps (makepad d653bc44)
widgets/src/text_input.rs:3362, 3697:KeyDownUnhandledis a widget action. Onlyon_changeandon_returnreach scripts (:675-677). So every shortcut is a button.text_input.rs:2400-2425:script_callanswerstextandset_textonly.widgets/src/view.rs:248-258. A drag held by one of them ends, and a field in it loses its typing. So drags draw in their own layer, and edits and notes never redraw their field.view.rs:296-306). So the navigator and sorter show windows of slides.\xescapes.libs/regex/src/parse.rs:354-366. The script uses[:cntrl:]instead.platform/script/src/vm.rs:1232. card-host's runtime lacks theMAKEPAD_SPLASH_BUDGET_MSpatch.pick()evaluates both arguments.loopcan't be an object key.widget_async.rs:1574logs harmless "script_result dropped" warnings for nested regions.Contract changes the design needs (not made here)
(
deck.hitwithselected: [], which I listed before, is settled: the final guard treats it as no selection, and the app leaves an empty list out anyway.)deck.themes:color_schemesas[{name, colors}]with the 12 slots. The engine lists names only (engine/src/cmd/design.rs:92).deck.open/deck.state: the deck's current colour-scheme and font-scheme names.deck.open: footer state (slide numbers, date, footer text).deck.format_state:anchorandautofit.deck.slide: a chart'slegend,data_labels,gridlinesandpalette, and a table's options (header and total rows, banding, first and last column).slide.inspectomits them (engine/src/cmd/inspect.rs).Not verified
🤖 Generated with Claude Code