News:

SMF - Just Installed!

Main Menu

1.1.36

Started by hitsumo, Sep 15, 2026, 04:41 PM

Previous topic - Next topic

hitsumo

# Anime Tracker 1.1.36

**Release date:** 2026-09-02

This release gives a chain a **name** — and with it, the ability to say "these
two entries are separate tellings of the same story".

## The problem

Since 1.1.25 one series name could hold several chains, but a chain itself was
not a thing: it was only the set that fell out of walking the "next in series"
links. That had three consequences.

**A chain could not be named.** The tabs read "Other Chain 1..N"; the only way
to know which was which was to open it.

**You could not say "these are separate tracks".** All you had was "are they
linked". Two real examples:

- The *Space Adventure Cobra (1982)* film is, per AniDB, an **alternative
  version** of the *Space Cobra* TV series — not its sequel. Neither was
  linked, so each showed a chain saying "1 anime" and no tab ever appeared.
- *Sailor Moon Crystal* (also an alternative version) was the opposite case:
  linked **inside** the 90s chain, right after Sailor Stars. The timeline said
  "watch Sailor Stars, then Crystal", and the spoiler gate counted all eight
  90s entries as unwatched prerequisites for Crystal.

**A one-entry track could not be expressed.** A single record linked to nothing
did not count as a chain — a correct rule, since otherwise every standalone
film sharing a series name would spawn its own tab — but it also made a record
that stands apart *on purpose*, like the Cobra film, invisible.

## The fix: membership from the name, order from the link

The add and edit screens gained one field: **Chain name (optional)**, with
autocomplete over the names already in use.

| Field | What it says |
| --- | --- |
| Series name | Which series |
| **Chain name** | **Which track inside it** |
| Next anime | The order along that track |

Entries sharing a name count as one chain and get a tab **under that name** on
the series timeline. "Other Chain 1" becomes "Crystal".

For Sailor Moon: remove Sailor Stars' "next anime" link and name the two
tracks. The result:

```
[ 90s Anime ] [ Crystal ] [ Other Chain 1 ] [ Air Date ]
```

For Cobra, without creating a single link — just names:

```
[ Alternative Version (Film) ] [ 1982 TV Series ] [ Air Date ]
```

## A named single entry is a chain

An unnamed single record still does not count — it is just a record. But a
**named** one is a deliberate statement: "this entry is its own track." The
1982 Cobra film is exactly that.

## The spoiler gate stops at the boundary too

The gate now only looks at earlier entries **on the same track**. Opening
Crystal no longer claims you should have watched the 90s run first.

One asymmetry is deliberate: an unlinked member of a named track **appears in
the list** (appended by air date), but the spoiler gate does **not** treat it
as a prerequisite. Showing a record in a list is harmless; saying "watch this
first" is a claim, and it must rest on a link you made by hand. Inventing a
missing link from air dates would turn the warning into a guess.

## Tab order changed

Chain tabs now sit together and **"Air Date" moved to the end**. With names in
play, a tab wedged between them broke the reading. Addresses and behaviour are
unchanged; only the order moved.

## Nothing changes until you name something

Every record written before 1.1.36 has an empty chain name, and empty equals
empty — so no walk shortens, and chain discovery and the spoiler gate produce
**byte-identical** results to 1.1.35. That is measured, not asserted: the
1.1.35 algorithm was kept line by line in the test suite and both versions were
run against the same data.

## Changed files

**New:**

```
files/migration/1.1.36/upgrade.sql
```

**Changed:**

```
files/functions/series_helpers.php   the one chain rule (chain_same) + membership
files/series_timeline.php            tab labels and order
files/add_anime.php                  Chain name field
files/edit_anime.php                 Chain name field
files/list_settings.php              JSON restore carries the chain name
files/lang/tr.php, files/lang/en.php form strings + help page
files/schema.sql
files/version.txt
```

## Deployment note

- `files/functions/series_helpers.php` and `files/series_timeline.php` must
  ship **together**: the page calls `chain_name_norm()`, which does not exist
  in the older helper file.
- The `files/lang/*.php` files belong in the same package, otherwise the new
  field shows a key name instead of a label.
- **Nothing to do on the central catalog server.** The chain name is
  app-local, exactly like "next in series": no new field on the catalog wire,
  no manual `ALTER`, no file changed under `catalog_server/`. A catalog sync
  does **not** overwrite the chain name.
- The migration adds one column and one index and runs on its own.
- **On the distribution server**, the usual two steps: move the published
  `version.txt` to 1.1.36 and publish
  `updates/1.1.36/anime-tracker-1.1.36.zip`.

## What comes next

A chain name lets you write down **what** a track is, but the application still
does not know the **type** of the relation: write "Alternative Version" and a
human understands, the software does not. The next release turns that into
data (sequel, alternative version, side story, summary...), aligned with AniDB's
own distinctions.