---
mvp: no
subsystem: meta
status: forcing-function
---

# Unknown DnD Action ID Resolution Status (server side)

Per Phase 1 D-11 contract: `extracted/server-5-4/UNKNOWN-ACTIONS.md` is emitted iff at least one drag-and-drop action ID in the server `.gmd` was not resolvable by the LateralGM action library bundle plus Phase 2 plan 02-02's hand-resolved entries.

## Status

**No `extracted/server-5-4/UNKNOWN-ACTIONS.md` exists.** The file was not emitted by the Phase 1 extraction run, which (per the D-11 contract) means **zero unknown action IDs were encountered while transcompiling the server `.gmd`**.

The 136-entry hand-authored action-ID table at `tools/extract-gmd/data/action-ids.json` (extended in Phase 2 plan 02-02 to cover IDs 523 + 525 from the client) covers every DnD action used by the server too. The two sides share GameMaker 5.3a's action-ID space verbatim.

## Verification

Run from repo root:

```sh
ls extracted/server-5-4/UNKNOWN-ACTIONS.md
# Expected: ls: cannot access ...: No such file or directory  (per D-11)

grep -r "UNKNOWN ACTION_ID" extracted/server-5-4/
# Expected: zero matches
```

If either of these surfaces something, **STOP** — the action-ID table has drift from the server `.gmd`'s action-ID set, and Phase 1 extraction needs to re-run. The likely failure mode is a server-only action ID we never noticed because the client doesn't use it.

## Path (b) fallback (NOT used in this phase)

If a future ID arises that cannot be resolved (no LateralGM entry, no `.dnd.json` argument signature), the convention is to mark it **`DEFERRED`** with reason. Phase 7 PAR-01 treats DEFERRED entries as known scope gaps to be revisited at parity time.

The path (b) fallback is intentionally lighter than path (a): it preserves forensic information without forcing a hand-authored interpretation. As of 2026-05-03, no DEFERRED entries exist on the server side.

## Provenance trail

- **Phase 1 extraction** (plan 01-04 server-side) — produced `extracted/server-5-4/` with `MANIFEST.sha256` deterministic, no `UNKNOWN-ACTIONS.md` emission.
- **`tools/extract-gmd/data/action-ids.json`** — the authoritative entry table, extended in Phase 2 plan 02-02 to 136 entries; covers both client and server.
- **Phase 2 plan 02-02-SUMMARY.md** — outcome record for the client-side IDs 523 + 525 resolution that is the same machinery that closed this server-side concern.

## Forcing function

This MD exists so a future re-extraction (e.g. someone discovers a newer server .gmd revision) does NOT silently create an UNKNOWN-ACTIONS.md and have it ignored. Phase 9 verify gate's deterministic-rebuild check confirms `extracted/server-5-4/UNKNOWN-ACTIONS.md` does not appear; if it ever does, the phase fails until the action-ID table is updated and Phase 1 re-run.

## See also

- [./packet-protocol.md](./packet-protocol.md) — the Phase 1 D-15 lock around what the extracted server `.gmd` contains
- [.planning/phases/02-client-engine-documentation/02-02-PLAN.md](../../.planning/phases/02-client-engine-documentation/02-02-PLAN.md) — D-08 path (a) plan
- [.planning/phases/02-client-engine-documentation/02-02-SUMMARY.md](../../.planning/phases/02-client-engine-documentation/02-02-SUMMARY.md) — outcome record (action-ids.json grew 134 → 136)
- [../extracted-engine/unknown-actions-status.md](../extracted-engine/unknown-actions-status.md) — client-side mirror

## Scripts referenced in this subsystem

<!-- AUTOGEN:scripts:start -->
| Script ID | Name | Lines | Used in objects |
|-----------|------|-------|------------------|
<!-- AUTOGEN:scripts:end -->

## Objects referenced in this subsystem

<!-- AUTOGEN:objects:start -->
| Object ID | Name | Sprite | Mask | Events |
|-----------|------|--------|------|--------|
<!-- AUTOGEN:objects:end -->

## Engine functions used

<!-- AUTOGEN:gml-functions:start -->
| GML function | Call sites | Sample script | Wiki link |
|--------------|------------|---------------|-----------|
<!-- AUTOGEN:gml-functions:end -->

(Autogen tables are intentionally empty; this MD is a status doc, not a subsystem narrative.)
