Worker w-cvartable-a1; task cvartable2; research (read-only RE). Read .agent-cache/WORKER.md. Bus: python "%USERPROFILE%/.claude/skills/agent-cache-orchestrator/scripts/acbus.py" Parallel: w-texdbkey-a1 reads the same image read-only. Stay in your lane.
Objective
Rebuild the Wolfenstein II cvar catalogue from the unpacked runtime image, the way w-cmdtable-a1 rebuilt the command table today.
This fixes a shipped artifact, not just a research question. docs/stand.md records two admissions about the current data:
docs/cvars_tnc.jsonwith 2231 entries "is too high". The engine itself answerslistCvars - help g_with EIGHT cvars andbot_with "0 cvars listed". Most mined names are not registered cvars at all. The file is a candidate list being presented as a catalogue.- Its descriptions are partly attached to the wrong cvar. Measured example:
com_assertNoDialogis "bypass the popup assert dialog" per the engine, while the file carried another cvar's text.
The loader GUI shows this data to the user. So the deliverable is a catalogue that is true.
Answer:
- The list of actually registered cvars, with flags, default value, type and the engine's own description string where one exists.
- Which of them are locked in retail, derived from the flags - and how that compares to the measured RETAIL_BLOCKED list in wolfsdk/cvars.py.
- A drop-in replacement dataset plus a diff against docs/cvars_tnc.json saying how many of the 2231 are real, how many are phantoms, how many descriptions were misattached.
Sources / starting points
- re_probes/runtime_87400/module.bin - read-only capture of the RUNNING, SteamStub-unpacked NewColossus_x64vk.exe. Virtual RVA layout: file offset == RVA. Sections/base in manifest.json, .pdata for function bounds.
- tools/probe_cmdtable.py is your template, read it first. The cvar system
sits next to the command system in this engine and yields to the same two
attacks: registration call sites in .text, plus a registrar/linked-list walk
in .data, cross-checked against each other. re_probes/agent_reports/cmdtable.md
documents the pattern, including the anchor check that makes the data walk
refuse a wrong offset. Reuse the approach; do not import its files.
Useful adjacent facts from it: the command system object is at RVA 0x4104420,
AddCommandat 0x1264840, and flags are compile-time constants at the call site. - capstone 5.0.7 vendored: PYTHONPATH=re_probes/python_deps python ...
- Ground truth for the positive control - this is the valuable part, use it:
docs/cvars_tnc_echt.json holds the subset that came from the engine itself via
listCvars - help. Anything in there must appear in your table with the same description. docs/cvars-tnc-vergleich.md and docs/cvars_tnc_tabelle.json show the earlier merge attempts and where they went wrong. - wolfsdk/cvars.py (read-only) holds the measured RETAIL_BLOCKED list and the ALWAYS list - both came from real launches, so they are evidence.
- tools/cvar_table.py and tools/mine_cvars_tnc.py are the earlier static attempts against the PACKED exe - read them to see what failed and why, do not extend them.
Ownership
tools/probe_cvartable.py (new), re_probes/cvartable/ (new dir, including the proposed replacement dataset as cvars_tnc_v2.json), and re_probes/agent_reports/cvartable.md (new). Do NOT write docs/cvars_tnc.json or any other docs/ file - propose the replacement in your own directory and let a master merge it.
Forbidden / do not touch
No game launch, no process attach, no writes under the Steam install or "%USERPROFILE%/Saved Games". Do not touch other workers' files: tools/probe_cmdtable.py, tools/probe_idclhash.py, tools/probe_datahash.py, tools/probe_saveverify.py, tools/probe_texdbkey.py, tools/tnc_.py, tools/vtpixel.py, re_probes/{cmdtable,idclhash,datahash,saveverify,texdbkey,vtrest}/, docs/, wolfsdk/*, config.json. No pip install.
Hard constraints
Python 3.11, stdlib plus vendored capstone. Reproducible from the command line, no running game required.
Acceptance criteria
- Every cvar in docs/cvars_tnc_echt.json appears in your table, with a matching description. If one does not, your enumeration is incomplete - say so and fix it rather than shipping a partial list as complete.
- The count must be plausible against the engine's own behaviour: `listCvars
- help g_
returned 8. If your table claims hundreds ofg_` cvars, something is wrong and you must explain it before proceeding.
- help g_
- Cross-check: the call-site scan and the data walk must agree. Report the diff if they do not - the diff is a finding.
- Negative control: a deliberately wrong section base or anchor must make the walk refuse or return nothing, never a plausible-looking table.
- The flag decoding must be checked against the measured locked/working cvars in wolfsdk/cvars.py. If the flags say a cvar is free but a real launch measured it as reset, that contradiction is important - report it, do not smooth it over.
Verification expectations
Every important assurance needs a check that fails if it is false. A string that looks like a cvar name in .rdata is NOT a registered cvar - that mistake is exactly what produced the 2231-entry file. Keep "name present in the binary", "registered at runtime" and "settable in retail" strictly apart.
Failure honesty
If the registration layout does not yield, report the obstacle with offsets. Partial but honest beats complete but invented - the current file is what "complete but invented" looks like and it is the thing being replaced.
Coordination / deliverable
Checkpoint at milestones. Publish a bus fact with the headline count (real vs phantom). Concise German report in re_probes/agent_reports/cvartable.md. Finish the bus task when done.