Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
9b8b7e0
Fix CI step gating and group Dependabot action updates
crzykidd May 20, 2026
b479d3e
Add slice 1 backend skeleton with quick-print path
crzykidd May 20, 2026
4027235
Document printer setup and slice 1 decisions
crzykidd May 20, 2026
5da9aba
updates
crzykidd May 20, 2026
28a277c
update
crzykidd May 20, 2026
81443d1
Add quick-print frontend scaffold (Vite + vanilla TS)
crzykidd May 20, 2026
889c712
Add quick-print preview endpoint
crzykidd May 20, 2026
12737ef
Add settings store and GET/PUT settings endpoints
crzykidd May 20, 2026
51a6b08
Wire quick-print frontend to preview and settings endpoints
crzykidd May 20, 2026
57d936f
Add templates table, models, and store
crzykidd May 20, 2026
9d3b2ce
Add template field detection and schema merge
crzykidd May 20, 2026
14d2f1f
Add server-side template renderer
crzykidd May 21, 2026
ea30f0b
Add template CRUD endpoints
crzykidd May 21, 2026
75e6806
Add template print, preview, and batch endpoints
crzykidd May 21, 2026
cd1f523
Record printer-status and settings ADRs; update changelog status
crzykidd May 21, 2026
3ef2813
Default DATA_DIR to /data and make compose deployment-generic
crzykidd May 21, 2026
8e4501a
Remove homelab specifics from docs; correct branch model
crzykidd May 21, 2026
bac4ad7
Record deployment-generic and branch-model ADR
crzykidd May 21, 2026
5d1ba22
Render QR and barcode crisp for 1-bit print; make preview match print…
crzykidd May 21, 2026
91e3aeb
Record preview-matches-print threshold ADR
crzykidd May 21, 2026
60d20ec
Gate QR and barcode elements until print bug is fixed
crzykidd May 21, 2026
303bfdb
Add multi-stage frontend build to Dockerfile
crzykidd May 21, 2026
c3e6919
Serve built frontend SPA from FastAPI
crzykidd May 21, 2026
627a4fd
Add client-side routing and nav to the SPA
crzykidd May 21, 2026
eb451f3
Add Fabric.js dependency and template API client
crzykidd May 21, 2026
a2c5d96
Add templates list page
crzykidd May 21, 2026
40213fd
Add template editor with text elements and save/load
crzykidd May 21, 2026
0a0a2f4
Add template preview button to editor
crzykidd May 21, 2026
b528b80
Fix Fabric 6 TypeScript types in editor
crzykidd May 21, 2026
912016b
Update changelog for templates editor foundation slice
crzykidd May 21, 2026
baf0092
updates
crzykidd May 21, 2026
6f7afe8
update
crzykidd May 24, 2026
d67bc61
Untrack vexp runtime files and ignore vexp.toml
crzykidd May 24, 2026
7595587
Add session workflow and handoff prompt process to CLAUDE.md
crzykidd May 26, 2026
90e4023
Add template recall UI handoff prompt and fix prompt-file docs
crzykidd May 26, 2026
ca58bfd
Fix handoff prompt run command to escape frontmatter dashes
crzykidd May 26, 2026
54d57fc
Require ADR entry when session makes non-obvious decisions
crzykidd May 26, 2026
e5b4423
Stop tracking compiled JS emitted next to TS source
crzykidd May 26, 2026
23aca4c
Add template recall UI for filling fields, previewing, and printing
crzykidd May 26, 2026
6dfa805
Track .claude/settings.json and CLAUDE.md; add dev tool auto-approve …
crzykidd May 26, 2026
9b5da13
Show Brother DK part numbers in label selectors
crzykidd May 27, 2026
6034be4
Make label catalog printer-aware; disable incompatible media
crzykidd May 27, 2026
6023d2d
Use Brother 4-digit US SKU format; name 62x29 as Small Address
crzykidd May 27, 2026
3fc6683
chore: adopt code-checkin-and-pr, repo-sandbox, vexp standards; upgra…
crzykidd May 31, 2026
d5fc08f
feat: add print history API — preview on every print, reprint, pin, r…
crzykidd May 31, 2026
bb2f2a8
feat: add print history page and retention settings UI
crzykidd May 31, 2026
270b475
update docker compose name
crzykidd May 31, 2026
356e54b
feat: add printer status endpoint, pre-print media check, and Test Pr…
crzykidd May 31, 2026
6efb5b4
update
crzykidd May 31, 2026
e009f6d
feat: add "Loaded in printer" filter to label-media selectors
crzykidd May 31, 2026
45c4fb4
fix: print two-color rolls (62red) and stop false media-mismatch blocks
crzykidd Jun 1, 2026
c7b1664
feat: add printer status-check toggle and timeout to Settings
crzykidd Jun 2, 2026
65dd292
feat: note color-detection limit on the loaded-media picker
crzykidd Jun 2, 2026
0feaf48
docs: note Brother P-touch Editor also requires manual DK color selec…
crzykidd Jun 2, 2026
a8fa2a9
fix: render Fabric v6 template elements (PascalCase type names)
crzykidd Jun 2, 2026
65a74b2
fix: give continuous-media templates a non-zero editor canvas
crzykidd Jun 2, 2026
a91f4ce
feat: make app-level auth optional via DISABLE_AUTH
crzykidd Jun 3, 2026
8beb27b
chore: de-adopt vexp-context-engine (sunset v3.0.0)
crzykidd Jun 3, 2026
b3b29d6
fix: correct initial canvas aspect for continuous-roll templates
crzykidd Jun 4, 2026
c960e92
feat: add Save As and two-color text to template editor
crzykidd Jun 4, 2026
8c9c944
New Prompt
crzykidd Jun 4, 2026
0aa54aa
fix: preview fills missing variable fields with sample values
crzykidd Jun 4, 2026
9f32a63
feat: text-color control always visible; Red disabled on mono media
crzykidd Jun 4, 2026
d45638b
feat: load previous values on template recall; retention keeps latest…
crzykidd Jun 5, 2026
7e3eace
fix: measure PIL text extents for continuous canvas height and sub-im…
crzykidd Jun 5, 2026
3f2a5cb
chore: fix CI compose + ruff lint for release
crzykidd Jun 6, 2026
3785b68
new prompt
crzykidd Jun 6, 2026
ab56cd6
fix: reconcile default labels.yml into operator copy on upgrade (#16)
crzykidd Jun 6, 2026
61c62f2
chore: target Dependabot at dev and relax cadence to monthly
crzykidd Jun 6, 2026
1a6e673
chore: enable mypy in CI and fix backend type errors
crzykidd Jun 6, 2026
215d57f
env fixe
crzykidd Jun 6, 2026
44109f4
chore: adopt release-prep-and-cut standard (v1.0.0)
crzykidd Jun 6, 2026
ac5359d
fix: set response_model=None on printer status route; add app-startup…
crzykidd Jun 6, 2026
6e9ea82
feat: print a template on a different label media at print time
crzykidd Jun 6, 2026
ccc8e77
fix: default recall media to the template's own media; offer override…
crzykidd Jun 6, 2026
4ac89f0
feat: friendly template names and DK-part label in the template list
crzykidd Jun 6, 2026
729ccc4
fix: compact icon buttons for template list actions to stop card over…
crzykidd Jun 6, 2026
7e5bb8e
fix: add prune-history admin route so "Run cleanup now" works (was 405)
crzykidd Jun 6, 2026
f10e796
docs: reconcile README, PRD, and architecture with shipped features
crzykidd Jun 6, 2026
fc8e5c9
chore(release): prepare v0.1.0
crzykidd Jun 6, 2026
ce4e6f9
fix: scrub CR/LF from user values in log lines (CWE-117 log injection)
crzykidd Jun 6, 2026
102c2c3
fix: document intentionally-empty except handlers (CodeQL py/empty-ex…
crzykidd Jun 6, 2026
b82da26
fix: don't expose exception detail in printer-status 503 (CodeQL py/s…
crzykidd Jun 6, 2026
9c7bd95
Bump: Bump fabric from 6.6.1 to 7.4.0 in /frontend
dependabot[bot] Jun 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 0 additions & 60 deletions .claude/CLAUDE.md

This file was deleted.

105 changes: 105 additions & 0 deletions .claude/commands/release-cut.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
---
description: Cut a GitHub release after the dev→main PR has merged and main CI is green
argument-hint: <version> (e.g. 0.3.6 — must match what /release-prep prepared)
---

<!--
Template from standards/release-prep-and-cut @ v1.0.0
(crzynet/homelab-configs/standards/release-prep-and-cut/README.md).
labelforge values: VERSION_FILE=pyproject.toml, MAIN_CI_WORKFLOW=CI, PUBLISH_WORKFLOW=Build and Push
-->

# Release Cut

You are publishing the GitHub release for **v$ARGUMENTS**. Run this ONLY
after:

- `/release-prep $ARGUMENTS` has merged into `main`, and
- the push-to-`main` CI + image-publish workflows are green and `:latest`
images are in the registry.

Publishing the release triggers the `release: published` workflow, which
builds and pushes the production `:latest`, `:v$ARGUMENTS`, and `:v<major>`
images. So this step is the point of no return for production images —
verify before tagging.

## Execution rules

- `$ARGUMENTS` SHOULD be bare semver (no `v` prefix). If a leading `v` was
typed (`v0.3.6`), strip it silently. After stripping, if the value does
not match `MAJOR.MINOR.PATCH` exactly, STOP and ask for a valid version.
- The bare value MUST equal the current version in `pyproject.toml` on
`main`. If it does not, STOP.
- The release tag is `v$ARGUMENTS` (with the `v` prefix — matches the
existing tag convention and the Docker `type=semver` extraction). Before
calling `gh`, assert the tag string matches `^v[0-9]+\.[0-9]+\.[0-9]+$`
exactly. If it does not, STOP — never create a malformed tag.
- Do NOT add `Co-authored-by` lines anywhere.
- If any verification step fails, STOP and report. Do not create the tag.

## Step 1 — Verify we are releasing the right commit

1. `git fetch origin` and check out `main`: `git checkout main && git pull`.
2. Confirm the version in `pyproject.toml` equals `$ARGUMENTS`. If not, the
prep PR is not merged (or the wrong version was passed) — STOP.
3. Confirm the working tree is clean.
4. Confirm `git log` shows the `chore(release): prepare v$ARGUMENTS` commit on
`main`. If absent, STOP — the PR has not been merged.

## Step 2 — Verify CI is green on main

Use `gh` to confirm the latest runs on `main` for this commit succeeded:

1. `gh run list --branch main --limit 10` and confirm the most recent runs
for the release commit concluded `success` for BOTH `CI`
and `Build and Push`.
2. If a run is still in progress, tell the user to wait and STOP — do not tag
a commit whose images may not exist yet.
3. If a run failed, STOP and report which job failed.

## Step 3 — Confirm the version tag does not already exist

`git tag -l "v$ARGUMENTS"` and `gh release view v$ARGUMENTS` — if either
exists, STOP and report. Never overwrite an existing release/tag.

## Step 4 — Assemble the release notes

Extract the `## [$ARGUMENTS] — <date>` section from `CHANGELOG.md` (everything
from that header up to, but not including, the next `## [` header). This is
the release body — the changelog is the single source of truth, matching the
PR description `/release-prep` created.

## Step 5 — Create the release

Write the extracted section to a temp file and pass it via `--notes-file`.
Create an annotated tag on the current `main` HEAD and publish the release in
one step with `gh`:

```
gh release create v$ARGUMENTS \
--target main \
--title "v$ARGUMENTS" \
--notes-file <tmp>
```

Do not try to inline multi-line release notes.

## Step 6 — Verify the production build fired

1. `gh run list --workflow "Build and Push" --limit 3` and confirm a run
triggered by the `release` event for `v$ARGUMENTS` has started or
succeeded.
2. Report its status.

## Step 7 — Report

Print:

- The release URL.
- The tag created (`v$ARGUMENTS`).
- The status of the production image build.
- A reminder of the expected image tags once the build finishes: `:latest`,
`:v$ARGUMENTS`, `:v<major>.<minor>`, `:v<major>` — the `v` prefix is added
by the `prefix=v` rule in `build-and-push.yml`'s `metadata-action`.

Done — the release is live.
Loading
Loading