Skip to content

Promote PringlePrints to a full ordering tab - #2

Merged
WilfordGrimley merged 1 commit into
masterfrom
pringleprints-full-tab
Jul 11, 2026
Merged

Promote PringlePrints to a full ordering tab#2
WilfordGrimley merged 1 commit into
masterfrom
pringleprints-full-tab

Conversation

@WilfordGrimley

Copy link
Copy Markdown

Summary

  • Replaces the single-line PringlePrints mention (added in Add NotMPC ordering tab and PringlePrints listing #1) with a full tab on the "Print!" export page, matching the MakePlayingCards and NotMPC tabs' structure and visual weight (intro line, 3-step numbered instructions, closing line).
  • Steps are based on pringleprints.ca's site copy: prepare a print-ready file (300 DPI+), choose finish and batch size on their site, then email the order in. Flagged with a TODO comment for manual verification since it was sourced by an automated fetch, not a manual walkthrough — pricing/service area details may have changed.
  • Removed the now-unused OtherPrintShopsHeight constant and the height-budget workaround it required, since the content now lives in a normal tab pane instead of a fixed-height footer.

Test plan

  • npx prettier@2.7.1 --check on all changed files
  • npx tsc --noEmit — no errors
  • Manually verified in a running dev server via Playwright screenshots: all four tabs (MakePlayingCards, NotMPC, PringlePrints, PDF) render with consistent structure and layout.

🤖 Generated with Claude Code

Gives PringlePrints the same structure and visual weight as the
MakePlayingCards and NotMPC tabs (3-step numbered instructions), replacing
the earlier single-line footer mention. Steps are based on pringleprints.ca's
site copy and flagged with a TODO for manual verification.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@WilfordGrimley
WilfordGrimley marked this pull request as ready for review July 11, 2026 03:49
@WilfordGrimley
WilfordGrimley merged commit 5864062 into master Jul 11, 2026
7 checks passed
WilfordGrimley added a commit that referenced this pull request Jul 11, 2026
Promote PringlePrints to a full ordering tab
WilfordGrimley added a commit that referenced this pull request Jul 16, 2026
Synthesizes infra prerequisites, corrected throughput, cluster/coverage
census, Track 4 status, git/branch audit, and the updated scaling
recommendation (single continuous run, not chunked slices, given the
now-real ~1.8-2.3 day runtime). Awaiting owner go-ahead for the
full-catalog run.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ
WilfordGrimley added a commit that referenced this pull request Jul 16, 2026
…k note (#24)

* Add per-source exclusion flags for OCR/phash selection, yield reconciliation, future-work note

- --exclude-sources-ocr / --exclude-sources-phash flags, OCR defaults to
  excluding source pk=1 (WilfordGrimley), fully overridable, never hardcoded
- reconcile old vs new logic yield on the same fresh 250-card window
- log the 1,097-card (Front)/(Back) name-matching fix as future work

* Test the --exclude-sources CLI argparse defaults, not just the library function

* Add periodic-flush checkpointing to run_pilot, per-batch gate checking

* Document Stage 8 phase timing breakdown (item 3a)

* Item 3b: check CDN tier premise against real Worker source, add --fetch-budget

* Item 3c: tighten OCR crop box + add empirically-validated --fetch-dpi resolution floor

* Addendum item 7: aspect-ratio bleed-edge classification, votes on appropriate-bleed

* Addendum item 8: DPI-tag audit (report only) + deferred art-crop DPI note

* Validate item 8's DPI-tag audit query mechanics against known-nonzero tags

* Item 3d: pipeline concurrency + bleed-first crop normalization

Split per-card compute (fetch/OCR/phash/border/frame/fallback) from the
sequential DB-write loop, run via ThreadPoolExecutor validated against
real live-API contention (2 workers, ~2.1x speedup, ~5ms extra latency
on this box's 2 cores). Bleed classification now runs first and
normalizes every other fixed-fraction crop box for the trimmed-image
minority. Fixed a real cross-thread DB-visibility bug caught by the new
concurrency tests (transactional_db, matching test_sources.py's
existing precedent for update_database()'s own worker threads).

* Item 3e: re-projected full-catalog wall-clock using real dpi=250/concurrency measurements

* Item 4: scaling proposal, phash verdict, install-path decision

* Dockerize pilot: install tesseract in image, retire host venv

Verified end-to-end with a real dry-run inside the rebuilt worker
container; closes the host-venv-disposition gap from the scaling
proposal.

* Addendum items 1/3/4: coverage-gap+demand ordering, skip-before-fetch

select_candidates now sorts by coverage-gap tier, descending uncovered
count, edhrec_rank demand, candidate count, pk - replacing the old
multi-candidate-first split. Cards below the empirical dpi=200
resolution floor are excluded from selection entirely, never fetched.
New uncovered_printings_closed progress metric.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* Addendum item 2a: run-scoped cluster dedup with vote propagation

compute_own_image_clusters phashes our own eligible images and
collapses distance-0 clusters to one representative before slicing;
absorbed members skip OCR/phash/fallback entirely and get their vote
via propagation instead. Guards against double-voting a member that
already has its own vote from a prior run. No schema change (item 2b
deferred).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* Bleed tag: negative-only voting (supersedes both-directions design)

cast_bleed_edge_vote now writes a vote only for a 'trimmed' reading;
'bleed' (the ~97.5% common case) casts nothing at all, so absence of
a vote becomes the documented convention for normal bleed - avoids
flooding moderation with routine APPLY confirmations on a SENSITIVE
tag meant to flag the rare exception. Updated sensitive_tags.py's
comment, which previously documented the opposite convention.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* Document bottleneck-split measurement: CPU-bound, not I/O-bound

Fresh instrumented 50-card run against current code shows fetch is
only ~13% of per-card cost; border/frame classification + pass-2
fallback dominate at ~65-72%. No separate fetch-thread pool exists
currently - _compute_card's single worker pool handles fetch+OCR+
phash+fallback together. This favors a core-count resize or manifest
mode over decoupling fetch threads.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* Document 250-card soak test: throughput stable, clustering rate confirmed

Real 250-card dry run (not a burst) confirms ~1.94s/effective-card,
consistent with the prior top-down measurement, and independently
corroborates the ~26-28% cluster-absorption rate seen in the
bottleneck-split sample.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* Clarify soak test is the pre-resize baseline, not the workers=3 number

* Redact specific instance shape/region from public doc

Exact OCPU/RAM/region values shouldn't sit in a public-facing doc -
keeping the substantive finding (core count matches DEFAULT_WORKERS)
without the specific numbers. History still has the prior values;
owner declined a history rewrite for this pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* Exclude tokens/cardbacks from pilot selection - unmatchable by design

Diagnosed live: a token's printed collector line reads its parent
set's code, while its CanonicalCard candidates use token-specific set
codes that never match - structural, not a parsing bug. Item 1's
descending-uncovered-count ordering was front-loading generic
multi-set token names (huge candidate counts, near-zero coverage) to
the very front of every real selection, yielding 0/250 OCR votes in
today's soak tests where the original pre-items-1/3/4 baseline (94/300)
had none of this population dominating.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* Document token-exclusion fix + corrected post-resize soak comparison

Real 2.24x speedup and healthy OCR yield (56/198, matching the
original baseline) once tokens are correctly excluded from selection.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

* HOLD #2: full package report

Synthesizes infra prerequisites, corrected throughput, cluster/coverage
census, Track 4 status, git/branch audit, and the updated scaling
recommendation (single continuous run, not chunked slices, given the
now-real ~1.8-2.3 day runtime). Awaiting owner go-ahead for the
full-catalog run.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
WilfordGrimley added a commit that referenced this pull request Jul 16, 2026
…cale

Its own sequential ~21.6h cost (unaffected by --workers) exceeded the
compute time it saved by absorbing ~20-28% of cards - HOLD #2's own
numbers showed 1.82 days raw vs 2.34 days with clustering. Also zero
progress visibility for its entire duration, indistinguishable from a
hung process. compute_own_image_clusters/ClusterResult left intact for
a future chunk-scoped redesign; run_pilot now passes a no-op
ClusterResult instead of calling it. 4 integration tests marked skip
with a clear reason, not deleted.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016i9S7LQsCL3FGaih3ZTRBJ
WilfordGrimley pushed a commit that referenced this pull request Jul 18, 2026
Adds a Disposition column recording what actually shipped for each
selected finding, and checks the boxes for everything built on
claude/audit-build-pass. #11 stays unselected (process note in
CLAUDE.md instead of a code fix); #2/#3 are hedge-only, with real
verification still pending from the owner.
WilfordGrimley added a commit that referenced this pull request Jul 18, 2026
* Add UI content-accuracy audit findings table (docs/audits/ui-content-audit.md)

Survey-only, HOLD - not built. 12 findings as a markdown table
(location/current text/why wrong/proposed text/severity 1-5, where 5
is reserved for a machine suggestion presented indistinguishably from
confirmed fact), with a per-row Selected checkbox for the review
pass, summary counts at top, and a "checked, nothing found" section
for completeness.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014dB7mGPQyoML2Ri5ZrprdK

* Mark audit finding dispositions after the build pass

Adds a Disposition column recording what actually shipped for each
selected finding, and checks the boxes for everything built on
claude/audit-build-pass. #11 stays unselected (process note in
CLAUDE.md instead of a code fix); #2/#3 are hedge-only, with real
verification still pending from the owner.

---------

Co-authored-by: Claude <noreply@anthropic.com>
WilfordGrimley added a commit that referenced this pull request Jul 23, 2026
WilfordGrimley added a commit that referenced this pull request Jul 23, 2026
* Ratify artifact-1 parity-replay outcome (issue #154)

* Rebase onto #341, record constants #1/#2 must-fix ruling, clarify cross-method replay baseline
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.

1 participant