Skip to content

DO NOT MERGE: reportlab greenfield planner spike - #205

Draft
yyolk wants to merge 2 commits into
masterfrom
cursor/reportlab-greenfield-planner-spike-cb0a
Draft

DO NOT MERGE: reportlab greenfield planner spike#205
yyolk wants to merge 2 commits into
masterfrom
cursor/reportlab-greenfield-planner-spike-cb0a

Conversation

@yyolk

@yyolk yyolk commented Sep 8, 2026

Copy link
Copy Markdown
Owner

DO NOT MERGE. Experimental throwaway spike. This branch will not be merged and may be deleted later.

What this is

A greenfield “what if we never ported the Ruby/Typst decisions” experiment. The Typst/parch application tree is stripped. Tiny Python package writes a yearly planner PDF with open-source ReportLab only (pdfgen.canvas + bookmarkPage / linkAbsolute). No fpdf2, no Typst, no ReportLab PLUS.

Glanceable artifacts (in-repo)

Same shape as the fpdf2 spike so yolk can flip pages:

Cover
Year
Quarter
Month
Week
Day

Generate

python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/press --specimen              # artifacts/specimen-2026.pdf
.venv/bin/press                          # N=0 full year
.venv/bin/press --notes-pages 2

Defaults: year 2026, Monday week start, page 106 × 144 mm portrait.

--notes-pages N: 1 daily page + N dedicated notes pages per day. N=0 (default) is the day page only, with its on-page notes panel.

Notes-pages benchmark

Full-year 2026, Monday weeks. /usr/bin/time -v around press (generate only). VM: 15 GiB RAM, 4 CPUs, no swap. Order 0 → 2 → 10 → 20 → 30 → 50 → 100. Nothing OOM’d. Last completed N=100. Died N: none. Full-year N≥2 PDFs not committed (N=100 was ~109 MB). Details: BENCH.md.

Named dests counted via ReportLab catalog /Destspypdf.named_destinations (keys like /day-2026-07-02).

N pages wall peak RSS PDF bytes link annots named dests
0 436 1.25 s 55.6 MiB 4.3 MB 18 259 436
2 1 166 1.87 s 73.1 MiB 6.2 MB 24 099 1 166
10 4 086 4.40 s 138.4 MiB 14.5 MB 50 379 4 086
20 7 736 7.76 s 224.5 MiB 25.0 MB 83 229 7 736
30 11 386 11.29 s 297.5 MiB 35.5 MB 116 079 11 386
50 18 686 17.84 s 472.7 MiB 56.5 MB 181 779 18 686
100 36 936 34.60 s 892.6 MiB 109 MB 346 029 36 936

Spot-check (pypdf): day-2026-07-02 and day-2026-07-02-notes-1 exist for N≥2; day→notes-1 and notes-1→day annots resolve (N=2: pages 618↔619; N=100: 18454↔18455).

vs fpdf2 (PR #204): same order of magnitude. ReportLab is a bit slower/hungrier at N=100 (35 s / 893 MiB vs 31 s / 629 MiB) and files are ~1.4× larger. No Typst notes-slab cliff on either path.

CI

Old Typst jobs replaced with a specimen generate stub. Do not treat as product CI.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

Strip the Typst/parch tree and emit a 2026 yearly planner with
open-source ReportLab canvas + bookmarkPage/linkAbsolute. Specimen
and glanceable preview PNGs included so the draft can be looked at
before the notes-pages bench finishes.

Co-authored-by: Joseph Chiocchi <joe@yolk.cc>
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Full-year 2026 matrix via /usr/bin/time -v. Nothing OOM'd; N=100 was
35s / 893 MiB. Commit N=0 PDF and machine log; N>=2 full-year PDFs
were deleted after measure.

Co-authored-by: Joseph Chiocchi <joe@yolk.cc>
cursor Bot pushed a commit that referenced this pull request Sep 8, 2026
Full-year 2026 matrix 0→100 via /usr/bin/time -v. Nothing OOM'd.
N=100 was 26s / 518 MiB. Spot-check day↔notes with pypdf.

Co-authored-by: Joseph Chiocchi <joe@yolk.cc>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants