Decompose: Add Brother Entrepreneur PR-10 (10-needle) machine profile #36

Closed
opened 2026-06-22 16:23:19 +00:00 by Mark · 1 comment
Owner

Add Brother Entrepreneur PR-10 (10-needle) machine profile

Context

src/machine/machine_library.py has profiles for SE600, PE535, QS-1000,
and a generic, but no PR-10 — the target machine for ThreadCraft.
Without the profile, the digitize service will use generic_diy
constraints, which means designs may not fit the actual PR-10 hoop, or
the service may recommend color counts above 10.

Goal

Add a complete, accurate MachineProfile for the Brother Entrepreneur
PR-10, with researched hoop sizes, max thread count, format support,
and PES version constraints.

Decomposition

The work has three distinct phases: research, implementation, and test.
Research must be done first because the implementation values depend on
verified sources, not guesses.

P1: Research PR-10 spec

Goal: Lock the actual PR-10 specs from authoritative sources (Brother
official manual, verified third-party references like embroidery
format community docs).

Specifically need:

Field What to confirm
Brand Brother (confirmed)
Model "Entrepreneur PR-10" vs "PR-10" vs other variants
Hoop sizes exact mm dimensions for the standard + optional hoops
Max speed stitches/min or mm/s
Max thread count 10 (10-needle) — but is it concurrent or with manual rethread?
Default format PES native — which PES version?
Color support how many simultaneous? 10?
Max stitch density mm pitch
Any PES-specific version constraints (PES0001 vs PES0006 etc.)
Jump stitch / trim behavior any automatic?
Underlay behavior automatic or manual?

Files:

  • New: docs/machines/brother_pr10_research.md with each field, the
    source, and a confidence rating (high/medium/low).

Acceptance:

  • Every field has at least one cited source.
  • Conflicting sources are noted, with a chosen value and rationale.
  • Low-confidence fields are flagged for follow-up (separate ticket).
  • The ThreadCraft team signs off on the values.

Why first: without verified values, the implementation in P2 is
speculation. Embroidery machine specs vary by region, model year, and
firmware version — getting this wrong produces designs the machine
will reject or sew incorrectly.


P2: Implement the profile

Add self.machines["brother_pr10"] = MachineProfile(...) with the
verified values from P1. Also add the public get() and list_names()
methods from issue #45 (these are bundled here so the PR-10 work ships
with a usable lookup API).

Files:

  • Modify: src/machine/machine_library.py (add the profile + the
    public methods)
  • New: tests/test_machine_library.py (asserts the profile loads and
    has the expected fields)

Acceptance:

  • MachineLibrary().get("brother_pr10") returns the profile.
  • MachineLibrary().list_names() includes "brother_pr10".
  • The profile's default_format == "pes" and format_support reflects
    PES as native.
  • Hoop sizes match the P1 research.

Depends on: P1 (research).


P3: Round-trip integration test

End-to-end test that the PR-10 profile actually constrains the
pipeline correctly. A design that exceeds the hoop should be flagged
or scaled, not silently produced.

Files:

  • New: tests/test_pr10_constraints.py
  • New: data/test_fixtures/oversized.svg (a design larger than the
    PR-10 hoop)

Acceptance:

  • A 250×250 mm input with the PR-10 profile (100×100 mm hoop default)
    produces a result that fits within the hoop (scaled or rejected
    with a clear error).
  • A 50×50 mm input produces a result that respects the max thread
    count of 10 (no more than 10 distinct colors in the output, even if
    the input has 50).
  • A 50×50 mm input with 5 colors produces a result that emits a
    valid PES file for the PR-10 (correct PES version magic bytes).

Depends on: P1, P2.

Out of scope

  • Other Brother models (SE600, PE535, QS-1000 already exist).
  • Adding PR-10 variants (e.g. PR-10e, PR-10 Limited Edition). If real,
    separate tickets.
  • Changes to the pipeline's actual constraint enforcement logic — this
    ticket is about adding the profile, not about making the pipeline
    respect constraints it currently ignores.
