# Council #10 — `guilds/` (plural) Plan 1 retirement (2026-05-27)

**Convened + closed:** 2026-05-27
**Verdict:** UNANIMOUS 5-seat ARCHIVE-WHOLE (balance / performance / race / lore / compliance — all 8 files = B. ARCHIVE; zero WIRE, zero KEEP).
**Cluster retired:** the entire `data/evercraft/function/guilds/` (plural) subtree — 8 mcfunction files, ~238 lines.

## The narrative — Plan 1 was an unbuilt promise

`guilds/load.mcfunction:2` names the original design intent verbatim:

> `# Plan 1: Adventurers Guild + Merchants Guild + Villain Guilds + Alliance`

This was a 4-guild-type faction system (Adventurers / Merchants / Pillager / Hostile) layered on rank-XP ladders (F→E→D→C→B→A→S), guild quests, an Alliance unlock, and a village-claims-a-guild-type mechanic. **It was never wired to players.** The two entry points — `adventurers/complete_quest` and `merchants/complete_quest` — have **ZERO callers anywhere in the pack**. Everything downstream of them (`rank/calculate`, both `rank_up` handlers) is transitively dead. The two `village/` files (`assign`, `create_pillage`) are standalone with 0 callers AND target `ec.village_marker`, a marker **no live system ever spawns** — so they were inert even if called.

The ONLY external hook into the whole subtree was `init.mcfunction:625 → guilds/load`, which registered 20 `gd.*` dummy objectives that nothing live ever consumed (only the Pioneer-wipe `admin/strip_player_zero.mcfunction` zeroed a subset of them).

