WoW 12.1 PTR — Housing Blueprint inspection macros (codes pre-filled)
=====================================================================
Copy a whole line and paste into chat. All under the 255-char /run limit.
CONFIRMED LIVE: C_HousingBlueprint exists; all function names below are real;
IsShareCodeValid("AVoBm66...") = true. The async event name was the unknown.


############################################################
# STEP 2 — THE MANIFEST (run this! uses YOUR OWN exported code)
############################################################
# Re-arm the listener ONLY if you /reloaded since STEP 1:
/run BP=CreateFrame("Frame");BP:RegisterAllEvents();BP:SetScript("OnEvent",function(_,e,...) if e:find("BLUEPRINT") then print(e);DevTools_Dump({...}) end end)
# Request YOUR OWN blueprint's manifest -> should fire CONTENTS_RECEIVED + full struct:
/run C_HousingBlueprint.RequestBlueprintContents("AVoBySTgabpqRb2zmhskWzfZ6Q==")


# FINDINGS SO FAR (12.1 PTR, live-confirmed):
#  - Foreign code -> HOUSING_BLUEPRINT_CONTENTS_FAILURE (arg1=code, arg2=20). A
#    non-owner CANNOT read a shared code's manifest. (answers open Q #1c)
#  - RequestBlueprintCollection -> HOUSING_BLUEPRINT_COLLECTION_RECEIVED {groups={}}
#  - ExportBlueprint(1,"test") -> HOUSING_BLUEPRINT_EXPORT_SUCCESS = your code
#  - byte1 = 0x5A on BOTH accounts -> not per-account (region-wide or format magic)


############################################################
# STEP 1 — CATCH THE EVENT (the manifest is async; don't guess the event name)
############################################################

# A. Run this ONCE. It installs a listener (BP) that prints + dumps ANY event
#    whose name contains BLUEPRINT, so we catch the real event regardless of name:
/run BP=CreateFrame("Frame");BP:RegisterAllEvents();BP:SetScript("OnEvent",function(_,e,...) if e:find("BLUEPRINT") then print(e);DevTools_Dump({...}) end end)

# B. Now fire requests and watch what prints. Try these in order:
/run C_HousingBlueprint.RequestBlueprintContents("AVoBm66PCj3ZRfqrlMO5eFcSRw==")
/run C_HousingBlueprint.RequestBlueprintContentsForContext("AVoBm66PCj3ZRfqrlMO5eFcSRw==")
/run C_HousingBlueprint.RequestBlueprintCollection()

# C. If NOTHING prints from a foreign code, export YOUR OWN (be at/in your house),
#    watch for the export event + its sharecode, then RequestBlueprintContents on it:
/run C_HousingBlueprint.ExportBlueprint(1,"test")

# When done: /reload   (removes the catch-all listener so it stops firing)


############################################################
# FULL LAYOUT  (AVoBm66PCj3ZRfqrlMO5eFcSRw==)
############################################################

# Contents manifest (the real "blueprint info": recordID + numMissing parts list)
/run local f=CreateFrame("Frame");f:RegisterEvent("HOUSING_BLUEPRINT_CONTENTS_RECEIVED");f:SetScript("OnEvent",function(_,...) DevTools_Dump({...}) end);C_HousingBlueprint.RequestBlueprintContents("AVoBm66PCj3ZRfqrlMO5eFcSRw==")

# Quick synchronous checks
/dump C_HousingBlueprint.GetBlueprintTypeForCode("AVoBm66PCj3ZRfqrlMO5eFcSRw==")
/dump C_HousingBlueprint.IsShareCodeValid("AVoBm66PCj3ZRfqrlMO5eFcSRw==")
/dump C_HousingBlueprint.GetBlueprintHyperlink("AVoBm66PCj3ZRfqrlMO5eFcSRw==")


############################################################
# INTERIOR  (AVoDenm77d6kS16LWnID1lzH9w==)
############################################################

/run local f=CreateFrame("Frame");f:RegisterEvent("HOUSING_BLUEPRINT_CONTENTS_RECEIVED");f:SetScript("OnEvent",function(_,...) DevTools_Dump({...}) end);C_HousingBlueprint.RequestBlueprintContents("AVoDenm77d6kS16LWnID1lzH9w==")
/dump C_HousingBlueprint.GetBlueprintTypeForCode("AVoDenm77d6kS16LWnID1lzH9w==")


############################################################
# EXTERIOR  (AVoEa+MDi9B0ShK0yVxftxLolw==)
############################################################

/run local f=CreateFrame("Frame");f:RegisterEvent("HOUSING_BLUEPRINT_CONTENTS_RECEIVED");f:SetScript("OnEvent",function(_,...) DevTools_Dump({...}) end);C_HousingBlueprint.RequestBlueprintContents("AVoEa+MDi9B0ShK0yVxftxLolw==")
/dump C_HousingBlueprint.GetBlueprintTypeForCode("AVoEa+MDi9B0ShK0yVxftxLolw==")


############################################################
# NO CODE NEEDED
############################################################

# Export YOUR OWN blueprint to get a fresh code (must be at/in your house; 1 = House type)
/run local f=CreateFrame("Frame");f:RegisterEvent("HOUSING_BLUEPRINT_EXPORT_SUCCESS");f:SetScript("OnEvent",function(_,...) DevTools_Dump({...}) end);C_HousingBlueprint.ExportBlueprint(1,"test")

# List your saved blueprints (collection)
/run local f=CreateFrame("Frame");f:RegisterEvent("HOUSING_BLUEPRINT_COLLECTION_RECEIVED");f:SetScript("OnEvent",function(_,...) DevTools_Dump({...}) end);C_HousingBlueprint.RequestBlueprintCollection()


# Note: manifest fetch is a server RPC. Marlamin's codes are from another
# account, so RequestBlueprintContents may not resolve them for you (that's
# open question #1c — whether a non-owner can read a shared code's manifest).
# If they don't resolve, run the EXPORT macro to make your own code and use that.
