Skip to content

Research Brief Execcarrier

LopeKinz edited this page Oct 1, 2026 · 2 revisions

Identity

Worker w-execcarrier-a1; task execcarrier; implement. Read .agent-cache/WORKER.md. Bus: python "%USERPROFILE%/.claude/skills/agent-cache-orchestrator/scripts/acbus.py" Parallel: w-savestructure-a1.

Objective

Assemble the smallest mountable DLC that carries one cfile resource, so the resourceExec route can finally be tested in the running game - and make that test cost the user about 60 seconds of clicking, because their time at the PC comes in five-minute windows.

Everything needed is solved and independently re-verified by the master today:

  • wolfsdk/idclwrite.py - container writer. Round-trips BYTE-IDENTICAL on three retail archives (401 KB / 27.8 MB / 97.4 MB), 6/6 negative controls. Recomputes entry +0x50, +0x60, header +0x20 then +0x08, in that order.
  • tools/probe_cfilekey.py - cfile encryptor. 67/67 byte-identical round-trip, 7/7 negative controls. encrypt(plain, name, salt12, iv16, declen).
  • re_probes/cfilekey/wolfsdk_test.cfg.cfile - 96 bytes, plaintext map game/dlc/c02/c2v1_custom\n, resource name wolfsdk_test.cfg, declen=0xFFFFFFFF.

Measured at runtime today, this is what the carrier has to satisfy: resourceExec wolfsdk_test.cfg resolved its argument as cfile:wolfsdk_test.cfg and refused only because it would have had to generate it in a production build. Present it as a real cfile resource in a mounted container and that objection disappears.

Hard requirements from the two reports - do not rediscover these

  • Entry type cfile, compression == 0 (the payload is already encrypted).
  • The resource name is an input to the encryption key. The entry must be named exactly wolfsdk_test.cfg. A different name, different case, or a base/ prefix each fail the HMAC tag - the cfile worker checked all three. If you need another name, re-encrypt with probe_cfilekey.encrypt.
  • The reader takes the ciphertext length as Length() - 32 - Tell(), so any trailing padding inside the resource payload breaks the tag.
  • A new chunk_N.resources gets chunk_N.texdb mounted automatically from the container name (re_probes/agent_reports/texdbkey.md), and MountDatabase checks only the magic. A minimal/empty texdb should therefore be enough for a container that holds no images - verify that claim against the texdb header format rather than assuming it.

Sources

  • re_probes/agent_reports/{idclwriter,cfilekey2,texdbkey,cmdtable}.md
  • The live retail DLCs as the structural model, READ ONLY: /steamapps/common/Wolfenstein.II.The.New.Colossus/dlc/dlc_1..3 (dlcinfo.json, base/packagemapspec.json, base/chunk_NN.resources)
  • dlc/dlc_4 is already installed and has mounted successfully before; it carries the game/dlc/c02/c2v1_custom alias the script will call. Your carrier should be a SEPARATE dlc so the two concerns stay separable - read dlc_4, do not modify it.
  • tools/dlcinfo.py, tools/dlcmod.py (read-only) for the dlcinfo/mapspec format.

Ownership

tools/build_exec_carrier.py (new - builds and verifies the carrier), tools/install_exec_carrier.py (new - installs AND uninstalls, see below), re_probes/execcarrier/ (new dir, the built carrier), and re_probes/agent_reports/execcarrier.md.

wolfsdk/idclwrite.py, tools/probe_cfilekey.py, tools/probe_datahash.py, tools/probe_idclhash.py are READ-ONLY for you: import them, do not edit.

Forbidden / do not touch

Do not install anything into the game folder yourself, and do not launch the game. The installer script you write must not run as a side effect of building - installing is the user's call, in their window, with their hands. No writes to "%USERPROFILE%/Saved Games". Do not modify dlc_4, re_probes/map_alias_v3/, re_probes/idclwriter/, re_probes/custom_save_candidates/, re_probes/cfilekey/, docs/*, config.json, or another worker's tools. No pip install.

Hard constraints

Python 3.11, stdlib only. Reproducible from the command line.

Acceptance criteria

  1. A built carrier under re_probes/execcarrier/ with the full DLC directory shape, containing cfile:wolfsdk_test.cfg byte-identical to re_probes/cfilekey/wolfsdk_test.cfg.cfile.
  2. It passes, run by you and quoted in the report:
    • python tools/probe_datahash.py <carrier chunk> -> n/n
    • python tools/probe_idclhash.py <carrier chunk> -> +0x08 and +0x20 OK
    • python tools/probe_cfilekey.py decrypting the entry straight back OUT of the built container and getting map game/dlc/c02/c2v1_custom\n. That is the end-to-end check that matters: it proves the archive round-trip did not disturb the payload the encryption depends on.
  3. tools/install_exec_carrier.py installs with one command and uninstalls with one command, refuses to overwrite an existing dlc directory, prints exactly what it will touch before touching it, and is a no-op on failure. The uninstall path must be tested by you against a temporary copy - never against the real game folder.
  4. A chunk id and dlc id that provably collide with nothing: enumerate the ids the installed DLCs already use and say which you picked and why.

Verification expectations

Every important assurance needs a check that fails if it is false. In particular, do not assert that the container mounts - nothing offline can show that. Say "structurally valid by these checks, mount unconfirmed". If a minimal texdb turns out NOT to be sufficient, that is a finding, not a setback - report it with the header evidence.

Failure honesty

If the mapspec/dlcinfo format needs a map entry and a pure resource-carrier DLC is not expressible, say so and propose the smallest alternative (e.g. adding the cfile entry to a copy of an existing carrier). Do not ship a bundle you cannot justify.

Deliverable - and the part that matters most

End the report with a five-line runbook the user can follow without reading anything else: the install command, what to click, the one console line to type, what a success looks like, and the uninstall command. Their window is five minutes; every sentence they have to read in it is a sentence too many.

Checkpoint at milestones. Publish a bus fact when the carrier verifies. Concise German report in re_probes/agent_reports/execcarrier.md. Finish the task.

Clone this wiki locally