**Fully superseded by the live singular `guild/` (380-file) system**, which delivers every beat Plan 1 only promised, better:
- 7-tier rank ladder + XP/levels (live)
- A 20+-file donation subsystem (vs the plural's single `gd.donated`)
- `guild/diplomacy/alliance/{add,remove,check}` — vote-driven Alliance formation with "Alliance formed with X!" tellraw + `milestones/increment/guild_alliance` (vastly richer than the dead `gd.alliance_*` flags)
- A live guild-vs-guild diplomacy/event/PvP loop (the "Pillage type=3" warfare mechanic)
- Different scoreboard namespace (`gs.*`), zero collision with the dead `gd.*`

This council resolves the long-standing **"guilds/-vs-guild/ consolidation"** backlog item (`10-pending.md` full-audit #3). The plural is gone; the singular is the canonical guild system.

## Banned-word sweep: CLEAN

`grep -rni "magic\|magical"` across all 8 files → **0 hits.** Author internalized the standing law. No scrub needed. (Record kept here so a future revival audit can skip the re-scan.)

---

## PRESERVED DESIGN FRAGMENT — the village-pillage villain vignette (MANDATORY LORE LIFT)

`village/create_pillage.mcfunction` holds the cluster's single strongest piece of unique canon — a **convert-a-village-to-a-pillager-outpost** villain payoff gated on the Reaper infamy path. There is **NO live equivalent in tone**: the live `guild/diplomacy` "Pillage (type=3)" is guild-vs-guild PvP warfare, a different fiction. This vignette is a genuine lost design. Preserved here verbatim as a seed for any future Reaper / villain dark-path payoff.

**Gate:** `execute unless score @s rp.infamy matches 100.. run return 0` (`# Check for negative affinity (Reaper infamy)`)

**Player-facing announcement triplet (verbatim):**

```
tellraw @s [{text:"  ☠ ",color:"dark_red"},{text:"PILLAGE VILLAGE CREATED!",color:"dark_red",bold:true}]
tellraw @s [{text:"    All villagers have been driven out.",color:"gray"}]
tellraw @s [{text:"    Pillager traders have taken over.",color:"gray"}]
```

i.e. the three lines:
> **PILLAGE VILLAGE CREATED!**
> All villagers have been driven out.
> Pillager traders have taken over.

**Signage (verbatim):** a floating `text_display` reading `☠ Pillager Guild ☠` (`☠ Pillager Guild ☠`, `color:"dark_red"`, `bold:true`), tagged `["gd.guild_label","gd.pillager"]`.

**Sound stack (verbatim):**
```
playsound minecraft:entity.ravager.roar master @s ~ ~ ~ 0.8 0.8
playsound minecraft:entity.evoker.prepare_wololo master @s ~ ~ ~ 0.6 0.5
```

**Mechanic shape:** `kill @e[type=villager,distance=..50]` (wipe villagers in 50-block radius) → stamp `data.guild_type=3` on the nearest `ec.village_marker` → spawn 3 `gd.pillager_trader`-tagged pillagers (`equipment:{}`, `PersistenceRequired:1b`) as tradeable outpost merchants (invisible-villager-overlay trade method, like the Wise Wanderer).

### Secondary fragment — village-claims-a-guild-type (`village/assign.mcfunction`)

The "a village belongs to a guild type" framing, superseded by the player-created `guild/` model:
> ⚔ **Adventurers Guild** established in this village! (`⚔`, red)
> ❖ **Merchants Guild** established in this village! (`❖`, aqua)

50/50 random assignment (`random value 1..2`) stamping `data.guild_type` on the nearest `ec.village_marker`, with floating `⚔ Adventurers Guild ⚔` / `❖ Merchants Guild ❖` labels. Idea preserved; no live system to receive it.

### Design statement (`load.mcfunction` header)

The 4-pillar taxonomy is named only here: **Adventurers + Merchants + Villain Guilds + Alliance**. Alliance + guild-conflict are honored *in spirit* by the live `guild/` system; the specific village-pillage villain vignette is the one genuinely lost design.

---

## CRITICAL SAFETY WARNINGS for any future revert / cleanup

### 1. `ec.guild_menu` is DOUBLE-REGISTERED — the live registration survives, DO NOT strip it

`guilds/load:52` registered `ec.guild_menu` (trigger) — but so does the **live** `guild/load.mcfunction:12` (`scoreboard objectives add ec.guild_menu trigger "Guild Menu"`), which has 50-60+ live readers across `guild/` + `codex/`. Archiving the plural `load` file is safe because Minecraft no-ops a duplicate `objectives add` and the live def wins. **The `ec.guild_menu` objective was NOT removed by this council and MUST survive.** Do not "clean it up" on a revert.

### 2. `gd.t_w*/gd.t_l*` are TEAMS, not objectives — NEVER blanket-grep `gd.`

The live `guild/diplomacy/titles/` uses `gd.t_w1..gd.t_w4` + `gd.t_l1..gd.t_l4` as **Minecraft TEAM names** (`team add gd.t_w1`, `team join gd.t_w1 @s`) — Victor/Vanquished title prefixes. They share the `gd.` *string prefix* with the dead `gd.*` *scoreboard objectives* but are a completely different namespace. **A blanket `grep gd. | strip` would corrupt live team lines.** This council's strip was ENUMERATED by exact objective name. Any future `gd.` cleanup must do the same.

### 3. `ec.const` / `#gd_rank_*` — leave `ec.const` alone

`guilds/load` wrote `#gd_rank_F..S` fake-player constants onto the shared `ec.const` pool. `ec.const` is a pack-wide constant objective — **do NOT remove it.** Those specific `#gd_rank_*` fake-players simply go unwritten now (harmless dangling, never read by anything live). No init change was made for them.

---

## What this council changed (companion strips outside the 8 archived files)

1. **`init.mcfunction`** — removed Block A (`# === GUILD SYSTEM OVERHAUL (Plan 1) ===` + `function evercraft:guilds/load`, was lines 624-625) AND Block B (`# Guild progression` + `scoreboard objectives add gd.quest_type/gd.hos_xp/gd.pil_xp dummy`, a second redundant registration inside the Phantom-Scoreboard-Fix section, was lines 690-693). The Phantom-Scoreboard-Fix section header itself was retained (it has live members: Craft affinity, etc.).
2. **`admin/strip_player_zero.mcfunction`** — removed the `# === GUILD DIPLOMACY (gd.*) ===` block: 12 `scoreboard players set @s gd.* 0` lines (was 2144-2156). These were the only external writer of any `gd.*` objective. Strip was by content. `ec.guild_menu` + `gd.t_*` teams untouched (verified).
3. **BIG_BRAIN** — `20-architecture/dead-code.md` lost its `### guilds/ (4 candidates)` block; `30-systems/guilds.md` tombstoned (Retired note); `11-shipped.md` prepended; `10-pending.md` appended (villain-pillage feature idea + consolidation-backlog-CLOSED note).

## Revert instructions

To restore the plural system (e.g. to mine the villain vignette for a real feature):

1. `git mv` each of the 8 files back from `data/.archive/2026-05-27-dead-guilds/<flat_name>.mcfunction` to its original `data/evercraft/function/guilds/<subpath>.mcfunction` — recreating the subdirs:
   - `load.mcfunction` → `guilds/load.mcfunction`
   - `rank_calculate.mcfunction` → `guilds/rank/calculate.mcfunction`
   - `adventurers_complete_quest.mcfunction` → `guilds/adventurers/complete_quest.mcfunction`
   - `adventurers_rank_up.mcfunction` → `guilds/adventurers/rank_up.mcfunction`
   - `merchants_complete_quest.mcfunction` → `guilds/merchants/complete_quest.mcfunction`
   - `merchants_rank_up.mcfunction` → `guilds/merchants/rank_up.mcfunction`
   - `village_assign.mcfunction` → `guilds/village/assign.mcfunction`
   - `village_create_pillage.mcfunction` → `guilds/village/create_pillage.mcfunction`
2. Re-add `function evercraft:guilds/load` + its comment to `init.mcfunction`.
3. Re-add the 12-line `gd.*` block to `admin/strip_player_zero.mcfunction`.
4. **Do NOT re-add `ec.guild_menu` registration** — the live `guild/load:12` already owns it. A duplicate is a harmless no-op but pointless.
5. Author the missing entry-point callers (the original reason it was dead) and spawn `ec.village_marker` somewhere, or the village files stay inert.

**Note:** before reviving for player-facing ship, reconcile with the live `guild/` system — Plan 1's intent is already delivered there. The only piece worth a fresh feature is the **villain village-pillage vignette** (preserved above), which has no live home.
