# intake.md

**Project:** Blue Jays Necklace 3D Print
**ID:** bluejays-necklace-print-2026-05
**Kind:** personal-project
**Opened:** 2026-05-27
**Owner:** Sam (Same Solutions)
**Status:** ✅ **COMPLETED 2026-05-28** — printed successfully on Bambu A1 (no AMS) via manual-multicolor terraced-tier method. See `## Print success (2026-05-28) — validated parameters` near the bottom of this file for the canonical print data. Earlier sections (Mesh-editing optimization morning checkpoint, Mesh-editing session 2) are preserved as historical record; some of their figures (notably the paint_color mapping and Z-swap heights) were SUPERSEDED by the print's actuals — see the "Correction 2026-05-28" callouts in those sections.

## Status updates

**2026-05-27 (morning):** Project workdir created. Canonical source 3MF
(`torontobluejaysnecklace.3mf`, 1.1 MB, Salvadori3D / MakerWorld) copied
into workdir. Workflow: 4-color manual swap on Bambu A1 (no AMS), using
the v1.1 multicolor-without-ams reference guide
(`personal/multicolor-without-ams-reference-2026/print-guide.html`) as
the procedural reference.

## Origin

(Sam to fill: recipient, occasion, deadline)

## Hardware

- Bambu Lab A1 (single nozzle, no AMS)
- Manual multi-color via pause-and-swap workflow

## Source files

| File | Source | Status |
|---|---|---|
| `torontobluejaysnecklace.3mf` | Salvadori3D / MakerWorld | Canonical, unmodified (1.1 MB, 456 KB mesh) |

Alternate `Blue_Jays_.3mf` (10 MB, 71 MB ultra-high-res mesh) exists in
Sam's Downloads but was not chosen as canonical — its mesh is ~155×
denser than the standard MakerWorld scale and would slow slicing
substantially. Kept in Downloads as a remixed/upscaled variant in case
ultra-high-resolution detail is later wanted.

## Planned workflow

Per planning-chat session 2026-05-27 (PENDING VERIFICATION in Bambu
Studio when Sam opens the file):

- Z range: -7 mm to 7 mm (~14 mm total thickness)
- Phase 1 (Z = 0 to 2 mm): all white base, ~10 layers, no swaps
- Phase 2 (Z = 2 to 6 mm): 4 colors interleaved, ~20 layers, ~80
  toolchanges as-designed
- Phase 3 (Z = 6 to 7 mm): red only (maple leaf peak), ~5 layers, no
  swaps
- 4 filaments: White #FFFFFF, Red #FF0000, Klein Blue #004080, Blue
  #0065CA
- ~104 g PLA total, ~3 hr 11 min designed print time *with* AMS
- Without AMS: expect ~4-5 hr active print time once manual-swap
  reductions are applied in Phase 2

Strategy: white-shows-through optimization via Bambu Studio Color
Painter — recolor white regions in middle band (jay's eye, small white
features) to "default / no color" so the white base shows through.
Target toolchange count after optimization: under 25.

## Reference

- `personal/multicolor-without-ams-reference-2026/print-guide.html`
  v1.1 — manual-swap workflow, advanced techniques, Pirates worked
  example
- This project will produce a Blue Jays worked example to fold back
  into the reference guide once the print is complete (substrate
  two-layer architecture: personal-project learnings → reference guide
  updates).

## Open items

- (Sam to fill: gift recipient, occasion, deadline)
- Verify planning-chat mesh analysis against actual Bambu Studio
  inspection of the 3MF
- Color Painter eraser work on white regions in middle band (planned,
  not yet done)
- Slice and verify toolchange count under 25 (the target)
- Confirm 4-color filament availability against
  `personal/3d-printing/filament-inventory.md` (white on-hand;
  red/blue/Klein-blue need confirmation — Klein Blue #004080 likely
  needs a purchase if not already in inventory)

## Subsequent session continuation

If resumed:

1. Open `torontobluejaysnecklace.3mf` in Bambu Studio, confirm A1
   printer profile + 4 filament slots
2. Apply Color Painter eraser to white regions in middle band per
   reference guide
3. Enable manual filament change mode
4. Slice and verify toolchange count under 25
5. Print and execute swaps
6. After print complete: capture learnings, fold back into reference
   guide

## Mesh-editing optimization (2026-05-28) [CHECKPOINT - not final]