# Add Brother Entrepreneur PR-10 (10-needle) machine profile ## Context `src/machine/machine_library.py` has profiles for SE600, PE535, QS-1000, and a generic, but no PR-10 — the target machine for ThreadCraft. Without the profile, the digitize service will use `generic_diy` constraints, which means designs may not fit the actual PR-10 hoop, or the service may recommend color counts above 10. ## Goal Add a complete, accurate `MachineProfile` for the Brother Entrepreneur PR-10, with researched hoop sizes, max thread count, format support, and PES version constraints. ## Decomposition The work has three distinct phases: research, implementation, and test. Research must be done first because the implementation values depend on verified sources, not guesses. ### P1: Research PR-10 spec **Goal:** Lock the actual PR-10 specs from authoritative sources (Brother official manual, verified third-party references like embroidery format community docs). **Specifically need:** | Field | What to confirm | |---|---| | Brand | Brother (confirmed) | | Model | "Entrepreneur PR-10" vs "PR-10" vs other variants | | Hoop sizes | exact mm dimensions for the standard + optional hoops | | Max speed | stitches/min or mm/s | | Max thread count | 10 (10-needle) — but is it concurrent or with manual rethread? | | Default format | PES native — which PES version? | | Color support | how many simultaneous? 10? | | Max stitch density | mm pitch | | Any PES-specific version constraints (PES0001 vs PES0006 etc.) | | Jump stitch / trim behavior | any automatic? | | Underlay behavior | automatic or manual? | **Files:** - New: `docs/machines/brother_pr10_research.md` with each field, the source, and a confidence rating (high/medium/low). **Acceptance:** - Every field has at least one cited source. - Conflicting sources are noted, with a chosen value and rationale. - Low-confidence fields are flagged for follow-up (separate ticket). - The ThreadCraft team signs off on the values. **Why first:** without verified values, the implementation in P2 is speculation. Embroidery machine specs vary by region, model year, and firmware version — getting this wrong produces designs the machine will reject or sew incorrectly. --- ### P2: Implement the profile Add `self.machines["brother_pr10"] = MachineProfile(...)` with the verified values from P1. Also add the public `get()` and `list_names()` methods from issue #45 (these are bundled here so the PR-10 work ships with a usable lookup API). **Files:** - Modify: `src/machine/machine_library.py` (add the profile + the public methods) - New: `tests/test_machine_library.py` (asserts the profile loads and has the expected fields) **Acceptance:** - `MachineLibrary().get("brother_pr10")` returns the profile. - `MachineLibrary().list_names()` includes `"brother_pr10"`. - The profile's `default_format == "pes"` and `format_support` reflects PES as native. - Hoop sizes match the P1 research. **Depends on:** P1 (research). --- ### P3: Round-trip integration test End-to-end test that the PR-10 profile actually constrains the pipeline correctly. A design that exceeds the hoop should be flagged or scaled, not silently produced. **Files:** - New: `tests/test_pr10_constraints.py` - New: `data/test_fixtures/oversized.svg` (a design larger than the PR-10 hoop) **Acceptance:** - A 250×250 mm input with the PR-10 profile (100×100 mm hoop default) produces a result that fits within the hoop (scaled or rejected with a clear error). - A 50×50 mm input produces a result that respects the max thread count of 10 (no more than 10 distinct colors in the output, even if the input has 50). - A 50×50 mm input with 5 colors produces a result that emits a valid PES file for the PR-10 (correct PES version magic bytes). **Depends on:** P1, P2. ## Out of scope - Other Brother models (SE600, PE535, QS-1000 already exist). - Adding PR-10 variants (e.g. PR-10e, PR-10 Limited Edition). If real, separate tickets. - Changes to the pipeline's actual constraint enforcement logic — this ticket is about adding the profile, not about making the pipeline respect constraints it currently ignores.
Mark changed title from Add Brother Entrepreneur PR-10 (10-needle) machine profile to Decompose: Add Brother Entrepreneur PR-10 (10-needle) machine profile 2026-06-22 16:30:52 +00:00
Author
Owner

This issue has been decomposed into the following sub-issues:

# Title Phase Scope
#54 Decompose: Add Brother Entrepreneur PR-10 (10-needle) machin Goal: Lock the actual PR-10 specs from authoritative sources (Brother offici
#55 Decompose: Add Brother Entrepreneur PR-10 (10-needle) machin Add self.machines["brother_pr10"] = MachineProfile(...) with the verified valu
#56 Decompose: Add Brother Entrepreneur PR-10 (10-needle) machin End-to-end test that the PR-10 profile actually constrains the pipeline correctl

Each sub-issue has been labeled with triage-approved and is ready for queue routing.

This issue has been decomposed into the following sub-issues: | # | Title | Phase Scope | |---|-------|-------------| | #54 | Decompose: Add Brother Entrepreneur PR-10 (10-needle) machin | **Goal:** Lock the actual PR-10 specs from authoritative sources (Brother offici | | #55 | Decompose: Add Brother Entrepreneur PR-10 (10-needle) machin | Add `self.machines["brother_pr10"] = MachineProfile(...)` with the verified valu | | #56 | Decompose: Add Brother Entrepreneur PR-10 (10-needle) machin | End-to-end test that the PR-10 profile actually constrains the pipeline correctl | Each sub-issue has been labeled with `triage-approved` and is ready for queue routing.
Mark closed this issue 2026-06-22 16:31:25 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Mark/easystitch#36
No description provided.