Conversation
Three coupled changes to the windows-latest release build: 1. Entry point. Pass 'autopapertoppt' (the package) instead of 'autopapertoppt/__main__.py' (the file), with --python-flag=-m. This matches how the CLI is invoked at runtime (python -m autopapertoppt) and silences the 'specify its containing directory' warning Nuitka was emitting on every build. 2. Distribution model: drop --onefile, keep --standalone. The build now produces autopapertoppt.dist/ — a directory with the exe + every DLL it needs. Onefile mode wraps that into a self- extracting binary that unpacks to %TEMP% on each launch, which adds startup latency and trips antivirus heuristics on locked- down corporate machines. 3. Asset format. Compress the dist folder into autopapertoppt-windows-x86_64.zip via Compress-Archive (ships with PowerShell on every Windows runner) and attach the zip to the release. Users unzip once and run the .exe directly — no per-launch extraction. README's release-pipeline description is updated to reflect the new model + revised cold/warm timings (cold ~70 min with PySide6; warm ~5-10 min with cache).
i18n ---- GUI label table now covers every language the slide-deck exporter ships: en, zh-tw, zh-cn, ja, es, fr, de, ko, pt, ru, it, vi, hi, id. Each of the 45 UI keys gets all 14 entries; coverage is enforced by tests/gui/test_i18n.py::test_every_key_has_every_language so a missing translation fails the PR rather than showing up as English in an otherwise-localised UI. The two i18n tables (UI labels + slide-deck output) intentionally stay separate modules but now share the same language set, which a new test_supported_languages_match_deck_table check locks down. A LANGUAGE_DISPLAY_NAMES map renders each language in its own script (繁體中文 / Español / हिन्दी / etc.) in the Settings dropdown, so users see their language in their own writing system before they pick it. First-run language detection uses QLocale().name() and the new normalise_language fallback path: 'zh_TW' -> 'zh-tw', 'zh-Hant-TW' -> 'zh-tw', 'es_ES' -> 'es', 'fr_CA' -> 'fr', unknown -> 'en'. Responsive layout ----------------- MainWindow now wraps the Search and Settings pages in a QScrollArea (widgetResizable=True) so the form widgets stretch horizontally with the window and reveal a vertical scrollbar when the window shrinks below the form's natural height. Window bounds: minimum 900x600 (still fits a 720p laptop), default 1280x800. Tests assert both, plus the can-resize-smaller invariant. HiDPI ----- QT_ENABLE_HIGHDPI_SCALING=1 and QT_SCALE_FACTOR_ROUNDING_POLICY= PassThrough are pinned in os.environ before QApplication.__init__ runs (the only safe time to set them). Default font bumped to point size 10 so CJK glyphs stay readable on dense screens, with a Windows-shipped CJK / Devanagari fallback chain (Microsoft JhengHei UI, Yu Gothic UI, Malgun Gothic, Nirmala UI) so a missing glyph in the primary font cascades cleanly instead of rendering tofu. Tests ----- +31 GUI tests: parametrised i18n coverage (one assertion per supported language), responsive-layout checks, MainWindow constructs cleanly in every language.
Previously /docs covered the surfaces (cli, mcp, gui, pptx_editing, packaging-*) but had nothing for installation paths, env-var configuration, architecture / data flow, troubleshooting, source- plugin authoring, releases, or contributing. Users had to cross- reference CLAUDE.md and AGENTS.md to find half this material, and agents trying to add a new source had no walkthrough. New documents: - installation.md (281 lines) — every supported install path, OS notes, full dep surface per extra, verifying an install, uninstall, common install failures. - configuration.md (180 lines) — env vars by category, QSettings paths per OS and key, CLI defaults, per-source rate limits with numbers, cache layout, and an explicit 'NOT in this project' section so contributors don't accidentally re-add removed knobs. - architecture.md (367 lines) — layered diagram, dependency direction rules, top-level file tree, core-vs-plugin split with rationale, pipeline flow ASCII diagram, dedup algorithm passes, rank formula, two enrichment paths, every infrastructure invariant (HTTPS-only client, token bucket, cache, i18n), and a table of design choices with reasons. - data_model.md (323 lines) — every field on Query / Paper / PaperSummary / PaperCollection / ExportOptions with type, whether required, who populates it, and example values. Nested rich-tier types (ContributionDetail, Metric, TechniqueRow, LiteratureRow, MethodSection, EvaluationSection, RqResult) documented separately. Identifier parsing forms enumerated. Exception hierarchy laid out. - troubleshooting.md (392 lines) — failure modes by surface (install, CLI, MCP, PPTX, GUI, CI, tests) with cause + fix for each. Replaces the scattered troubleshooting paragraphs in en/index.rst with a single consolidated reference. - source_plugins.md (419 lines) — step-by-step source-plugin authoring guide. File layout, RateLimit declaration, parser pattern, fetcher pattern, registration, fixture recording, test coverage expected. Common pitfalls section (constructing your own httpx client, hardcoded keys, missing source_id, HTML in abstract field, xml.etree on untrusted input). When-to-promote- to-core criteria. - contributing.md (299 lines) — Definition of Done from CLAUDE.md surfaced for first-time contributors. Commit message rules. Test coverage matrix per change type. SonarQube / Codacy / ruff / bandit rule set with thresholds. Branch / PR conventions. Local CI reproduction commands. 'Where to put new code' table. - releases.md (217 lines) — auto-bump pipeline diagram, every artefact a release produces, version-bump strategy, [skip release] escape hatch, loop prevention layers, --standalone vs --onefile trade-off table, Windows-only rationale, build timings, repo settings required, recovering from a failed release, branch protection notes. Updated docs/index.rst master TOC: 'Getting started' grouping adds installation + configuration; 'Concepts' adds architecture + data_model; 'Operations' adds releases + troubleshooting; 'Contributing' adds contributing + source_plugins. Quick links block points at GitHub repo, PyPI, latest release, issue tracker. Net: /docs goes from ~2000 lines across 7 docs to ~3977 lines across 15 docs. Every reference question a user or contributor can ask now has a dedicated page; the en/index.rst remains the narrative user-guide and the new docs are deep-dive references it can link into.
Adds the project's first visual identity: assets/generate_icon.py - reproducible Pillow recipe that renders the icon at 1024x1024 and LANCZOS-downsamples to 16 / 32 / 48 / 64 / 128 / 256 px. Re-run the script whenever the design changes. assets/icon.ico - multi-resolution Windows icon committed to the repo so the Nuitka build step does not need Pillow installed. 19 KB, six embedded sizes. assets/icon-256.png - single 256x256 PNG for README / docs use and as a fallback for platforms that do not read .ico. assets/README.md - design rationale (paper + slide metaphor, colour palette: blue-800 ground + amber-500 accent + slate-400 text rules) and a note on why we ship the .ico directly rather than converting SVG at build time. Wiring: - .github/workflows/release.yml - Nuitka step now takes --windows-icon-from-ico=assets/icon.ico so the built .exe carries the icon in its PE resource table. Windows Explorer + Taskbar + Alt-Tab pick it up automatically. - autopapertoppt/gui/app.py - QApplication.setWindowIcon is set to the same .ico at startup, so the desktop GUI's title bar / taskbar / Alt-Tab all show the icon when running from source as well as from the Nuitka bundle. _load_app_icon soft-fails with None when the .ico is not reachable (future repackaging safety net) so the GUI never crashes for an icon-related reason. - tests/gui/test_app_icon.py - four smoke tests: file is present in the repo, QIcon loads with the right embedded sizes, missing file returns None instead of raising, computed path lives under the repo root. Net: 451 tests pass, ruff + bandit clean.
5 tasks
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
Four-commit follow-up bundling the post-PR-5 work.
4a9c423— Nuitka build: standalone folder + zip +-mentryDrops
--onefilein favour of--standalone. Build producesautopapertoppt.dist/, which is then zipped withCompress-Archiveand attached to the release asautopapertoppt-windows-x86_64.zip. Entry point switches to--python-flag=-m+ bareautopapertopptso the bundle mirrorspython -m autopapertoppt. Rationale: onefile self-extracts to%TEMP%on every launch (~1-3 s, antivirus-flagged); the zip ships once and runs in place.1bb3913— GUI: 14 languages + responsive layout + HiDPIUI labels expanded from 2 → 14 languages (en, zh-tw, zh-cn, ja, es, fr, de, ko, pt, ru, it, vi, hi, id), same set as the slide-deck exporter. First-run language picked from
QLocale().name()with locale-suffix fallback (zh_TW→zh-tw,zh-Hant-TW→zh-tw,es_ES→es). Settings dropdown renders each language in its own script.Layout: every form sits in a
QScrollArea(widgetResizable=True), window min 900×600 / default 1280×800. HiDPI policy + font fallback chain pinned beforeQApplication.__init__.+31 GUI tests (parametrised 14-language coverage + responsive checks + per-language
MainWindowconstruction smoke).eb7f57c— Docs: eight comprehensive reference pages/docsgoes from ~2000 lines / 7 files to ~3977 lines / 15 files. New:installation.md,configuration.md,architecture.md,data_model.md,troubleshooting.md,source_plugins.md,contributing.md,releases.md.docs/index.rstmaster TOC reorganised into Languages / Getting started / Surfaces / Concepts / Operations / Contributing.e45edb8— App icon + Nuitka / GUI wiringassets/generate_icon.pyPillow recipe →assets/icon.ico(multi-res 16/32/48/64/128/256, 19 KB) +assets/icon-256.png. Design: rounded blue-800 square + white paper-sheet with text-line placeholders + amber slide tile with play triangle.Wired into:
--windows-icon-from-ico=assets/icon.ico— Explorer / Taskbar / Alt-Tab show the icon.QApplication.setWindowIconat GUI boot — same in source runs.+4 icon tests (file present,
QIconloads, missing-file soft-fails, path under repo).Validation
ruff check .cleanbandit -c pyproject.toml -r autopapertoppt/ sources/cleanTest plan
bump-versionreads0.1.X→ bumps to0.1.X+1→publish-pypiuploads → Nuitka build succeeds within 90 min and attachesautopapertoppt-windows-x86_64.zip(with icon embedded) +.sha256→publish-releaseunmarks the draft → release shows up in sidebar.exeshows the new icon in Explorer + Taskbarautopapertoppt.exe guiopens with the icon in its title bar