Candy of Boyer Knot · Japanese Spitz pedigree database · cycle investigation · June 2026

After merging every Japanese Spitz studbook I have into one database — 37,000+ records — the interface looked fine until I ran my linebreeding report. The real problem turned out to be structural. This database uses a dog’s name as its identity, so when two different dogs happen to share a name, an automatic merge silently fuses them into a single record. These collisions are nearly invisible in the interface, but they tie the pedigree into knots — and the only reliable way to find them is to hunt down every cycle. This is the story of the first knot: a descendant export that looked wrong, a 92-dog tangle behind it, and a tidy proof that just two name collisions caused all of it..

It started with a small contradiction. A routine cycle check on the pedigree database flagged fifteen dogs that appear in their own ancestry — a genealogical impossibility, and a sure sign of a data error. Top of the list was FUJIMILAND BABY RAMALE, whose sire was reported as BABY MOMBRAN OF FUJIMILAND. But when we exported FUJIMILAND BABY RAMALE‘s descendants to confirm the loop, BABY MOMBRAN OF FUJIMILAND was nowhere in the list.

So which was right — the cycle detector or the descendant export? Both, as it turns out. Untangling that apparent conflict led straight into the heart of the problem.

What a cycle in a pedigree actually means

A pedigree is a directed graph: an edge runs from parent to child. In a healthy database that graph is acyclic — follow “parent of” links upward and you only ever move back in time toward foundation dogs. A cycle means you can start at a dog, walk up through its ancestors, and arrive back where you started. The dog is its own great-great-grandparent. Impossible in biology; common in hand-entered data.

For FUJIMILAND BABY RAMALE to sit in its own ancestry, one of its ancestors has to also be one of its descendants. Tracing the loops upward, every one of them returned to FUJIMILAND BABY RAMALE through its dam, not its sire:

FUJIMILAND BABY RAMALE → ANN CATLAIR OF FUJIMILAND → CANDY OF BOYER → …
→ EDWARD BOYER OF GOLDEN STAR → JULIAN OF JAPAN KENNEL → FLORA → …
→ BOI-YUME → FUJIMILAND BABY RAMALE

The sire edge to BABY MOMBRAN OF FUJIMILAND wasn’t part of the loop at all. The cycle report had simply named the wrong edge. And the descendant export was correct: BABY MOMBRAN OF FUJIMILAND isn’t a genuine descendant of FUJIMILAND BABY RAMALE. It only becomes “reachable” if you let traversal ride the broken loop at which point roughly 23,000 dogs, essentially the entire connected database, count as FUJIMILAND BABY RAMALE‘s descendants. That runaway number is the smell of a cycle.

One dog kept showing up: CANDY OF BOYER

Every one of the flagged dogs shared a common ancestor: CANDY OF BOYER. Its own record looked perfectly clean — sensible parents, three recorded offspring. Yet all three of those offspring (ANN CATLAIR, BABY MOMBRAN, TEXAS WAGONS DEAN LADY) were themselves on the cycle list, and CANDY OF BOYER appeared in its own ancestry too.

CANDY OF BOYER wasn’t the culprit. It was the hub of something larger. When we computed the strongly-connected component — the maximal set of dogs that can all reach one another through parent links — CANDY OF BOYER sat inside a single knot of 92 animals, wired together by 132 parent links, where ancestors and descendants had become the same individuals.

92

dogs in the knot

132

tangled parent links

~23k

false “descendants”

2

records actually wrong

The CANDY OF BOYER knot
The knot as a single connected mass — no tree structure left. Amber is CANDY OF BOYER, red nodes are the flagged cycle dogs, teal are the other entangled dogs. The two thick red edges are the only two wrong records: NANA→HAPPO KIMURA and MAX→SHIROFUJI.

Finding the smallest possible fix

132 entangled links sounds like a daunting cleanup. But most of those links are perfectly correct — they only look guilty because they sit downstream of a couple of bad ones. The right question is the minimum feedback arc set: the fewest edges you can delete to make the whole graph acyclic again.

A branch-and-bound search over the component returned a startling answer: two. The knot is really two independent loops, and you need exactly one cut in each. The algorithm narrows each error down to a tiny candidate set — but it has no sense of time, so it can’t say which edge in a loop is the real mistake. For that you need the dates. And the dates told a sharper story than “a typo”: each loop was caused by a name collision.

The real culprit: two dogs sharing one name

This database uses a dog’s name as its identity — there is no separate ID. So when an old foundation dog and a modern dog happen to share a name, they collapse into one record, and a present-day animal can suddenly show up as the ancestor of a dog born decades before it. Both loops were exactly this.

Loop 1 · Happo Kimura’s dam was the wrong “Nana”

HAPPO KIMURA is a 1940s foundation sire — his pups Fuji, Hakuo and White King were born 1950–51. His dam field read NANA, but the only NANA in the database is a bitch born 1985 in Sweden. Two different NANAs, ~35 years apart, fused into one record.

Fix applied: repoint HAPPO KIMURA.Dam from NANA (1985, SE) → NANA (HAKUO) — the foundation dam (sire Fuji, dam Yuri) that already existed in the database.

Loop 2 · Shirofuji’s sire was the wrong “Max”

SHIROFUJI is a foundation dog in JULIAN OF JAPAN KENNEL‘s 1950s line — its dam is the already-disambiguated SHIRO (JULIAN OF JAPAN KENNEL). But its sire field pointed at MAX, a dog born 1988 in Sweden. A 1950s dog cannot have a 1988 sire.

Fix applied: repoint SHIROFUJI.Sire from MAX (1988, SE) → a new foundation record, MAX (JULIAN OF JAPAN KENNEL).

Both repairs follow a convention the database already uses: a parenthetical suffix — (HAKUO), (JULIAN OF JAPAN KENNEL) — that gives each foundation namesake its own identity instead of letting it merge with a modern dog. The cycles weren’t really fifteen separate typos; they were a handful of reused foundation names (Nana, Max, and likely others) colliding under a name-as-identity schema.

Result

With both records corrected, the 92-dog knot is gone. All thirteen flagged dogs in the cluster are acyclic, and the database now holds few more cycles like this, just smaller. Each remaining cycle is almost certainly another reused name. Clearing them one knot at a time is how the merged studbook gets trustworthy.

Explore the knot yourself

Below is the knot as it was before the fixes. Hover any dog to spotlight just its links and read its parent/child counts inside the knot; drag a node to pull a strand loose; scroll to zoom. The two red edges are the genuinely-wrong links — the name collisions. Notice how everything is one connected mass, and how CANDY OF BOYER‘s three amber edges feed straight into the tangle.


Method: parent links were read directly from the Pedigree table (identity keyed on the dog’s name). The knot is the largest strongly-connected component (Tarjan’s algorithm); the candidate fixes are an exact minimum feedback arc set found by branch-and-bound, with date-of-birth ordering used to pick the genuinely-wrong edge in each loop. Both corrections were applied to the live database and the whole 92-dog component verified acyclic. Each remaining cycle is almost certainly another reused name. Clearing them one knot at a time is how the merged studbook gets trustworthy.

Trending