Skip to content

Commit 17cda07

Browse files
committed
Merge remote-tracking branch 'origin/main' into feat/phase-7c-api-auth
# Conflicts: # backend/tests/unit/api/test_templates_routes.py # docs/superpowers/specs/2026-05-17-phase-7c-api-auth-design.md
2 parents 3ff8524 + 0f84976 commit 17cda07

52 files changed

Lines changed: 2221 additions & 50 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
44

55
This project adheres to [Semantic Versioning](https://semver.org/) and uses [Conventional Commits](https://www.conventionalcommits.org/) via [semantic-release](https://github.com/semantic-release/semantic-release).
66

7+
## 0.6.0 (2026-05-18)
8+
9+
* docs(api): address PR #79 bot-review — privacy sanitise + protocol self + consistency fixes ([61602d0](https://github.com/strausmann/label-printer-hub/commit/61602d0)), closes [#79](https://github.com/strausmann/label-printer-hub/issues/79) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
10+
* docs(api): pure-vector SVG samples for all 12 seed templates (#83) ([a066dde](https://github.com/strausmann/label-printer-hub/commit/a066dde)), closes [#83](https://github.com/strausmann/label-printer-hub/issues/83) [#81](https://github.com/strausmann/label-printer-hub/issues/81) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
11+
* docs(phase-7b): foundation design spec — init-robustness + health-split + pangolin-bypass (#74) ([c5a7964](https://github.com/strausmann/label-printer-hub/commit/c5a7964)), closes [#74](https://github.com/strausmann/label-printer-hub/issues/74) [fosrl/pangolin#3099](https://github.com/fosrl/pangolin/issues/3099) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
12+
* docs(phase-7d): foundation design — print API + QR tab + hangar plugin (#79) ([cdaedeb](https://github.com/strausmann/label-printer-hub/commit/cdaedeb)), closes [#79](https://github.com/strausmann/label-printer-hub/issues/79) [strausmann/hangar#63](https://github.com/strausmann/hangar/issues/63) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
13+
* fix: 3 production bugs from local smoke-test + dev/ folder ([c0fc903](https://github.com/strausmann/label-printer-hub/commit/c0fc903)), closes [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67)
14+
* fix: Phase 6b code-cleanup — 6 audit findings + plugin pattern wired ([f77aa44](https://github.com/strausmann/label-printer-hub/commit/f77aa44)), closes [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67) [#67](https://github.com/strausmann/label-printer-hub/issues/67)
15+
* fix(api): Phase 7b.1 — upsert name-collision + /readiness proxy gap (#77) ([4e74a03](https://github.com/strausmann/label-printer-hub/commit/4e74a03)), closes [#77](https://github.com/strausmann/label-printer-hub/issues/77) [#76](https://github.com/strausmann/label-printer-hub/issues/76) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#76](https://github.com/strausmann/label-printer-hub/issues/76) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#77](https://github.com/strausmann/label-printer-hub/issues/77) [#1](https://github.com/strausmann/label-printer-hub/issues/1) [#76](https://github.com/strausmann/label-printer-hub/issues/76) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
16+
* fix(ui): printer detail metadata + template preview + paused-bool gap (#82) ([52bab83](https://github.com/strausmann/label-printer-hub/commit/52bab83)), closes [#82](https://github.com/strausmann/label-printer-hub/issues/82) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
17+
* feat(api): Phase 7b foundation — init, datetime-TZ, /readiness, status cache, proxy widening (#75) ([784decc](https://github.com/strausmann/label-printer-hub/commit/784decc)), closes [#75](https://github.com/strausmann/label-printer-hub/issues/75) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [HI#priority](https://github.com/HI/issues/priority) [#75](https://github.com/strausmann/label-printer-hub/issues/75) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
18+
* feat(ui): proxy legacy /print to backend (restores First-Print smoke curl) (#84) ([8ef36ed](https://github.com/strausmann/label-printer-hub/commit/8ef36ed)), closes [#84](https://github.com/strausmann/label-printer-hub/issues/84) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#84](https://github.com/strausmann/label-printer-hub/issues/84) [#22](https://github.com/strausmann/label-printer-hub/issues/22)
19+
720
## 0.5.0 (2026-05-17)
821

922
* feat(api): First-Print pipeline — POST /print to PT-P750W (E2E verified) (#59) ([d89d057](https://github.com/strausmann/label-printer-hub/commit/d89d057)), closes [#59](https://github.com/strausmann/label-printer-hub/issues/59) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#6](https://github.com/strausmann/label-printer-hub/issues/6) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#7](https://github.com/strausmann/label-printer-hub/issues/7) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#4](https://github.com/strausmann/label-printer-hub/issues/4) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#22](https://github.com/strausmann/label-printer-hub/issues/22) [#59](https://github.com/strausmann/label-printer-hub/issues/59) [#22](https://github.com/strausmann/label-printer-hub/issues/22)

Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.PHONY: docs-svg-samples
2+
3+
## docs-svg-samples — regenerate pure-vector SVG previews for all seed templates
4+
## Output: docs/site/operations/templates/svg-samples/{template-id}.svg
5+
docs-svg-samples:
6+
cd backend && uv run python scripts/generate_template_svgs.py

backend/app/api/routes/printers.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,41 @@ async def list_printers(session: SessionDep, _auth: ReadAuthDep) -> list[Printer
106106
return result
107107

108108

109+
# ---------------------------------------------------------------------------
110+
# GET /api/printers/{id}
111+
# ---------------------------------------------------------------------------
112+
113+
114+
@router.get(
115+
"/{printer_id}",
116+
response_model=PrinterRead,
117+
summary="Get printer detail",
118+
description=(
119+
"Returns full metadata for a single printer, including the ``paused`` "
120+
"flag joined from ``printer_state``. Returns 404 when the printer is "
121+
"not registered."
122+
),
123+
)
124+
async def get_printer(
125+
printer_id: UUID,
126+
session: SessionDep,
127+
) -> PrinterRead:
128+
"""Return full printer metadata for a single printer."""
129+
printer = await _get_printer_or_404(session, printer_id)
130+
state = await printer_state_repo.get(session, printer_id)
131+
return PrinterRead(
132+
id=printer.id,
133+
name=printer.name,
134+
model=printer.model,
135+
backend=printer.backend,
136+
connection=dict(printer.connection),
137+
enabled=printer.enabled,
138+
paused=state.paused if state is not None else False,
139+
created_at=printer.created_at,
140+
updated_at=printer.updated_at,
141+
)
142+
143+
109144
# ---------------------------------------------------------------------------
110145
# GET /api/printers/{id}/status
111146
# ---------------------------------------------------------------------------

0 commit comments

Comments
 (0)