# TOMBSTONE — tutorial/ (Council #15)

**Retired:** 2026-05-28
**Council:** `_council/2026-05-28-dead-code-tutorial/`
**Path chosen:** **A — Archive 6 files + lift canonical tagline + drop 3 dead scoreboards** (Joseph voted Path A, 5/5 seats independently converged on ARCHIVE).

## Pattern: dead-by-design supersession

This is **NOT** the usual "built-but-never-wired" pattern Councils #8, #13, #14 surfaced.
The tutorial UI was deliberately retired in favor of a story-driven onboarding pass
through Story Chapter 1 ("First Light"). Two in-tree comments declare the supersession
explicitly:

- `data/evercraft/function/difficulty/choose.mcfunction:28` —
  `# Mark tutorial as done (story chapters replace the tutorial now)`
  Followed by an unconditional `scoreboard players set @s ec.tutorial_done 1` on line 29,
  which force-skips any tutorial UI before it could fire.

- `data/evercraft/function/story/chapter/ch1/start.mcfunction:3` —
  `# This chapter replaces the old tutorial — teaches core mechanics through story`

Chapter 1 teaches the same Step 1 ("Craft an Iron Pickaxe", grants Codex via
`ch1/grant_codex_if_missing`), the same Dream-Rate/Craft-Rate beats, in narrator voice
("The Land", italic gray), and supports the 3-way `sm.path` (Adventurer's Chronicle /
Artisan's Almanac / Both Chronicles) that the orphan tutorial's 2-way Adventure/Passive
split could never represent.

## Files archived (6)

Flat-with-disambiguation layout — three files originally named `start.mcfunction` live
under their original folder name prefix to keep provenance readable.

| Archive filename | Origin path |
|---|---|
| `check_first_join.mcfunction` | `data/evercraft/function/tutorial/check_first_join.mcfunction` |
| `codex_obtained.mcfunction` | `data/evercraft/function/tutorial/steps/codex_obtained.mcfunction` |
| `steps_complete.mcfunction` | `data/evercraft/function/tutorial/steps/complete.mcfunction` |
| `adventure_start.mcfunction` | `data/evercraft/function/tutorial/adventure/start.mcfunction` |
| `passive_start.mcfunction` | `data/evercraft/function/tutorial/passive/start.mcfunction` |
| `skip.mcfunction` | `data/evercraft/function/tutorial/skip.mcfunction` |

### Why 6 files, not 3

The brief's pre-recon called out the 3 candidates (`check_first_join` +
`steps/codex_obtained` + `steps/complete`). Performance, balance, and lore seats all
independently verified that the 3 sister files (`adventure/start`, `passive/start`,
`skip`) had **zero callers** outside the candidate file's own click_event tellraw
buttons — they were a single 6-file orphan tree, not 3 + 3.

Joseph's Path-A vote was explicitly "archive the whole orphan tree, lift the tagline,
drop the dead scoreboards" — not "archive only the 3 named candidates."

## In-tree comments that prove the supersession (preserved)

