Historical checkpoint log: each batch describes the repository state when that batch landed. Phase 07 later removed the transitional assignment source and declaration umbrella; use the Phase 07 validation matrix for current ownership.
Status: Complete
Last updated: 2026-08-07
Baseline: Phase 02 completion commit 9acda0ec
This document is the checkpoint history for Phase 03 behavior-preserving source extraction. Phase 03 is accepted; each checkpoint records exact ownership moves and validation so later work does not need to repeat the source audit. Final acceptance is summarized in Special Procedure Phase 03 Validation.
The first checkpoint removes 1,052 lines from src/spec_procs.c and adds two production-linked
source files. It changes source ownership only: callback names, linkage, signatures, assignment
sites, registry identities, initialization order, and runtime behavior remain unchanged.
src/spec/spec_objects.c now owns:
obj_proc_ready()andweapons_spells();monk_gloveandmonk_glove_cold;spikeshield,viperdagger,ches, andcourage;flamingwhip,helmblade,flaming_scimitar, andfrosty_scimitar;disruption_maceandhaste_bracers.
The unused, commented forest_idol source remains beside the procedures it historically
accompanied. This checkpoint does not redesign obj_proc_ready(); the known same-VNUM versus
pointer-identity issue remains a Phase 04 contract.
src/vessels/vessels_legacy.c now owns:
- the legacy route table and
find_ship(),move_ship(), andupdate_ship(); ship_lookout()anddo_disembark;- the Chionthar ferry, Alandor ferry, and Moonshae carpet procedures;
- the Greyhawk boarding and bridge-command procedures.
At this checkpoint the Neverwinter button and valve controls remained in src/spec_procs.c
because they are a cohesive zone puzzle, not general vessel mechanics. floating_teleport also
remained pending a traced ownership decision; Checkpoint 2 resolves both.
Both production source manifests contain the same new implementation files:
Makefile.am:src/spec/spec_objects.candsrc/vessels/vessels_legacy.c;CMakeLists.txt: the identical two paths.
The root Autotools production binary and CuTest binary link both files. A fresh CMake build links
both the circle and cutest targets.
Run from the repository root on 2026-08-07:
| Gate | Result |
|---|---|
make -j$(nproc) |
PASS with -Wall -Wextra |
make test |
PASS |
direct ./cutest confirmation |
PASS, 574 tests |
make install |
PASS; bin/circle installed and root circle removed |
fresh CMake circle build |
PASS |
fresh CMake cutest build and ctest --output-on-failure |
PASS, 12/12 tests |
| exported-symbol comparison against the Phase 02 installed binary | PASS, no moved symbol added, removed, or retyped |
git diff --check |
PASS |
The symbol comparison covers all moved helpers, commands, object callbacks, ferry callbacks, the
Greyhawk callbacks, and the legacy ship_info data symbol. Existing production-linked tests retain
registry identity, dispatch, boarding, vessel, assignment, and world-loading coverage.
Checkpoint 2 completes the contiguous object-section audit and moves each non-general group to its
primary subsystem. src/spec_procs.c shrinks from 11,162 lines at Checkpoint 1 to 6,357 lines.
The Phase 03 baseline was 12,212 lines.
The resulting ownership is:
src/spec/spec_objects.c: the remaining reusable object callbacks, includingwarbowand the traced, cross-zonefloating_teleport;src/spec/spec_zone_neverwinter.c: the button and valve halves of the Neverwinter sewage control puzzle;src/obj/player_shop.c: player-owned shop inventory, purchase, identification, and persistence;src/obj/vendor.c: bank service, generated armor and weapon vendors, pet-object conversion, and paid identification;src/craft/crafting_molds.c: mold construction, listing, validation, purchase, and delivery;src/character/vampire_cloak.c: vampire-only cloak customization;src/quest/quest_services.c: completed-quest reward replacement.
The no-op celestial_leviathan callback remains in src/spec_procs.c until it can move together
with its actual encounter state and helpers from src/zone_procs.c. This preserves the cohesive
zone-package rule. The historical commented forest_idol and storage_chest implementations
remain beside general object procedures and are not compiled.
Both build manifests add the same six new source files and continue to link
src/spec/spec_objects.c for production and CuTest. No declaration, assignment, registry entry,
or call site changes.
| Gate | Result |
|---|---|
make -j$(nproc) |
PASS with -Wall -Wextra |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest incremental rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 1 | PASS, no symbol added, removed, or retyped |
Checkpoint 3 removes the non-procedure calculation and display block from src/spec_procs.c and
splits it by primary game-system responsibility:
src/character/abilities.cand.howncompute_ability()andcompute_ability_full();src/character/skill_lists.cand.hown skill prerequisites, skill and ability lists, training effects, and the existingcross_namesandskills_alphabeticdata;src/magic/spell_lists.cand.hown spell sorting, spell-list display, and the existingspell_sort_infodata.
Direct consumers now include the owner headers. src/spec_procs.h includes them as a compatibility
surface for callers that have not yet narrowed their dependency. This is an ownership-only move:
function and data names, linkage, signatures, list ordering, calculations, text, and runtime behavior
are unchanged.
Both build manifests add the same three implementation files for the production and CuTest links.
The checkpoint removes 2,012 more lines from src/spec_procs.c, reducing it from 6,357 to 4,345
lines and from the Phase 03 baseline of 12,212 lines by 7,867 lines.
| Gate | Result |
|---|---|
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 2 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 4 consolidates the complete legacy moving-room package under
src/vessels/vessels_moving_rooms.c and .h. The owner now contains:
- the
movingRoomListruntime list; - world
Mrecord loading andsetup_moving_room(); - the zone-pulse scheduler in
moving_rooms_update(); prepMovingRoom(),unlinkMovingRoom(), andlinkMovingRoom(); and- the legacy
moving_roomscallback reached through the Phase 01 gateway.
The loader and scheduler moved out of src/db.c; the relocation helpers and callback moved out of
src/spec_procs.c. src/comm.c, src/db.c, src/olc/genwld.c, and the production-linked
moving-room tests include the owner header directly. src/spec_procs.h retains it as a compatibility
include, while src/olc/oasis.h no longer publishes declarations owned by vessels.
This is an ownership-only move. The world M grammar, allocation and list order, callback ABI,
gateway translation, zone-pulse position, pulse reset, route selection, currentInbound updates,
exit mutation order, messages, and global symbol names are unchanged. Both build manifests add the
same implementation file. No player or builder helpfile changed because no command, authored data,
or visible behavior changed.
The checkpoint removes 325 more lines from src/spec_procs.c, reducing it from 4,345 to 4,020
lines and from the Phase 03 baseline of 12,212 lines by 8,192 lines.
| Gate | Result |
|---|---|
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 3 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 5 completes the traced general mobile and room slice while keeping feature-specific services with their primary systems:
src/spec/spec_mobiles.cand.hownmayor,snake,hound,thief,wizard,wall,puff,fido, andjanitor, plus the privatenpc_steal()helper;src/spec/spec_rooms.cand.hown the generaldumproom callback;src/character/guild_services.cand.hown class training throughguildand entrance policy throughguild_guard;src/magic/spellbook_scroll.cand its new owner header ownwizard_libraryresearch; andsrc/obj/vendor.cand its new owner header own room-basedpet_shopscommerce alongside the existing pet-object and equipment-vendor services.
Assignment and registry code include the owner headers directly. src/spec_procs.h retains those
headers as a compatibility surface and no longer redeclares the moved callbacks. Both build
manifests add the same three new implementation files; the existing magic and vendor sources were
already linked by both systems.
This checkpoint preserves callback bodies, static state, signatures, registry identities, assignments, command matching, player-visible messages, costs, rewards, spellbook mutation, pet scaling and follower setup, guild rules, and mobile pulse behavior. System documentation now points pet and vendor ownership at the feature files. No player helpfile changed because no command or behavior contract changed.
The checkpoint removes 1,005 more lines from src/spec_procs.c, reducing it from 4,020 to 3,015
lines and from the Phase 03 baseline of 12,212 lines by 9,197 lines.
| Gate | Result |
|---|---|
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 4 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 6 completes the reusable combat/companion archetype slice and moves clan-hall behavior to the clan subsystem:
src/spec/spec_mobile_archetypes.cand.howndracolich_mob,vampire_mob,lich_mob,cityguard,dog,practice_dummy,planewalker,phantom,mercenary,ethereal_pet, and the summoned-companion callbackswraith,skeleton_zombie,vampire,totemanimal,shades,solid_elemental,wraith_elemental, andbonedancer;- the legacy
perform_lichdrain()helper moves with the lich archetype while retaining its global name and type; and src/clan_services.cand.hownclan_clericandclan_guard, including clan-hall lookup, membership policy, spell pricing, and entrance blocking.
The dedicated archetype file keeps both general mobile sources below the 1,000-line review prompt.
Assignment and registry code include the archetype owner header directly. src/spec_procs.h keeps
the owner headers as compatibility includes and no longer redeclares the moved callbacks. Both build
manifests link the two new implementation files for production and CuTest.
This checkpoint preserves callback bodies, function-local static state, signatures, assignments, registry identities, command and pulse behavior, player-visible messages, spell and combat effects, follower lifecycle, clan prices, and access rules. No player helpfile changed because no command or behavior contract changed.
The checkpoint removes 1,055 more lines from src/spec_procs.c, reducing it from 3,015 to 1,960
lines and from the Phase 03 baseline of 12,212 lines by 10,252 lines.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 5 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 7 begins the src/zone_procs.c split by moving the complete King's Castle package to
src/spec/spec_zone_kings_castle.c and .h. The owner now contains:
assign_kings_castle()and its recorded mobile-assignment helper;king_welmar,training_master,tom,tim,James,cleaning,CastleGuard,DicknDavid,peter, andjerry;- the exported
do_npc_rescue()helper; and - all castle-private VNUM conversion, guard and staff predicates, target selection, entrance blocking, cleaning, twin, combat, movement-path, and function-local static state.
src/spec_assign.c includes the owner header directly, while src/spec_procs.h retains it as a
compatibility include and no longer redeclares the two exported owner functions. Both build
manifests link the new implementation for production and CuTest. The recorded assignment source
label now names src/spec/spec_zone_kings_castle.c, its actual source owner; assignment order,
handler selection, and effective-binding outcomes are unchanged.
This checkpoint preserves callback bodies, signatures, global symbol names, castle-relative VNUM calculation, initialization order, command and pulse behavior, movement paths, combat decisions, messages, and static state. No player or builder helpfile changed because no command, authored-data, or behavior contract changed.
The checkpoint removes 818 lines from src/zone_procs.c, reducing it from 4,202 to 3,384 lines.
The new cohesive implementation is 851 lines, below the 1,000-line review prompt.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 6 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 8 moves the next two complete package boundaries from src/zone_procs.c:
src/spec/spec_zone_abyss.cand.hownabyss_randomizerand its private room-number conversion helper; andsrc/spec/spec_zone_crimson_flame.cand.howncf_trainingmaster,cf_alathar, and the exportedcf_converter()helper used to resolve their zone-relative mobile VNUMs.
src/spec_assign.c and src/spec/spec_registry.c include both owner headers directly.
src/spec_procs.h retains them as compatibility includes and no longer redeclares the three moved
callbacks. Both build manifests link both implementations for production and CuTest. The Crimson
Flame source explicitly includes magic/spells.h for the combat type and damage constants that the
legacy monolith supplied indirectly.
The ownership trace confirms that tia_rapier is object VNUM 132125 in The Prisoner package, not
Crimson Flame content, so it remains with the following Prisoner boundary. This checkpoint preserves
callback bodies, signatures, global symbol names, zone-number conversion, assignment order,
registry identity, hunting and follower behavior, combat calls, messages, and pulse behavior. No
player or builder helpfile changed because no command, authored-data, or behavior contract changed.
The checkpoint removes another 261 lines from src/zone_procs.c, reducing it from 3,384 to 3,123
lines and by 1,079 lines from the Phase 03 baseline. The new Abyss and Crimson Flame implementations
are 158 and 124 lines respectively.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 7 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 9 moves two adjacent, explicitly coupled encounter packages:
src/spec/spec_zone_prisoner.cand.howntia_rapier,the_prisoner,prisoner_dracolich,prisoner_heads,eq_loaded, the death and form transition, attack and rejuvenation helpers, treasury gear loading, item transfer, and all package-local VNUM and loot definitions; andsrc/spec/spec_zone_celestial_leviathan.cand.hown the existing no-opcelestial_leviathancallback plus its currently unused rejuvenation and attack helpers.
Combat and staff-event code include the Prisoner owner header directly for
prisoner_on_death() and prisoner_heads. Assignment and registry code include both owner headers
directly. src/spec_procs.h retains both as compatibility includes and no longer redeclares the
moved state, API, or callbacks. Both build manifests link both implementations for production and
CuTest.
The Celestial attack helper already selected breath attacks from prisoner_heads; this checkpoint
preserves that dormant behavior and makes the dependency explicit by including the Prisoner owner
header. It does not activate either unused helper or change the assigned callback's no-op result.
All callback bodies, exported names and types, state initialization, assignment and registry
identity, death timing, loot construction, combat calls, messages, and event completion behavior
remain unchanged. No player or builder helpfile changed because no command, authored-data, or
behavior contract changed.
The checkpoint removes another 881 lines from src/zone_procs.c, reducing it from 3,123 to 2,242
lines and by 1,960 lines from the Phase 03 baseline. It also removes the final 17-line zone stub
section from src/spec_procs.c, reducing that file from 1,960 to 1,943 lines and by 10,269 lines
from its Phase 03 baseline. The new Prisoner and Celestial Leviathan implementations are 790 and
144 lines respectively.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 8 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 10 moves the complete Fire Giant boundary to
src/spec/spec_zone_fire_giant.c and .h. The owner now contains:
fg_invasion_loaderand every invasion limit, treasure, room, mobile, and equipment definition used by its load sequence;- all four elite-squad construction paths, distributed attackers, throne guards, and the Valkyrie arrival; and
flamekissed_instrument, its private subtype parser, transformation messages, and hit-point and move-action cost.
src/spec_assign.c and src/spec/spec_registry.c include the owner header directly.
src/spec_procs.h retains it as a compatibility include and no longer redeclares the two moved
callbacks. Both build manifests link the new implementation for production and CuTest.
This is an ownership-only move. The callback bodies, exported names and types, package constants, load counts and order, assignment and registry references, equipment placement, command matching, instrument subtype resolution, messages, resource costs, and pulse behavior remain unchanged. No player or builder helpfile changed because no command, authored-data, or behavior contract changed.
The checkpoint removes another 634 lines from src/zone_procs.c, reducing it from 2,242 to 1,608
lines and by 2,594 lines from the Phase 03 baseline. The new cohesive implementation is 657 lines.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 9 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 11 moves the complete Jot boundary to src/spec/spec_zone_jot.c and .h. The owner now
contains:
jot_inv_check, the Fire Giant, Smoking Beard, and Frost Giant position tables,jot_converter(), and the currently unusedjot_invasion()state transition;jot_invasion_loader, including stored-mobile relocation, group construction, treasure and equipment loading, distributed invasion forces, the Valkyrie arrival, and Brunnhilde removal;thrym,ymir,planetar, andgatehouse_guard; andymir_cloak,mistweave,frostbite,vaprak_claws,fake_twilight,twilight,valkyrie_sword,planetar_sword, andgiantslayer.
src/spec_assign.c and src/spec/spec_registry.c include the owner header directly.
src/spec_procs.h retains it as a compatibility include and no longer redeclares the fourteen moved
callbacks. The Jot owner still includes spec_procs.h for the existing cross-file is_wearing()
and weapons_spells() helpers; relocating that compatibility API remains the final Phase 03 shared
ownership task. Both build manifests link the new implementation for production and CuTest.
This is an ownership-only move. The 983 legacy package lines are unchanged, including exported state and helper symbols, callback names and types, position-table order, relative-VNUM conversion, load and grouping order, assignments, registry references, combat checks, spell levels, affects, cooldowns, messages, and pulse behavior. No player or builder helpfile changed because no command, authored-data, or behavior contract changed.
The new owner is 1,009 lines after file documentation and direct includes. It exceeds the 1,000-line
review prompt by nine lines, but the review confirms that splitting the loader, mutable invasion
state, mobile encounters, or their zone-specific objects would weaken the cohesive Jot boundary.
The checkpoint moves 983 package lines and removes one redundant separator line from
src/zone_procs.c, reducing it from 1,608 to 624 lines and by 3,578 lines from the Phase 03
baseline.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 10 | PASS, no symbol added, removed, or retyped |
git diff --check |
PASS |
Checkpoint 12 moves the complete Mad Drow cube-slider boundary to
src/spec/spec_zone_mad_drow.c and .h. The owner now contains:
- the exported
open_msgandclose_msgstate flags andstruct slider_row; - all sixty north/south, east/west, and up/down slider-row tables;
open_exit(),close_exit(),open_row(),close_row(), andtoggle_row();- the private cube-wide broadcast helper; and
- the assigned and registered
cube_slidercallback.
src/spec_assign.c and src/spec/spec_registry.c include the owner header directly.
src/spec_procs.h retains it as a compatibility include and no longer redeclares the moved
callback. The implementation explicitly includes act.h, which owns the legacy EXITN and
IS_CLOSED macros previously supplied by the monolith's broad include surface. Both build
manifests link the new implementation for production and CuTest.
This is an ownership-only move. All 419 legacy package lines are unchanged, including exported names and types, state initialization, table contents and order, room and exit mutation order, random-toggle frequency, delay state, assignment and registry references, messages, and callback returns. The new cohesive implementation is 437 lines. No player or builder helpfile changed because no command, authored-data, or behavior contract changed.
The checkpoint reduces src/zone_procs.c from 624 to 204 lines and by 3,998 lines from its Phase 03
baseline.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 11 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 419 moved legacy lines | PASS, no content drift |
git diff --check |
PASS |
Checkpoint 13 moves the final src/zone_procs.c package to src/spec/spec_zone_ttf.c and .h.
The owner contains:
ttf_monstrosityandttf_abomination, including their room-wide knockdown behavior;ttf_rotbringerand its one-time flesh-mound follower summon;- the exported
ttf_pathpatrol route; and ttf_patrol, including its per-mobile path index and delay scheduling.
The TTF owner directly includes the existing AOE, position, graph, movement, mobile-loading,
follower, and room-operation APIs it uses. src/spec_assign.c includes the owner header directly,
while src/spec_procs.h retains it as a compatibility include and no longer redeclares the four
callbacks. Both build manifests replace src/zone_procs.c with the TTF implementation for
production and CuTest, completing the legacy zone-source split. Stale source-name comments in object
valuation and Prisoner death handling now describe their actual responsibility and owner.
This is an ownership-only move. All 167 legacy package lines are unchanged, including exported
names and types, path contents and order, AOE traversal, chance and health thresholds, wait states,
follower construction, path delay and index mutation, assignment references, messages, and callback
returns. The new cohesive implementation is 189 lines. The remaining 37-line include shell and
placeholder are retired with src/zone_procs.c. No player or builder helpfile changed because no
command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 12 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 167 moved legacy lines | PASS, no content drift |
both build manifests omit the retired src/zone_procs.c |
PASS |
git diff --check |
PASS |
Checkpoint 14 moves the exported is_wearing() predicate from src/spec_procs.c to
src/handler.c and publishes it beside equip_char() and unequip_char() in src/handler.h.
Its consumers in general object procedures, Jot objects, offensive combat, and core combat already
include that equipment-owner header. The redundant spec_procs.h declaration and the duplicate
special-procedure include in src/combat/act.offensive.c are removed.
This is an ownership-only move. All 13 helper lines are unchanged, including the exported name,
bool return type, obj_vnum parameter, ascending wear-slot traversal, empty-slot handling,
same-VNUM comparison, and early success return. The move removes one adjacent separator line and
reduces src/spec_procs.c from 1,943 to 1,929 lines. No build-manifest entry is needed because
handler.c is already linked by production and CuTest. No player or builder helpfile changed
because no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 13 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 13 moved helper lines | PASS, no content drift |
git diff --check |
PASS |
Checkpoint 15 moves the shadowdragon mobile callback from src/spec_procs.c to
src/spec/spec_zone_shadow_dragon.c and publishes its callback declaration through
src/spec/spec_zone_shadow_dragon.h. Its only direct assignment remains mobile VNUM 110600 in
src/spec_assign.c; no registry definition or authored world binding changed. The assignment
source now includes the owner header directly, while src/spec_procs.h retains the owner include as
a compatibility surface.
This is an ownership-only move. All 36 legacy implementation lines are unchanged, including the
one-in-five combat-pulse chance, room traversal with cached successors, player and pet eligibility,
message targets, direct move-point subtraction, darkness spell call and arguments, and return
values. Removing the adjacent separator line reduces src/spec_procs.c from 1,929 to 1,892 lines.
The 54-line owner source is linked by both build manifests. No player or builder helpfile changed
because no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 14 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 36 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_shadow_dragon.c |
PASS |
git diff --check |
PASS |
Checkpoint 16 moves the banshee mobile callback from src/spec_procs.c to
src/spec/spec_zone_banshee.c and publishes its callback declaration through
src/spec/spec_zone_banshee.h. Its two direct assignments remain mobile VNUMs 109718 and 106230 in
src/spec_assign.c; no registry definition or authored world binding changed. The assignment
source now includes the owner header directly, while src/spec_procs.h retains the owner include as
a compatibility surface.
This is an ownership-only move. All 31 legacy implementation lines are unchanged, including the
command and position guards, PROC_FIRED reset and one-shot semantics, one-in-41 combat-pulse
chance, room traversal, player-only eligibility, saving throw arguments, message targets, direct
hit-point assignment, and return values. The owner explicitly includes
magic/domains_schools.h for the existing NOSCHOOL argument. Removing the adjacent separator
line reduces src/spec_procs.c from 1,892 to 1,860 lines. Both build manifests link the 50-line
owner source. No player or builder helpfile changed because no command, authored-data, or behavior
contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 15 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 31 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_banshee.c |
PASS |
git diff --check |
PASS |
Checkpoint 17 moves the quicksand room callback from src/spec_procs.c to
src/spec/spec_zone_quicksand.c and publishes its callback declaration through
src/spec/spec_zone_quicksand.h. Its 15 direct room assignments remain unchanged in
src/spec_assign.c; no registry definition or authored world binding changed. The assignment
source now includes the owner header directly, while src/spec_procs.h retains the owner include as
a compatibility surface.
This is an ownership-only move. All 40 legacy implementation lines are unchanged, including the
command guard, NPC and pet eligibility, flying, paralysis, and level exemptions, Dexterity roll
comparison, message targets, hold-person affect construction, paralysis bit, three-pulse duration,
affect_join() arguments, and return values. Removing the adjacent separator line reduces
src/spec_procs.c from 1,860 to 1,819 lines. Both build manifests link the 58-line owner source. No
player or builder helpfile changed because no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 16 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 40 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_quicksand.c |
PASS |
git diff --check |
PASS |
Checkpoint 18 moves the kt_kenjin mobile callback and kt_twister room callback from
src/spec_procs.c to src/spec/spec_zone_kenjin_tower.c, with declarations published through
src/spec/spec_zone_kenjin_tower.h. Their direct assignments remain mobile VNUM 132910 and room
VNUMs 132902 through 132905 in src/spec_assign.c; neither callback has a registry definition or
authored world binding. The assignment source includes the owner header directly, while
src/spec_procs.h retains the owner include as a compatibility surface. The unimplemented
kt_shadowmaker declaration and commented assignment remain unchanged.
This is an ownership-only move. All 121 legacy implementation lines are unchanged, including
Kenjin's target selection and three-way effect choice, affect construction, teleport and
mobile-load VNUMs, the twister's exit rotation with its existing mixed 132901/32901 references,
dynamically allocated shadow descriptions, copied level and class values, messages, and return
values. Removing the adjacent separator line reduces src/spec_procs.c from 1,819 to 1,697 lines.
Both build manifests link the 141-line owner source. No player or builder helpfile changed because
no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 17 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 121 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_kenjin_tower.c |
PASS |
git diff --check |
PASS |
Checkpoint 19 moves the hive_death room callback from src/spec_procs.c to
src/spec/spec_zone_hive_of_passion.c, with its declaration published through
src/spec/spec_zone_hive_of_passion.h. Its only direct assignment remains room VNUM 139300 in
src/spec_assign.c; it has no registry definition or authored world binding. The assignment source
includes the owner header directly, while src/spec_procs.h retains the owner include as a
compatibility surface.
This is an ownership-only move. All 26 legacy implementation lines are unchanged, including the
command and null-character guards, death and destination messages, the two-stage moves through room
VNUMs 129500 and 139328, both room-look calls, the dormant corpse comment, and return values.
Removing the adjacent separator line reduces src/spec_procs.c from 1,697 to 1,670 lines. Both
build manifests link the 45-line owner source. No player or builder helpfile changed because no
command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 18 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 26 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_hive_of_passion.c |
PASS |
git diff --check |
PASS |
Checkpoint 20 moves the feybranche mobile callback from src/spec_procs.c to
src/spec/spec_zone_feybranche.c, with its declaration published through
src/spec/spec_zone_feybranche.h. Its only direct assignment remains mobile VNUM 135530 in the
Menzo block of src/spec_assign.c; it has no registry definition or authored world binding. The
assignment source includes the owner header directly, while src/spec_procs.h retains the owner
include as a compatibility surface.
This is an ownership-only move. All 50 legacy implementation lines are unchanged, including the
command and position guards, PROC_FIRED reset and one-shot state, master targeting, shout text and
zone delivery, all six helper-mobile VNUMs, hunt-versus-teleport branch, direct attack, and return
values. The owner explicitly includes the existing spell, combat, world-list, and pathfinding APIs.
Removing the adjacent separator line reduces src/spec_procs.c from 1,670 to 1,619 lines. Both
build manifests link the 70-line owner source. No player or builder helpfile changed because no
command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 19 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 50 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_feybranche.c |
PASS |
git diff --check |
PASS |
Checkpoint 21 moves the abyssal_vortex room callback from src/spec_procs.c to
src/spec/spec_zone_abyssal_vortex.c, with its declaration published through
src/spec/spec_zone_abyssal_vortex.h. Its 51 direct room assignment rows remain VNUMs 139200
through 139250 in src/spec_assign.c, including the historical duplicate 139210 row and absent
139220 row. It has no registry definition or authored world binding. The assignment source includes
the owner header directly, while src/spec_procs.h retains the owner include as a compatibility
surface.
This is an ownership-only move. All 28 legacy implementation lines are unchanged, including the
command and NPC/pet guards, one-in-eight chance, exact six-exit rotation order, room message, and
return values. Removing the adjacent separator line reduces src/spec_procs.c from 1,619 to 1,590
lines. Both build manifests link the 45-line owner source. No player or builder helpfile changed
because no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 20 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 28 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_abyssal_vortex.c |
PASS |
git diff --check |
PASS |
Checkpoint 22 moves the agrachdyrr mobile callback from src/spec_procs.c to
src/spec/spec_zone_agrach_dyrr.c, with its declaration published through
src/spec/spec_zone_agrach_dyrr.h. Its only direct assignment remains mobile VNUM 135518 in the
Menzo block of src/spec_assign.c; it has no registry definition or authored world binding. The
assignment source includes the owner header directly, while src/spec_procs.h retains the owner
include as a compatibility surface.
This is an ownership-only move. All 66 legacy implementation lines are unchanged, including the
command and position guards, PROC_FIRED state, one-in-five follower summon using mobile VNUM
135523, master targeting, shout text and delivery, all six helper-mobile VNUMs, hunt-versus-teleport
branch for mobile VNUM 135522, direct attack, and return values. Removing the adjacent separator
line reduces src/spec_procs.c from 1,590 to 1,523 lines. Both build manifests link the 87-line
owner source. No player or builder helpfile changed because no command, authored-data, or behavior
contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 21 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 66 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_agrach_dyrr.c |
PASS |
git diff --check |
PASS |
Checkpoint 23 moves the shobalar mobile callback from src/spec_procs.c to
src/spec/spec_zone_shobalar.c, with its declaration published through
src/spec/spec_zone_shobalar.h. Its two direct assignments remain mobile VNUMs 135500 and 135504
in the Menzo block of src/spec_assign.c; it has no registry definition or authored world binding.
The assignment source includes the owner header directly, while src/spec_procs.h retains the owner
include as a compatibility surface.
This is an ownership-only move. All 50 legacy implementation lines are unchanged, including the
command and position guards, PROC_FIRED state, master targeting, shout text and delivery, all four
helper-mobile VNUMs, hunt-versus-teleport branch for mobile VNUM 135506, null spell-object argument,
direct attack, and return values. Removing the adjacent separator line reduces src/spec_procs.c
from 1,523 to 1,472 lines. Both build manifests link the 70-line owner source. No player or builder
helpfile changed because no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 22 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 50 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_shobalar.c |
PASS |
git diff --check |
PASS |
Checkpoint 24 moves the ogremoch mobile callback from src/spec_procs.c to
src/spec/spec_zone_earth_plane.c, with its declaration published through
src/spec/spec_zone_earth_plane.h. Its only direct assignment remains mobile VNUM 136702 in
src/spec_assign.c; it has no registry definition or authored world binding. The assignment source
includes the owner header directly, while src/spec_procs.h retains the owner include as a
compatibility surface.
This is an ownership-only move. All 88 legacy implementation lines are unchanged, including the
command and position guards, PROC_FIRED state, descriptor-list broadcast, validated room sweep
from VNUM 136700 through 136802, all seven reinforcement VNUMs, same-room attack, one-in-ten
rock-melt relocation, hunting branch, messages, error log, and return values. The owner explicitly
includes magic/spells.h for the existing hit-type and damage-mode constants. Removing the adjacent
separator line reduces src/spec_procs.c from 1,472 to 1,383 lines. Both build manifests link the
109-line owner source. No player or builder helpfile changed because no command, authored-data, or
behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 23 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 88 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_earth_plane.c |
PASS |
git diff --check |
PASS |
Checkpoint 25 moves the four Air Plane helpers yan_yell, yan_maelstrom, yan_windgust, and
chan_yell plus the yan and chan mobile callbacks from src/spec_procs.c to
src/spec/spec_zone_air_plane.c. Their declarations are published through
src/spec/spec_zone_air_plane.h. The active direct assignment remains mobile VNUM 136105 for
chan; the historical mobile VNUM 136100 yan assignment remains commented. None of the six
members has a registry definition or authored world binding. The assignment source includes the
owner header directly, while src/spec_procs.h retains the owner include as a compatibility
surface.
This is an ownership-only move. All 237 helper lines and 48 callback lines are unchanged, including
descriptor broadcasts, validated reinforcement room range 136100 through 136224, all eight helper
mobile VNUMs, same-room attacks, hunting, damage and affect rules, chances, PROC_FIRED state,
messages, error logs, and return values. Removing the two adjacent separator lines reduces
src/spec_procs.c from 1,383 to 1,096 lines. Both build manifests link the 307-line owner source.
No player or builder helpfile changed because no command, authored-data, or behavior contract
changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 24 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 285 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_air_plane.c |
PASS |
git diff --check |
PASS |
Checkpoint 26 moves the fzoul mobile callback from src/spec_procs.c to
src/spec/spec_zone_zusuk.c, with its declaration published through src/spec/spec_zone_zusuk.h.
Its only direct assignment remains mobile VNUM 100581, whose prototype belongs to the zone-file
range 1005. It has no registry definition or authored world binding. The assignment source includes
the owner header directly, while src/spec_procs.h retains the owner include as a compatibility
surface.
This is an ownership-only move. All 14 legacy implementation lines are unchanged, including the
historical from homeland comment, null guard, exact kneel command match, message, and return
values. Removing the adjacent separator line reduces src/spec_procs.c from 1,096 to 1,081 lines.
Both build manifests link the 30-line owner source. No player or builder helpfile changed because no
command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 25 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 14 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_zusuk.c |
PASS |
git diff --check |
PASS |
Checkpoint 27 moves the shar_heart object callback and shar_statue mobile callback from
src/spec_procs.c to src/spec/spec_zone_orc_ruins.c, with declarations published through
src/spec/spec_zone_orc_ruins.h. Their direct assignments remain object VNUM 106229 and mobile VNUM
106231. Neither callback has a registry definition or authored world binding. The assignment source
includes the owner header directly, while src/spec_procs.h retains the owner include as a
compatibility surface.
This is an ownership-only move. All 80 legacy implementation lines are unchanged, including affect
construction, direct hit-point damage, both summoned mobile VNUMs, follower setup, messages,
chances, PROC_FIRED state, and return values. Removing the adjacent separator line reduces
src/spec_procs.c from 1,081 to 1,000 lines. Both build manifests link the 99-line owner source. No
player or builder helpfile changed because no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 26 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 80 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_orc_ruins.c |
PASS |
git diff --check |
PASS |
Checkpoint 28 moves the illithid_gguard mobile callback from src/spec_procs.c to
src/spec/spec_zone_illithid_enclave.c, with its declaration published through
src/spec/spec_zone_illithid_enclave.h. Its only direct assignment remains mobile VNUM 126928. It
has no registry definition or authored world binding. The assignment source includes the owner
header directly, while src/spec_procs.h retains the owner include as a compatibility surface.
This is an ownership-only move. All 19 legacy implementation lines are unchanged, including the
movement-command guard, east-direction match, messages and targets, dormant race-restriction
comment, and return values. The owner directly includes movement/movement.h for the existing
IS_MOVE macro's do_move dependency. Removing the adjacent separator line reduces
src/spec_procs.c from 1,000 to 980 lines. Both build manifests link the 36-line owner source. No
player or builder helpfile changed because no command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 27 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 19 moved legacy lines | PASS, no content drift |
both build manifests include src/spec/spec_zone_illithid_enclave.c |
PASS |
git diff --check |
PASS |
Checkpoint 29 moves three independent access-control callbacks to their zone owners in one batched checkpoint:
duergar_guardmoves tosrc/spec/spec_zone_kobold_caverns.cand remains assigned to mobile VNUM 114721;bandit_guardmoves tosrc/spec/spec_zone_bandit_castle.cand remains assigned to mobile VNUM 143304; andsecomber_guardmoves tosrc/spec/spec_zone_secomber.cand remains assigned to mobile VNUM 125064.
Each owner publishes a dedicated header. None of the callbacks has a registry definition or
authored world binding. src/spec_assign.c includes each owner header directly, while
src/spec_procs.h retains the owner includes as a compatibility surface.
This is an ownership-only batch. All 59 legacy implementation lines are unchanged, including the
movement-command guards, direction and level checks, messages and targets, and return values. Each
owner directly includes movement/movement.h for the existing IS_MOVE macro's do_move
dependency. Removing the three adjacent separator lines reduces src/spec_procs.c from 980 to 918
lines. Both build manifests link the 35-line Kobold Caverns, 38-line Bandit Castle, and 37-line
Secomber owner sources. No player or builder helpfile changed because no command, authored-data, or
behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 28 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 59 moved legacy lines | PASS, no content drift |
| both build manifests include all three zone owner sources | PASS |
git diff --check |
PASS |
Checkpoint 30 moves six callbacks across four independent zone owners in one batched checkpoint:
harpellmoves tosrc/spec/spec_zone_longsaddle.c; its computed assignment loop remains unchanged;wallachandbeltushmove together tosrc/spec/spec_zone_flaming_tower.cand remain assigned to mobile VNUMs 112600 and 112607;mereshamanandwillowispmove together tosrc/spec/spec_zone_mere_of_dead_men.cand remain assigned to mobile VNUMs 126717, 126707, and 126715; andbattlemaze_guardmoves tosrc/spec/spec_zone_battlemaze.cand remains assigned to mobile VNUM 135603.
Each owner publishes a dedicated header. None of the callbacks has a registry definition or
authored world binding. src/spec_assign.c includes each owner header directly, while
src/spec_procs.h retains the owner includes as a compatibility surface.
This is an ownership-only batch. All 162 legacy implementation lines are unchanged, including the
Harpell reinforcement selection and spell/combat calls, Flaming Tower load-room and mirror logic,
Mere summoning and daylight relocation, Battlemaze movement and level gate, messages, targets,
state writes, and return values. Removing seven separator lines reduces src/spec_procs.c from 918
to 749 lines. Both build manifests link the 74-line Longsaddle, 50-line Flaming Tower, 74-line Mere
of Dead Men, and 37-line Battlemaze owner sources. No player or builder helpfile changed because no
command, authored-data, or behavior contract changed.
| Gate | Result |
|---|---|
| warning-clean Autotools production build | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 29 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 162 moved legacy lines | PASS, no content drift |
| both build manifests include all four zone owner sources | PASS |
git diff --check |
PASS |
Checkpoint 31 moves all remaining compiled callbacks from src/spec_procs.c in one batch:
imixandfp_invokerpublish the Fire Plane API throughsrc/spec/spec_zone_fire_plane.h;olhydrapublishes the Water Plane API throughsrc/spec/spec_zone_water_plane.h;naga_golemandnagapublish the Snake Pit API throughsrc/spec/spec_zone_snake_pit.h; andgromphmoves tosrc/spec/spec_zone_menzoberranzan.cand.h.
Fire Plane, Water Plane, and Snake Pit deliberately share the 272-line
src/spec/spec_zone_alarm_group.c translation unit. This keeps zone_yell() private while retaining
all three consumers and avoids introducing an exported helper symbol merely to satisfy source
organization. Menzoberranzan uses its own 90-line source and keeps gr_stalled private beside
gromph. The alarm-group source also includes the traced movement-position header directly for the
unchanged Water Plane and Snake Pit bodies.
All 310 legacy helper, state, and callback lines compare exactly with the Checkpoint 30 source.
Assignments remain at the same mobile VNUMs, callback names and types are unchanged, and no callback
gains a registry definition or authored binding. src/spec_assign.c includes each zone API directly,
while src/spec_procs.h retains them as compatibility includes.
After the compiled move, the residual legacy file contained no production code: the guild_golem
assignment and implementation were both commented and no definition existed; the commented
guild_guard body duplicated behavior already compiled from src/character/guild_services.c; and
the Emporium block was wholly commented. The audit therefore removes the stale undefined
guild_golem declaration and retires all 749 Checkpoint 30 lines of src/spec_procs.c from both
build manifests. The deletion is source-controlled and recoverable through Git.
| Gate | Result |
|---|---|
| warning-clean Autotools production build after legacy-source retirement | PASS |
make test |
PASS, 574 tests plus all root script gates |
make install |
PASS; bin/circle installed and root circle removed |
independent CMake production and cutest rebuild |
PASS |
CMake ctest --output-on-failure |
PASS, 12/12 tests |
| complete exported global-symbol comparison against Checkpoint 30 | PASS, no symbol added, removed, or retyped |
| exact comparison of all 310 moved legacy helper, state, and callback lines | PASS, no content drift |
both build manifests add both final owner sources and remove src/spec_procs.c |
PASS |
| residual compiled-code and dormant-block ownership audit | PASS |
git diff --check |
PASS |
All 12,212 baseline lines of src/spec_procs.c and all 4,202 baseline lines of
src/zone_procs.c are now retired. General procedures, feature services, shared legacy vessel
behavior, and cohesive zone packages live with their traced owners. Phase 04 may now characterize
and introduce narrow shared mechanics without reopening the Phase 03 ownership audit.