Discovery: .3mf files are ZIP+XML; planning-Claude can edit mesh
geometry and paint_color tags directly (trimesh 4.12.2, lxml, numpy
all available). Round-trip re-zip is lossless and Bambu-Studio-loadable.

Source file: `torontobluejaysnecklace.3mf` (Salvadori3D MakerWorld).
Object 10. 2567 verts, 5122 tris. 4 filaments: #FFFFFF white (default),
#FF0000 red, #004080 klein (dark blue), #0065CA (light blue).

paint_color tag → color mapping:

> **⚠️ Correction 2026-05-28 (validated by Blue Jays print success):**
> the earlier morning mapping below was WRONG on row `4`. Tag `4` is
> the **BAIL LOOP (white)**, not red. The red maple leaf is tag `8`
> only. A prior planning-chat attempt FAILED because it trusted the
> wrong inherited mapping. **Rule for future medallions: do NOT trust
> inherited paint_color notes. Verify per-file by rendering the mesh
> from each tag and comparing against the file's own baked-in
> `Metadata/top_1.png` (the designer's preview).** See guide v1.2.

| paint_color tag | Color (CORRECTED) |
|---|---|
| `8` | RED (maple leaf) |
| `4` | **WHITE — bail loop** (was wrongly recorded as RED in the morning checkpoint) |
| `0C` | DARK BLUE / Klein (jay body) |
| `1C` | LIGHT BLUE (accent) |
| (no tag) | WHITE (default filament) |

ORIGINAL mesh Z-structure: white base Z=−7..2, all colors interleaved
as extrusions Z=2..6, red maple-leaf peak Z=6..7. Designed for AMS
(~80 swaps).

GOAL: minimize manual filament swaps on A1-no-AMS. Sam's
"stacked / terraced" concept: each color gets its own Z-band so color
comes from swapping filament at Z heights (forward-only), NOT from
interleaved paint within layers.

TERRACED APPROACH (morning best, `bluejays_FINAL_v2.3mf` /
`bluejays_FINAL_print.3mf`):

- White base: Z = −7 to 4.0
- Light blue: Z = 4.0 to 5.0
- Red leaf:   Z = 5.0 to 6.0
- Dark blue:  Z = 6.0 to 7.0  (jay = TOP, in front of leaf)

→ 3 swaps: W → LB → RED → DB at Z = 4.0, 5.0, 6.0. Total pendant
thickness preserved at 14 mm. White base thicker (more rigid). Bail
loop geometry preserved untouched.

> **⚠️ Correction 2026-05-28:** these Z values were planning-chat
> mesh-coordinate guesses; the **actual print used different swap
> heights in plate-Z** (the only Z that matters at the printer):
> Layer 46 / 52 / 58 at plate-Z = 9.0 / 10.2 / 11.4 with 0.2 mm
> layer height and 1.2 mm (6-layer) tiers, finish Z = 13.0. See
> `## Print success` section near bottom for the canonical
> validated values.

KEY DESIGN INSIGHT: the Jays logo INTERLOCKS (weaves) — jay
head/beak crosses IN FRONT OF leaf (upper), leaf crosses in front of
jay tail (lower, ~1.7% of area). No single global swap-order is 100%
correct. Chose DARK-BLUE-ON-TOP ordering (jay in front everywhere) =
98.3% match to original top-down. Sam confirmed the small bottom
strip (leaf-over-tail) showing dark-blue instead of red is FINE
("those red layers don't need to be there").

VERIFICATION METHOD: planning-Claude renders top-down PNGs
(matplotlib painter's algorithm by maxZ) to compare against
original. `bluejays_FINAL_v2.3mf` render matches original logo
layout (jay in front, white eye in head, leaf behind).

WHITE "EYE" / SPOT NOTE: earlier confusion about white spots in the
maple leaf was an ARTIFACT of an intermediate (zbanded) build, not
the original. Original maple leaf is solid red. Resolved in
`bluejays_FINAL_v2.3mf`.

STILL NOT FINAL (Sam, 2026-05-28 12:30 PM): *"still not exactly
what i need but i need to come back to it later."* `FINAL_v2` and
`FINAL_print` are "far closer than before" but **not print-ready**.
DO NOT mark this project complete. Print NOT started. Resume point:
refine the terraced result further (exact refinement TBD — Sam to
specify on return).

> **✅ RESOLVED 2026-05-28 evening:** print COMPLETED successfully.
> See `## Print success (2026-05-28) — validated parameters` near
> the bottom for the actual swap schedule and validated method
> details.

Checkpoint files now in workdir:

| File | Purpose |
|---|---|
| `bluejays_FINAL_v2.3mf` | Terraced heights + TRUE paint colors; for VISUAL VERIFICATION in Bambu preview |
| `bluejays_FINAL_print.3mf` | Same geometry, NO paint colors; the file to actually PRINT via manual Z-height swaps |

Intermediate / superseded files (in planning-chat outputs, NOT
promoted to repo): `zbanded_2_3 / 3_4 / 2_4 / 4_5`, `thincap_*`,
`terraced_1mm / thick / painted`, `eyes_red / db / removed`,
`test_remove_*`. These were build iterations; `FINAL_v2` +
`FINAL_print` supersede them all.

OPEN REFINEMENT QUESTIONS for next session:

- Sam wants something still not captured; needs to articulate the
  remaining gap
- Possible: light-blue / red / dark-blue band thicknesses for
  opacity tuning
- Possible: the interlock handling at specific seams

## Mesh-editing session 2 (2026-05-28 afternoon) [HANDOFF TO FRESH PLANNING-CHAT]

Session 2 ran from late morning through ~5 PM and produced
`FINAL_v3` → `FINAL_v3_print` → `FINAL_v4` → `FINAL_v4_print` →
`NESTED_TIERS`. **None of these iteration files are promoted to
substrate.** They live in Sam's Downloads as planning-chat outputs.
The 2f0e6fc checkpoint files (`bluejays_FINAL_v2.3mf` /
`bluejays_FINAL_print.3mf`) remain the substrate canonical state.

PIVOT: from "terraced height-stack" to "nested-tier extrusions".

FINAL_v2 through FINAL_v4 all used the terraced height-stack
approach (white Z=-7..4, light blue 4..5, red 5..6, dark blue
6..7). v4 added hardcoded vertex-ID surgery to fix the bail loop
offset, but planning-chat found v4 still produced **mangled
geometry at interlocking color boundaries** — chunks and slants
where colors crossed, jay eye in the wrong position vs the
designer's reference, light blue extruding above its intended
layer, geometry above dark blue's intended top, and a top-down
view that did NOT match the designer's preview.

ROOT INSIGHT (session 2): the original logo INTERLOCKS — jay
beak crosses IN FRONT OF the maple leaf (upper), the leaf crosses
BEHIND the jay tail (lower). No single global height-stack
satisfies both crossings without per-region mesh surgery. The
NESTED_TIERS approach abandons height-stack equality and instead
treats each subsequent filament as an opaque overlayer on a
SMALLER XY footprint, with no per-region height conflict.

### Canonical print specification (Sam's articulation, carry-forward)

Each phase is one filament. Swaps are forward-only manual M600s
between phases. Total Z range = -7 mm to 7 mm (14 mm pendant).

| Phase | Filament | Z range | What prints in this filament |
|---|---|---|---|
| 1 | **WHITE** | Z = -7 to 2 | Base + outline + bail loop |
| 2 | **DARK BLUE** | Z = 2 to ~4 | DB region + LB region + RED region — all in DB, until DB is opaque |
| 3 | **LIGHT BLUE** | Z = 4 to ~5 | LB region + RED region — both in LB, until LB is opaque |
| 4 | **RED** | Z = 5 to ~7 | RED region only, until red is opaque |

Total: **3 manual M600 swaps** (W → DB → LB → RED at Z = 2, 4, 5).

### Files in Sam's Downloads from session 2 (DO NOT promote without Sam confirming final from fresh chat)

| File | Purpose |
|---|---|
| `bluejays_FINAL_v3.3mf` / `bluejays_FINAL_v3_print.3mf` | Iteration on the terraced approach (superseded by v4) |
| `bluejays_FINAL_v4.3mf` / `bluejays_FINAL_v4_print.3mf` | Terraced + hardcoded vertex-ID bail-loop fix. Mangled at interlock boundaries; abandoned. |
| `bluejays_NESTED_TIERS.3mf` | Latest iteration (nested-tier extrusions) — handed to the fresh chat as the starting point |
| `bluejays_designer_labeled.png` | Designer's `top_1.png` with planning-chat labels |
| `bluejays_nested_topdown.png` | Planning-chat matplotlib render — orientation mismatch with the designer's image, contributed to confusion |
| `bluejays_layers_reference.png` | Layer-by-layer top-down breakdown |
| `bluejays_labeled_topdown.png` | Earlier failed label attempt — ignore |
| `FRESH-CHAT-HANDOFF-PROMPT.md` | The prompt Sam pastes into the fresh planning-chat |

### Known issues with FINAL_v4 that pushed the pivot

- Bail loop offset (partially patched in v4 via hardcoded vertex IDs)
- Light blue extruding above its intended layer
- Geometry above dark blue's intended top boundary
- Angles + chunks taken out of pieces at interlocking color boundaries
- Top-down view did NOT match the designer's preview (orientation +
  layout drift)

### Tooling capability extended (session 2)

Planning-chat now also has **shapely 2.1.2** installed. Used
Polygon union / nesting plus custom extrusion mesh generation
from 2D polygons + Z bounds. Combined with `trimesh.section`
(Z-plane slicing) this enables clean nested-tier mesh builds
without per-region surgery. Added to the bambu-a1 dossier Tooling
section.

### Why fresh chat

Session 2 burned through its image-rendering budget (multiple
matplotlib top-down renders + designer-image overlays + label
iterations) before the nested-tier approach was fully validated.
Sam is handing `bluejays_NESTED_TIERS.3mf` + the print-sequence
specification + `FRESH-CHAT-HANDOFF-PROMPT.md` to a clean
planning-chat with full image budget to land the final.

### What returns to substrate from fresh chat

- The final `.3mf` (visual-verification + print-geometry pair, naming TBD)
- Confirmed swap Z heights (currently spec'd at 2.0 / 4.0 / 5.0 — may shift)
- Bambu Studio instructions (manual-filament-change configuration + per-swap pause Z heights)

Until then, **2f0e6fc remains the substrate canonical**; the
session-2 iterations are quarantined in Sam's Downloads as
planning-chat working files.

> **✅ RESOLVED 2026-05-28 evening:** print landed. The validated
> swap heights diverged from the morning/afternoon planning-chat
> guesses (which were mesh-coordinate values, not plate-Z). Actual
> swaps fired at L46 / L52 / L58 → plate-Z 9.0 / 10.2 / 11.4. See
> next section.

## Print success (2026-05-28) — validated parameters

✅ **Toronto Blue Jays medallion printed successfully on Bambu A1
(no AMS) using the manual-multicolor terraced-tier method.**

### Validated print parameters

| Parameter | Value |
|---|---|
| Layer height | **0.2 mm** |
| Base-on-plate Z | **0** (Bambu Studio default) |
| Tier thickness | **1.2 mm = 6 layers each** |
| Finish Z | **13.0 mm** |
| Swap count | **3 manual M600** |

### Swap schedule (canonical)

Pause fires on the **first** layer of the new color (the "+1"
off-by-one — same pattern as the Pirates z = 10.2 / 12.2 nudge).
Formula: pause layer = (boundary plate-Z / 0.2) + 1.

| Swap | Layer | Plate-Z | New color |
|---|---|---|---|
| 1 | **L46** | Z 9.0 | white → dark blue (klein) |
| 2 | **L52** | Z 10.2 | dark blue → light blue |
| 3 | **L58** | Z 11.4 | light blue → red |

### Filaments used (validated by Sam)

| Color | Hex | Brand / type |
|---|---|---|
| White | (default) | Sunlu PLA+ |
| Light blue | `#0065CA` | Sunlu PLA+ |
| Dark blue (Klein) | `#004080` | Sunlu PLA+ |
| Red | (Sunlu red) | Sunlu PLA+ |
| **Chain** | klein dark blue `#004080` | Sunlu PLA+ |

### Method classification

- **Name:** manual-multicolor terraced-tier method (a.k.a.
  "terraced nested tiers" in some planning-chat notes)
- **Why it worked on this design:** Blue Jays logo regions nest
  (DB ⊃ LB ⊃ Red). Each subsequent filament covers a smaller XY
  footprint as an opaque overlayer; no per-region height conflict.
- **Folded into:** `personal/multicolor-without-ams-reference-2026/print-guide.html` v1.2 as the canonical pause-rule + worked example.

### What this validated retroactively

- The morning checkpoint Z values (4.0 / 5.0 / 6.0) were
  planning-chat **mesh-coordinate** guesses, not plate-Z. The real
  printer doesn't care about mesh-coordinate Z; it cares about
  plate-Z (Z = 0 at the build plate, growing upward). Print-chat's
  L46 / L52 / L58 → 9.0 / 10.2 / 11.4 are plate-Z values.
- The morning paint_color mapping was wrong on tag `4` (was
  recorded as RED, actually WHITE BAIL LOOP). Corrected above.

## Print chat handoff (2026-05-28 evening, structured equivalent)

> **Note on this section:** the resume prompt (Sam, 2026-05-29)
> directed me to "pull the verbatim content from the planning-chat
> prompt body — the '=== WHAT WORKED' through '=== TIER-ORDER
> LESSON' sections." Those literal sections were **not present in
> the resume prompt body** that I received — the resume superseded
> the earlier stale prompt and folded the same information into
> structured Task 1A-E + 2A-F. What follows is the **structured
> equivalent** of the print-chat handoff packet, assembled from
> those task specifications. If Sam later has the literal verbatim
> packet text, paste it in here to replace this section.

### WHAT WORKED (structured)

- Manual-multicolor terraced-tier method on Bambu A1 (no AMS),
  forward-only filament swaps, 3 manual M600 pauses.
- Pause-rule formula: pause on FIRST layer of new color =
  `(boundary plate-Z / 0.2) + 1`. Validated at L46 / L52 / L58
  (Z 9.0 / 10.2 / 11.4) with 0.2 mm layers, 1.2 mm (6-layer) tiers,
  finish Z 13.0.
- Print sequence by phase:

  | Phase | Filament | Layers | What this filament covers |
  |---|---|---|---|
  | 1 | White | 0 → 45 | base + outline + bail loop |
  | 2 | Dark blue (klein) | 46 → 51 | DB region + LB region + RED region (all in DB until opaque) |
  | 3 | Light blue | 52 → 57 | LB region + RED region (both in LB until opaque) |
  | 4 | Red | 58 → 65 | RED region only |

- The design **nests** (DB ⊃ LB ⊃ Red), which is why this works
  here. See guide v1.2 §D for when the method breaks down.

### PAINT_COLOR VERIFICATION (lesson)

- Do NOT trust inherited paint_color notes between chats / projects /
  files.
- Verify per-file: render the mesh from each tag, compare against
  the file's own baked-in `Metadata/top_1.png`.
- Concrete Blue Jays evidence: morning checkpoint recorded tag `4`
  as RED; actual was WHITE bail loop. The first print attempt that
  trusted the inherited mapping FAILED before it became apparent.

### TIER-ORDER LESSON

- Stacking a vivid color **on top of** darker ones (red over blue)
  can look muddy in practice, and the terrace side-walls show a
  visible striped edge.
- Cleaner alternative: place the most vivid / lightest color as
  the LOWEST color tier (directly on white), and hide its residual
  understack beneath an opaque darker top region.
- Tradeoff: the vivid color then sits slightly recessed in the
  final piece (you see it through a "window" rather than as the
  top surface).
- It's a designer's choice per medallion — which look matters more
  for this specific design.

### METHOD SCOPE (when it works / breaks down)

- **Works** when color regions NEST (each upper color sits inside
  the previous one) — Blue Jays bird is the canonical example.
- **Breaks down** when regions sit SIDE BY SIDE rather than
  nesting (e.g. a leprechaun with green hat / flesh face / white
  beard / brown pipe adjacent at the same height). Adjacent
  non-nested regions can't both be pure colors at the same Z layer.
- **Alternatives for non-nesting designs:** hue-grouped terracing
  (accept some understack on adjacents), inlay / pocket method
  (recessed pockets + drop-in pieces), or design simplification.

### METHOD CHAIN-OF-CUSTODY

- Original `.3mf` files (typically from MakerWorld / Printables)
  are usually AMS-designed and require mesh editing for an
  A1-no-AMS workflow.
- Per-region terraced height-stacks **fail on interlocking
  designs** (Blue Jays session 1 evidence: chunks, slants, eye
  in wrong position).
- Nested-tier extrusions on top of a preserved white base + bail
  loop **works** (Blue Jays session 2 + print-execution success).
- Tooling stack proven on this print: shapely 2.1.2 (Polygon
  union / nesting), `trimesh.section` (Z-plane slicing), custom
  extrusion mesh generation from 2D polygons + Z bounds, raw 3MF
  XML manipulation, trimesh 4.12.2, lxml, numpy.