- `data/evercraft/function/difficulty/choose.mcfunction:28-29` — comment + force-set.
- `data/evercraft/function/story/chapter/ch1/start.mcfunction:3` — header.
- `data/evercraft/function/dreams/on_join.mcfunction:234-237` — was stale ("chained from
  difficulty/choose"); updated this council to reference the archive and the actual flow
  (Story → Difficulty → Chronicle, no tutorial leg).

## Tagline lift (W1)

The strongest line in the candidate set was at `steps/complete.mcfunction:22`:

```
{text:"    Every world has loot. This one has dreams.",color:"gold",italic:true}
```

Its canonical sibling at `difficulty/pioneer_death.mcfunction:45` already ships the
**"treasure"** noun. Unified and planted into `story/chapter/ch1/complete.mcfunction:11`
(closing beat of First Light), preserving italic + gold style:

```
tellraw @s [{text:"    Every world has treasure. This one has dreams.",color:"gold",italic:true}]
```

After the lift, the cadence appears twice in the live tree (once for non-Pioneer
ch1-completers in gold; once for Pioneer death in yellow). Both are terminal-emotion
beats; no duplicate-fire on the same chapter run.

## Scoreboards (W3, W5)

`tutorial/load.mcfunction` previously registered 4 objectives. Three were dropped on
2026-05-28:

| Scoreboard | Status | Reason |
|---|---|---|
| `ec.tutorial_done` | **KEPT** | Live story gate at `story/chapter/ch2/check.mcfunction:8` (`if score @s ec.tutorial_done matches 1 run function evercraft:story/quest/advance`). Written by `difficulty/choose:29` + `difficulty/pioneer_welcome:10`. |
| `ec.tutorial_path` | DROPPED | All readers/writers lived inside the 6 archived files + `admin/strip_player_zero` + `story/test/reset_all`. The latter two were trimmed in the same pass. |
| `ec.tutorial_step` | DROPPED | Same shape as `_path`. Also trimmed from `story/test/debug.mcfunction:3`'s tellraw. |
| `ec.tutorial_cd` | DROPPED | Stub. Zero readers AND zero writers anywhere — pure dead registration. |

`ec.tutorial_done` continues to be written by 4 production sites (difficulty/choose,
pioneer_welcome, admin/strip_player_zero, story/test/reset_all) — multi-writer status
is tracked in `BIG_BRAIN/20-architecture/multi-writer-scoreboards.md` and is a
**separate cleanup**, NOT in scope for Council #15.

## Files touched in the live tree (full delta)

1. `data/evercraft/function/story/chapter/ch1/complete.mcfunction` — added 4 lines
   (W1 tagline lift + provenance comment).
2. `data/evercraft/function/tutorial/load.mcfunction` — trimmed from 9 lines to 8 (W3);
   only `ec.tutorial_done` registration kept. File preserved so `init.mcfunction:637`
   `function evercraft:tutorial/load` still resolves.
3. `data/evercraft/function/admin/strip_player_zero.mcfunction:2052-2056` — dropped
   `ec.tutorial_path 0` + `ec.tutorial_step 0` resets (W5). `ec.tutorial_done 0` kept.
4. `data/evercraft/function/story/test/reset_all.mcfunction:14-16` — dropped
   `ec.tutorial_path 0` + `ec.tutorial_step 0` resets. Comment updated to reflect
   `Story → Difficulty → Chronicle` (no tutorial leg).
5. `data/evercraft/function/story/test/debug.mcfunction:3` — trimmed the
   `ec.tutorial_step` slot from the debug tellraw.
6. `data/evercraft/function/dreams/on_join.mcfunction:234-237` — refreshed the stale
   comment block ("Now handled by consolidated flow") to point at this tombstone +
   describe the actual post-archive flow.

## Attribute modifier (W4)

`evercraft:tutorial_dr_bonus` — the `attribute @s luck modifier add ...` lived ONLY at
`steps_complete.mcfunction:14` (now archived). No global registration anywhere. No
cleanup needed in the live tree; the ID dies with the archived file.

If Ch1 wants to grant a small dream-rate buff on completion, balance seat recommends
**0.1-0.2** (matches journal-region completion magnitude), **NOT** the orphan's `1.0`
(prestige-tier; 5-10x over-scaled). That's a scope-2 follow-up, not this council.

## Preserved canon

- **Vocab.** "Forevercraft", "Dream Rate", "Craft Rate", "Codex" all confirmed canon
  by the lore seat; no rewrites needed. The "Adventure Path / Passive Path" labels
  inside the archived files are obsolete vs the live "Adventurer's Chronicle /
  Artisan's Almanac / Both Chronicles" — that's a feature of the supersession, not
  drift to be propagated.
- **Story raid.** Chapter 1 ("First Light") is the surviving onboarding pass.
  `data/evercraft/function/story/chapter/ch1/start.mcfunction` and `complete.mcfunction`
  are the canonical owners of the Iron-Pick / DR-CR teach beats.
- **Codex Help Guide.** Has 20 fixed topic slots (`codex/hub/help/spawn.mcfunction`);
  none of them is Tutorial. The archived `check_first_join:24` and `skip:7` promised
  "revisit from the Codex help menu later" — phantom link, never implemented. Archive
  removes the lie.

## Revert instructions

If a future Joseph wants to revive the tutorial UI:

1. `git mv data/.archive/2026-05-28-dead-tutorial/*.mcfunction` back into
   `data/evercraft/function/tutorial/` — restoring the subdir nesting:
   - `check_first_join.mcfunction` → `tutorial/check_first_join.mcfunction`
   - `codex_obtained.mcfunction` → `tutorial/steps/codex_obtained.mcfunction`
   - `steps_complete.mcfunction` → `tutorial/steps/complete.mcfunction`
   - `adventure_start.mcfunction` → `tutorial/adventure/start.mcfunction`
   - `passive_start.mcfunction` → `tutorial/passive/start.mcfunction`
   - `skip.mcfunction` → `tutorial/skip.mcfunction`
2. Re-add the 3 scoreboard registrations to `tutorial/load.mcfunction`
   (`ec.tutorial_path`, `ec.tutorial_step`, `ec.tutorial_cd`).
3. Re-add the resets to `admin/strip_player_zero.mcfunction` and
   `story/test/reset_all.mcfunction`.
4. Wire `check_first_join` from `dreams/on_join.mcfunction` (the natural insertion point
   per performance seat) gated on `unless score @s ec.tutorial_done matches 1`.
5. **Resolve the design conflict:** decide whether `difficulty/choose:29`'s force-set
   to `ec.tutorial_done=1` stays (in which case the tutorial UI is permanently
   bypassed) or moves out (in which case the tutorial flow takes the slot ch1/start
   currently occupies, and ch1's "replaces the old tutorial" comment becomes a lie).
6. **Fix the rewards** before re-wiring `complete.mcfunction`: re-entry guard at line
   5 (`unless score @s ec.tutorial_done matches 1 run return 0` BEFORE the `set 1`),
   `attribute @s luck modifier remove evercraft:tutorial_dr_bonus` before the `add`,
   and either drop the `add @s ec.cf_xp 100` direct write or route it through
   `craftforever/artisan/add_xp` to avoid the documented cf_xp drift bug class.
7. Add a Codex Help Guide entry for "Tutorial" or strip the "revisit from the Codex
   help menu" copy from `check_first_join:24` + `skip:7` — currently a phantom link.
8. Decide whether the binary `ec.tutorial_path` 1/2 split co-exists with `sm.path`'s
   1/2/3 (Adventurer/Artisan/Both) or unifies on `sm.path`. The orphan's lack of a
   3rd option was a lore-seat flag.

## Notes for future audits

- The retirement is **deliberate, not accidental** — do NOT re-flag these files as
  dead-code candidates if they're ever resurrected from this archive into the tree.
  The next audit pass on `tutorial/` should start by reading this tombstone.
- `BIG_BRAIN/20-architecture/dead-code.md` was struck on 2026-05-28 to point at
  `_council/2026-05-28-dead-code-tutorial/CLOSED.md` for the resolved tutorial item.
- `BIG_BRAIN/30-systems/tutorial.md` was tombstoned with a 2026-05-28 banner
  reflecting the archive (the system file remains because `tutorial/load.mcfunction`
  is still live for the `ec.tutorial_done` registration).
