Skip to content

Bump version to 1.7.0: envelope templates and mixed-batch carrier/service - #102

Merged
sgf36 merged 5 commits into
mainfrom
feat/envelope-templates-mixed-batches
Oct 26, 2026
Merged

sgf36 merged 5 commits into
mainfrom
feat/envelope-templates-mixed-batches

Conversation

@sgf36

@sgf36 sgf36 commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Summary

  • Envelope printing: six envelope-size label templates (DL, C5, C4, Licence webhook: name the stage that failed, and keep logging on #10, 6×9, 9×12) for direct printing onto envelopes, with laser/inkjet margin support and calibration offsets.
  • Mixed carrier/service batches: per-row carrier and service columns in the xlsx template let one batch ship via different carriers. The downloaded template now includes a carrier dropdown and a visible Service Reference sheet.
  • Per-row validation: invalid carrier or service codes are caught at import — carrier without service (or vice versa) is flagged, and unknown codes are validated against the live catalogue.
  • Version bump to 1.7.0: config, AppxManifest, all 16 download pages, and release notes.

Test plan

  • pytest tests/test_label_sheet.py — 35 tests including 16 new envelope tests
  • pytest tests/test_batches.py — 22 tests including 8 new carrier/service validation tests
  • pytest tests/test_batch_customs.py tests/test_batch_rate_preview.py — 62 tests, no regressions
  • CI builds pass on both windows-latest and macos-latest
  • Download template → verify carrier dropdown and Service Reference sheet in Excel
  • Import xlsx with per-row carrier/service → preview shows per-row values, validation catches mismatches

🤖 Generated with Claude Code

sgf36 and others added 5 commits October 26, 2026 19:03
…vice

Envelope printing: six envelope-size label templates (DL, C5, C4, #10, 6×9,
9×12) added to the existing die-cut and plain-paper sheet templates. Each is a
1×1 grid where the page matches the envelope, with 5 mm edge margins. All
calibration, printer margin, and preview infrastructure works unchanged.

Mixed carrier/service batches: the xlsx batch template now includes a carrier
dropdown and a visible Service Reference sheet listing every service code per
carrier. Per-row carrier and service values are validated at import — carrier
without service (or vice versa) is flagged, and unknown codes are caught against
the live catalogue before a batch is created.

Version bumped to 1.7.0 across config.py, AppxManifest.xml, all download pages,
and release notes added.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The four new carrier/service validation error keys were added to en.json
but not propagated to the other 49 locale files, failing the i18n key
parity test in CI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The test seeds trackers with last_checked_at in September 2026 and the
problem window is 30 days. DashboardView.refresh() calls load_summary()
with now=datetime.now(), so after October 10 the seeded problem tracker
ages out and the assertion fails. Pin now=NOW (Sept 11, 2026) in the
view tests so they stay deterministic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PySide6/Qt writes cleanup messages to stderr at process exit (e.g.
"QObject: shared QObject was deleted directly"). PowerShell on
windows-latest converts native-command stderr into a non-zero exit,
causing the step to report failure despite 1199/1199 tests passing.
Using bash for the test step avoids this; the actual pytest exit code
is what matters.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PySide6/Qt can segfault during process-exit cleanup on macOS CI runners
after every test has passed, replacing pytest's exit 0 with exit 139.
The junitxml file is flushed before cleanup runs, so it captures the
real result. The step now runs pytest with || true and checks the XML
for actual failures — an incomplete XML (mid-run crash) fails the parse.

Also add test-results.xml to .gitignore.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@sgf36
sgf36 merged commit 4a40745 into main Oct 26, 2026
4 checks passed
@sgf36
sgf36 deleted the feat/envelope-templates-mixed-batches branch October 26, 2026 20:04
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