Wulfram II Reconstruction Progress

Progress metrics for a byte-exact reconstruction of the Wulfram II game client. This site publishes numbers, charts and prose only; the reconstruction itself is not published here.

Snapshot of 2026-10-17 · 268 measured commits since 2026-09-11

First-party game code38.03%
025%50%75%100%
byte-exact 363.9 KiBbehaviour-verified 2.5 KiBnot yet verified 597.0 KiB
Statically linked libraries (separate line)59.1%
025%50%75%100%
exact 174.7 KiBpending, not counted 81.5 KiBunmatched 39.5 KiB
2,449
functions verified
of 4,392 first-party functions
366.4 KiB
verified first-party code
of 963.3 KiB
39.59%
first-party, library rows excluded
366.4 KiB of 925.5 KiB
559.1 KiB
first-party code still to do
library rows excluded; see "What's left"

Progress over time

From 0.27% on 2026-09-11 to 38.03% now. The shaded area is verified code; the dashed line is the whole first-party target, which moves a little as the inventory is corrected.

05001000Sep 11Sep 18Sep 25Oct 2Oct 9Oct 16597 KiBnot yet verifiedtarget 963 KiB366 KiB verifiedKiB of first-party code2026-09-11: 10,687 of 985,590 bytes verified (1.08%)2026-09-12: 28,599 of 985,590 bytes verified (2.90%)2026-09-13: 33,738 of 985,590 bytes verified (3.42%)2026-09-17: 36,146 of 985,590 bytes verified (3.67%)2026-09-18: 42,623 of 985,590 bytes verified (4.33%)2026-09-19: 50,305 of 985,590 bytes verified (5.10%)2026-09-20: 51,457 of 985,590 bytes verified (5.22%)2026-09-21: 53,477 of 985,590 bytes verified (5.43%)2026-09-22: 55,130 of 985,590 bytes verified (5.59%)2026-09-23: 69,350 of 985,590 bytes verified (7.04%)2026-09-24: 88,303 of 985,590 bytes verified (8.96%)2026-09-25: 107,970 of 985,590 bytes verified (10.96%)2026-09-26: 130,075 of 985,451 bytes verified (13.20%)2026-09-27: 140,713 of 985,451 bytes verified (14.28%)2026-09-28: 156,548 of 985,451 bytes verified (15.89%)2026-09-29: 161,582 of 985,451 bytes verified (16.40%)2026-09-30: 172,877 of 985,451 bytes verified (17.54%)2026-10-01: 187,239 of 986,469 bytes verified (18.98%)2026-10-02: 187,738 of 986,469 bytes verified (19.03%)2026-10-04: 190,014 of 986,454 bytes verified (19.26%)2026-10-05: 192,797 of 986,454 bytes verified (19.54%)2026-10-07: 211,276 of 986,454 bytes verified (21.42%)2026-10-08: 254,510 of 986,454 bytes verified (25.80%)2026-10-09: 312,374 of 986,454 bytes verified (31.67%)2026-10-10: 346,317 of 986,454 bytes verified (35.11%)2026-10-11: 348,097 of 986,454 bytes verified (35.29%)2026-10-13: 361,188 of 986,454 bytes verified (36.62%)2026-10-14: 366,600 of 986,454 bytes verified (37.16%)2026-10-15: 372,364 of 986,454 bytes verified (37.75%)2026-10-16: 374,097 of 986,454 bytes verified (37.92%)2026-10-17: 375,172 of 986,454 bytes verified (38.03%)
Burn-up of verified first-party bytes. Hover a day for its totals. The gap to the dashed line includes 37.9 KiB of rows since found to be library code; "What's left" below counts without them.
01,0002,000Sep 11Sep 18Sep 25Oct 2Oct 9Oct 162,449 functions2,449functions verified
Cumulative functions verified.
0204060Sep 11Sep 18Sep 25Oct 2Oct 9Oct 16KiB added per day (net)2026-09-11: +10,687 bytes (total 10,687)2026-09-12: +17,912 bytes (total 28,599)2026-09-13: +5,139 bytes (total 33,738)2026-09-17: +2,408 bytes (total 36,146)2026-09-18: +6,477 bytes (total 42,623)2026-09-19: +7,682 bytes (total 50,305)2026-09-20: +1,152 bytes (total 51,457)2026-09-21: +2,020 bytes (total 53,477)2026-09-22: +1,653 bytes (total 55,130)2026-09-23: +14,220 bytes (total 69,350)2026-09-24: +18,953 bytes (total 88,303)2026-09-25: +19,667 bytes (total 107,970)2026-09-26: +22,105 bytes (total 130,075)2026-09-27: +10,638 bytes (total 140,713)2026-09-28: +15,835 bytes (total 156,548)2026-09-29: +5,034 bytes (total 161,582)2026-09-30: +11,295 bytes (total 172,877)2026-10-01: +14,362 bytes (total 187,239)2026-10-02: +499 bytes (total 187,738)2026-10-04: +2,276 bytes (total 190,014)2026-10-05: +2,783 bytes (total 192,797)2026-10-07: +18,479 bytes (total 211,276)2026-10-08: +43,234 bytes (total 254,510)2026-10-09: +57,864 bytes (total 312,374)2026-10-10: +33,943 bytes (total 346,317)2026-10-11: +1,780 bytes (total 348,097)2026-10-13: +13,091 bytes (total 361,188)2026-10-14: +5,412 bytes (total 366,600)2026-10-15: +5,764 bytes (total 372,364)2026-10-16: +1,733 bytes (total 374,097)2026-10-17: +1,075 bytes (total 375,172)
Net bytes verified per day. Grey bars are days when re-checks removed more than was added.

Where the verified code is

Each box is a feature area, sized by how much code it holds and shaded by how much of it is verified.

verified:under 10%10-20%20-30%30-45%45% and upview.hud: 23.6% verified (16,441 of 69,726 bytes)view.hud24%gfx.backend: 64.1% verified (42,832 of 66,828 bytes)gfx.backend64%view.screens: 30.8% verified (18,018 of 58,444 bytes)view.screens31%tools.editors: 24.6% verified (14,248 of 57,988 bytes)tools.editors25%core.debug: 42.0% verified (24,010 of 57,121 bytes)core.debug42%sim.world: 33.2% verified (18,704 of 56,378 bytes)sim.world33%gfx.raster: 25.5% verified (14,232 of 55,913 bytes)gfx.raster25%ui.widgets: 28.2% verified (15,750 of 55,790 bytes)ui.widgets28%sim.physics: 49.8% verified (19,332 of 38,806 bytes)sim.physics50%view.tactical: 12.8% verified (4,935 of 38,434 bytes)view.tactical13%sim.collision: 40.9% verified (15,715 of 38,411 bytes)sim.collision41%social: 24.2% verified (8,581 of 35,515 bytes)social24%view.fx: 7.4% verified (2,283 of 30,657 bytes)view.fx7%core.concurrency: 7.1% verified (2,044 of 28,893 bytes)core.concur…7%sim.entities: 50.8% verified (14,567 of 28,700 bytes)sim.entities51%app.bootstrap: 60.2% verified (16,599 of 27,558 bytes)app.bootstr…60%gfx.texture: 33.5% verified (8,037 of 23,996 bytes)gfx.texture33%net.replication: 39.4% verified (8,003 of 20,317 bytes)net.repli…39%core.io: 34.9% verified (6,963 of 19,930 bytes)core.io35%services.updater: 57.0% verified (11,233 of 19,712 bytes)services.…57%net.protocol: 69.3% verified (12,610 of 18,207 bytes)net.proto…69%math.kernel: 75.1% verified (11,743 of 15,641 bytes)math.ke…75%assets.formats: 65.2% verified (9,966 of 15,278 bytes)assets.…65%net.session: 66.4% verified (9,302 of 14,005 bytes)net.se…66%input.devices: 57.7% verified (7,633 of 13,219 bytes)input…58%net.transport: 73.8% verified (9,230 of 12,514 bytes)net.t…74%core.runtime: 74.8% verified (8,988 of 12,024 bytes)core.run…75%session.lifecycle: 32.6% verified (3,776 of 11,580 bytes)session.…33%input.bindings: 20.7% verified (1,636 of 7,899 bytes)inpu…21%platform.window: 92.2% verified (6,842 of 7,418 bytes)plat…92%audio.runtime: 66.3% verified (4,412 of 6,656 bytes)audi…66%view.camera: 12.1% verified (778 of 6,436 bytes)view…12%view.comms: 20.4% verified (1,072 of 5,244 bytes)audio.backend: 38.6% verified (2,012 of 5,212 bytes)crypto.hash: 7.4% verified (220 of 2,992 bytes)sim.clock: 79.4% verified (2,257 of 2,843 bytes)third-party.bzip2: 99.4% verified (168 of 169 bytes)
Feature areas. Hover a box for exact figures; small areas are unlabelled but listed in the table.
Table: feature areas
areaverified %verified bytesarea bytes
third-party.bzip299.4%168169
platform.window92.2%6,8427,418
sim.clock79.4%2,2572,843
math.kernel75.1%11,74315,641
core.runtime74.8%8,98812,024
net.transport73.8%9,23012,514
net.protocol69.3%12,61018,207
net.session66.4%9,30214,005
audio.runtime66.3%4,4126,656
assets.formats65.2%9,96615,278
gfx.backend64.1%42,83266,828
app.bootstrap60.2%16,59927,558
input.devices57.7%7,63313,219
services.updater57.0%11,23319,712
sim.entities50.8%14,56728,700
sim.physics49.8%19,33238,806
core.debug42.0%24,01057,121
sim.collision40.9%15,71538,411
net.replication39.4%8,00320,317
audio.backend38.6%2,0125,212
core.io34.9%6,96319,930
gfx.texture33.5%8,03723,996
sim.world33.2%18,70456,378
session.lifecycle32.6%3,77611,580
view.screens30.8%18,01858,444
ui.widgets28.2%15,75055,790
gfx.raster25.5%14,23255,913
tools.editors24.6%14,24857,988
social24.2%8,58135,515
view.hud23.6%16,44169,726
input.bindings20.7%1,6367,899
view.comms20.4%1,0725,244
view.tactical12.8%4,93538,434
view.camera12.1%7786,436
view.fx7.4%2,28330,657
crypto.hash7.4%2202,992
core.concurrency7.1%2,04428,893

What's left

The 559.1 KiB of first-party code not yet verified, grouped by what is blocking it. Buckets come from the dependency census of 2026-10-04, minus everything verified since, so they only shrink between census refreshes.

Plain singles96.4 KiB 17%
Functions that can each be rebuilt on their own. The most direct remaining work.
Closed clusters84.9 KiB 15%
Small groups the optimiser bound together. Each group is rebuilt as one unit.
Frame / alignment classes54.9 KiB 10%
Code whose stack layout depends on its neighbours, so neighbours are compiled together.
Interlinked code319.1 KiB 57% in all · waits on 240 hubs
Groups of functions that share calling conventions the compiler chose for the whole program, so they are unlocked hub by hub: once a shared helper (a hub) is rebuilt, the code that calls it can follow. Shown by feature area, with how much is done since the census and how many hubs each area's code still waits on.
HUD & targeting34.6 KiB · 6% done · 41 hubs
In-game editors29.4 KiB · 6% done · 62 hubs
Map & tactical view25.1 KiB · 1% done · 38 hubs
3D rendering & camera23.9 KiB · 12% done · 43 hubs
Visual effects23.8 KiB · <1% done · 37 hubs
World, entities & game data22.7 KiB · 7% done · 42 hubs
Game screens & states21.7 KiB · 7% done · 51 hubs
UI widgets & menus21.5 KiB · 6% done · 51 hubs
Social, chat & lobby20.2 KiB · <1% done · 22 hubs
Networking11.1 KiB · 2% done · 15 hubs
Debug tools & console10.2 KiB · 4% done · 12 hubs
Textures & images8.5 KiB · 24% done · 15 hubs
Startup & config8.1 KiB · 4% done · 10 hubs
Input & controls6.7 KiB · 7% done · 22 hubs
Audio & voice3.2 KiB · 55% done · 4 hubs
Graphics drivers (DirectX/GDI)2.6 KiB · 6% done · 4 hubs
Core runtime & platform2.2 KiB · 18% done · 10 hubs
Unattributed (no TU yet)2.1 KiB · 7 hubs
Physics & collision0.5 KiB · 13% done
Updater (CSN)0.3 KiB
Loosened since the census40.8 KiB
Policy-held3.9 KiB 1%
Waiting on a process decision, not on difficulty.

Why the interlinked code is split by area: it used to appear here as one very large block, which hid where the work is and how it moves. It is really many groups, each unlocked once a handful of shared helpers (hubs) are rebuilt, so each line names the feature area the code belongs to, matching the rows of the map below. The lines add up to the interlinked total exactly. "Done" is the share of the area's interlinked code at census time that has been verified since; "hubs" is how many distinct hubs that code still waits on, and one hub can serve several areas. "Loosened since the census" is code that no longer waits on any hub and will move to another bucket at the next census. The groups as the compiler tied them are in the deep dive further down.

Table and full definitions
bucketbytessharedone since censushubs
Plain singles98,68817.2%
Closed clusters86,93515.2%
Frame / alignment classes56,2019.8%
Interlinked code326,73257.1%
HUD & targeting35,4006.2%5.7%41
In-game editors30,1225.3%6.0%62
Map & tactical view25,7084.5%1.4%38
3D rendering & camera24,4494.3%12.1%43
Visual effects24,3684.3%0.9%37
World, entities & game data23,2514.1%7.1%42
Game screens & states22,2663.9%7.2%51
UI widgets & menus21,9853.8%5.9%51
Social, chat & lobby20,6863.6%0.9%22
Networking11,3802.0%1.7%15
Debug tools & console10,4201.8%3.6%12
Textures & images8,6591.5%24.1%15
Startup & config8,3281.4%3.7%10
Input & controls6,8521.2%6.7%22
Audio & voice3,2610.6%55.4%4
Graphics drivers (DirectX/GDI)2,6860.5%5.9%4
Core runtime & platform2,2230.4%18.2%10
Unattributed (no TU yet)2,1320.4%7
Physics & collision5160.1%12.7%
Updater (CSN)2720.1%
Loosened since the census41,7687.3%
Policy-held3,9650.7%
Plain singles
functions with a standard calling convention, no register inputs from callers and no compiler frame-alignment demand; each can be attempted on its own. Includes single-function units the census put on the plain-single track, the census single-candidate list (split into 'worth a singles wave' and the rest), and a residual of first-party bytes that the census did not place in any unit (large, x87-heavy, complex exception handling or otherwise outside its filters).
Closed clusters
groups of functions that whole-program optimisation tied together through custom register conventions, whose closure is complete (every member's callers are inside the group). Grouped by size class: number of members and bytes.
Frame / alignment classes
single functions or groups whose stack-frame shape (8- or 64-byte realignment, padding slots) depends on callers or callees; reproducing them needs the right neighbours compiled together. Includes groups whose frame chain went beyond the census pull limit.
Interlinked code
functions that call each other through calling conventions the compiler chose privately across the whole program, so a function can only be rebuilt once the shared helpers (hubs) it depends on are rebuilt and published. In the census these chain into one very large connected group of over a thousand functions; here it is split by feature area. Each subsection gives its bytes, the share of its census-time code verified since the census, and how many distinct hubs its code still waits on (a hub can serve several areas, so subsection hub counts overlap). 'Loosened since the census' is code the current work map no longer finds in the tangle because hubs it depended on were verified; it moves to another bucket at the next census refresh.
Policy-held
work that is held by a process rule rather than by difficulty: units reserved for another work lane, units that need an ownership ruling on a calling-convention contradiction, and results that are proven but not countable under the current counting rules.

Library code is measured on its own line: 174.7 KiB exact, 81.5 KiB pending.

Where the remaining work is

All 604.4 KiB of unverified target code (1,982 functions; this includes the 38.1 KiB of rows found to be library code that "What's left" leaves out), placed on two axes: the feature area it belongs to, and the structural kind of problem it is. A darker cell holds more code. Hover a cell for exact figures. The map was computed on 2026-10-14, when 365,153 bytes were verified; functions verified since then are still in it until the map is refreshed.

Stand-aloneSmall groups(plain build)Stack-layoutgroupsInterlinked(hub-blocked)LibrarycodeTinystubsTotalKiBWorld, entities & game dataWorld, entities & game data, Stand-alone functions: 19,727 bytes in 54 functions19World, entities & game data, Small groups (plain build): 2,102 bytes in 5 functions2World, entities & game data, Stack-layout groups: 7,467 bytes in 18 functions7World, entities & game data, Interlinked (hub-blocked): 24,476 bytes in 88 functions24·World, entities & game data, Tiny stubs and data: 18 bytes in 3 functions<153HUD & targetingHUD & targeting, Stand-alone functions: 10,381 bytes in 34 functions10·HUD & targeting, Stack-layout groups: 7,269 bytes in 18 functions7HUD & targeting, Interlinked (hub-blocked): 35,400 bytes in 84 functions35··52Core runtime & platformCore runtime & platform, Stand-alone functions: 8,754 bytes in 40 functions9Core runtime & platform, Small groups (plain build): 1,174 bytes in 5 functions1Core runtime & platform, Stack-layout groups: 949 bytes in 8 functions<1Core runtime & platform, Interlinked (hub-blocked): 2,424 bytes in 20 functions2Core runtime & platform, Library code counted as game code: 36,529 bytes in 77 functions36Core runtime & platform, Tiny stubs and data: 82 bytes in 9 functions<1493D rendering & camera3D rendering & camera, Stand-alone functions: 8,727 bytes in 22 functions9·3D rendering & camera, Stack-layout groups: 16,105 bytes in 40 functions163D rendering & camera, Interlinked (hub-blocked): 24,609 bytes in 94 functions24··48Physics & collisionPhysics & collision, Stand-alone functions: 23,022 bytes in 61 functions22Physics & collision, Small groups (plain build): 12,686 bytes in 26 functions12Physics & collision, Stack-layout groups: 6,094 bytes in 22 functions6Physics & collision, Interlinked (hub-blocked): 516 bytes in 2 functions<1·Physics & collision, Tiny stubs and data: 10 bytes in 2 functions<141In-game editorsIn-game editors, Stand-alone functions: 6,405 bytes in 31 functions6·In-game editors, Stack-layout groups: 5,470 bytes in 21 functions5In-game editors, Interlinked (hub-blocked): 30,339 bytes in 96 functions30·In-game editors, Tiny stubs and data: 5 bytes in 1 functions<141Game screens & statesGame screens & states, Stand-alone functions: 7,051 bytes in 40 functions7·Game screens & states, Stack-layout groups: 11,320 bytes in 28 functions11Game screens & states, Interlinked (hub-blocked): 23,082 bytes in 70 functions23·Game screens & states, Tiny stubs and data: 19 bytes in 3 functions<140UI widgets & menusUI widgets & menus, Stand-alone functions: 2,678 bytes in 13 functions3·UI widgets & menus, Stack-layout groups: 9,825 bytes in 46 functions10UI widgets & menus, Interlinked (hub-blocked): 24,334 bytes in 110 functions24·UI widgets & menus, Tiny stubs and data: 33 bytes in 4 functions<136Debug tools & consoleDebug tools & console, Stand-alone functions: 9,145 bytes in 19 functions9Debug tools & console, Small groups (plain build): 857 bytes in 2 functions<1Debug tools & console, Stack-layout groups: 2,345 bytes in 8 functions2Debug tools & console, Interlinked (hub-blocked): 20,329 bytes in 42 functions20·Debug tools & console, Tiny stubs and data: 9 bytes in 2 functions<132Map & tactical viewMap & tactical view, Stand-alone functions: 4,035 bytes in 14 functions4·Map & tactical view, Stack-layout groups: 1,769 bytes in 3 functions2Map & tactical view, Interlinked (hub-blocked): 25,708 bytes in 77 functions25··31Social, chat & lobbySocial, chat & lobby, Stand-alone functions: 5,737 bytes in 19 functions6·Social, chat & lobby, Stack-layout groups: 4,609 bytes in 13 functions5Social, chat & lobby, Interlinked (hub-blocked): 21,845 bytes in 36 functions21·Social, chat & lobby, Tiny stubs and data: 8 bytes in 1 functions<131Visual effectsVisual effects, Stand-alone functions: 2,290 bytes in 6 functions2·Visual effects, Stack-layout groups: 787 bytes in 2 functions<1Visual effects, Interlinked (hub-blocked): 24,775 bytes in 84 functions24··27NetworkingNetworking, Stand-alone functions: 13,894 bytes in 50 functions14Networking, Small groups (plain build): 491 bytes in 4 functions<1Networking, Stack-layout groups: 176 bytes in 1 functions<1Networking, Interlinked (hub-blocked): 11,380 bytes in 37 functions11·Networking, Tiny stubs and data: 48 bytes in 9 functions<125Graphics drivers (DirectX/GDI)Graphics drivers (DirectX/GDI), Stand-alone functions: 11,152 bytes in 28 functions11·Graphics drivers (DirectX/GDI), Stack-layout groups: 7,755 bytes in 26 functions8Graphics drivers (DirectX/GDI), Interlinked (hub-blocked): 3,334 bytes in 10 functions3Graphics drivers (DirectX/GDI), Library code counted as game code: 1,546 bytes in 3 functions2Graphics drivers (DirectX/GDI), Tiny stubs and data: 36 bytes in 4 functions<123Textures & imagesTextures & images, Stand-alone functions: 1,153 bytes in 4 functions1·Textures & images, Stack-layout groups: 3,812 bytes in 15 functions4Textures & images, Interlinked (hub-blocked): 10,547 bytes in 44 functions10·Textures & images, Tiny stubs and data: 5 bytes in 1 functions<115Startup & configStartup & config, Stand-alone functions: 1,728 bytes in 8 functions2·Startup & config, Stack-layout groups: 400 bytes in 2 functions<1Startup & config, Interlinked (hub-blocked): 11,163 bytes in 19 functions11·Startup & config, Tiny stubs and data: 25 bytes in 2 functions<113Input & controlsInput & controls, Stand-alone functions: 3,226 bytes in 15 functions3·Input & controls, Stack-layout groups: 1,631 bytes in 6 functions2Input & controls, Interlinked (hub-blocked): 7,288 bytes in 40 functions7··12Updater (CSN)Updater (CSN), Stand-alone functions: 7,299 bytes in 13 functions7··Updater (CSN), Interlinked (hub-blocked): 272 bytes in 1 functions<1Updater (CSN), Library code counted as game code: 953 bytes in 7 functions<1Updater (CSN), Tiny stubs and data: 16 bytes in 3 functions<18Audio & voiceAudio & voice, Stand-alone functions: 382 bytes in 4 functions<1·Audio & voice, Stack-layout groups: 1,258 bytes in 7 functions1Audio & voice, Interlinked (hub-blocked): 3,488 bytes in 18 functions3·Audio & voice, Tiny stubs and data: 3 bytes in 1 functions<15Unattributed (no TU yet)··Unattributed (no TU yet), Stack-layout groups: 870 bytes in 3 functions<1Unattributed (no TU yet), Interlinked (hub-blocked): 2,132 bytes in 6 functions2··3KiB per cell:under 11-55-1010-2020+
Rows are feature areas, columns are kinds. The "interlinked" column is the code that waits on shared helpers, shown inside the area each function belongs to; the "stand-alone" column is the most direct porting work.

How ready it is

Ready to attempt now191.3 KiB 32%
An admissible path exists under today's rules; it is porting work.
Stuck on a known compiler quirk44.7 KiB 7%
Close attempts stall on a named compiler choice (register allocation, instruction order, floating-point stack order, stack-slot order, exception-handling state).
Waiting on a shared helper296.7 KiB 49% in all
Needs a heavily shared helper function (a hub) rebuilt first. Almost all of it is interlinked code, broken down by area below.
HUD & targeting34.5 KiB · 41 hubs
In-game editors28.2 KiB · 59 hubs
Map & tactical view25.1 KiB · 38 hubs
3D rendering & camera24.0 KiB · 43 hubs
Visual effects24.0 KiB · 38 hubs
World, entities & game data23.8 KiB · 42 hubs
UI widgets & menus22.9 KiB · 55 hubs
Social, chat & lobby21.3 KiB · 23 hubs
Game screens & states20.9 KiB · 54 hubs
Debug tools & console19.9 KiB · 17 hubs
Networking11.1 KiB · 15 hubs
Startup & config10.7 KiB · 9 hubs
Textures & images10.3 KiB · 18 hubs
Input & controls7.0 KiB · 22 hubs
Graphics drivers (DirectX/GDI)3.3 KiB · 4 hubs
Audio & voice3.2 KiB · 4 hubs
Core runtime & platform2.4 KiB · 11 hubs
Unattributed (no TU yet)2.1 KiB · 7 hubs
Updater (CSN)0.3 KiB
Physics & collision0.2 KiB
Groups tied to unmatched library code1.4 KiB
Waiting on a rule decision71.7 KiB 12%
Held by a counting or process decision, not by difficulty; much of it already matches in drafts.

Compiler quirks behind the stuck code: floating-point stack order 14.4 KiB, register allocation 10.9 KiB, stack-slot order 9.5 KiB, instruction order 7.3 KiB, exception-handling state 2.2 KiB, other 0.4 KiB. Rule decisions: 38.1 KiB is library code counted as game code, 33.6 KiB other process decisions. 103.2 KiB has never been attempted by a porting wave (much of it was drafted automatically). 5.8 KiB already matches in the provisional draft link, which is not counted. Hub counts overlap between areas, because one hub can serve several.

Interlinked code: how it's being unlocked

The interlinked code is 978 functions (300.2 KiB) that pass values to each other in registers the compiler picked for the whole program, rather than in the standard way. A function can only be rebuilt once the shared helpers it calls, its hubs, are rebuilt with the same conventions, so the work goes hub by hub. There are 254 hubs in all. 372 functions (149.3 KiB) form a tightly meshed centre that no single hub cuts apart; the rest hangs off it, one hub away.

A standard community-detection method splits the interlinked code into the groups below. Each group is named after the feature area that holds most of its code, with letters when an area has several.

Social, chat & lobby A: 98 functions, 47,011 bytes, 70% in the core, 24 hubs insideSocial, chat & lobby A46 KiBWorld, entities & game data A: 64 functions, 23,524 bytes, 41% in the core, 14 hubs insideWorld, entities & game…23 KiBStartup & config: 65 functions, 22,109 bytes, 37% in the core, 11 hubs insideStartup & config22 KiBIn-game editors A: 59 functions, 19,074 bytes, 31% in the core, 12 hubs insideIn-game editors A19 KiBMap & tactical view A: 51 functions, 17,495 bytes, 49% in the core, 16 hubs insideMap & tactical vie…17 KiBVisual effects A: 57 functions, 16,980 bytes, 47% in the core, 18 hubs insideVisual effect…17 KiBHUD & targeting A: 45 functions, 14,878 bytes, 47% in the core, 8 hubs insideHUD & targeti…15 KiBIn-game editors B: 48 functions, 13,473 bytes, 54% in the core, 17 hubs insideIn-game edito…13 KiB3D rendering & camera A: 47 functions, 13,445 bytes, 53% in the core, 16 hubs inside3D rendering …13 KiBIn-game editors C: 53 functions, 13,389 bytes, 38% in the core, 17 hubs insideIn-game edito…13 KiBDebug tools & console: 32 functions, 12,585 bytes, 0% in the core, 9 hubs insideDebug tools & c…12 KiBGame screens & states A: 26 functions, 11,522 bytes, 65% in the core, 6 hubs insideGame screens …11 KiBNetworking: 39 functions, 10,265 bytes, 23% in the core, 13 hubs insideNetworking10 KiBWorld, entities & game data B: 33 functions, 9,946 bytes, 0% in the core, 10 hubs insideWorld, entiti…10 KiBVisual effects B: 24 functions, 8,477 bytes, 0% in the core, 6 hubs insideVisual ef…8 KiBGame screens & states B: 28 functions, 8,333 bytes, 25% in the core, 7 hubs insideGame scre…8 KiBMap & tactical view B: 26 functions, 7,958 bytes, 15% in the core, 4 hubs insideMap & tac…8 KiBSocial, chat & lobby B: 36 functions, 6,810 bytes, 17% in the core, 7 hubs insideSocial, c…7 KiBAudio & voice: 23 functions, 5,509 bytes, 26% in the core, 6 hubs insideAudio & v…5 KiB3D rendering & camera B: 21 functions, 5,304 bytes, 67% in the core, 6 hubs inside3D renderin…5 KiBVisual effects C: 18 functions, 4,132 bytes, 67% in the core, 6 hubs insideVisual e…4 KiBHUD & targeting B: 22 functions, 3,644 bytes, 41% in the core, 4 hubs insideHUD & t…4 KiBTextures & images: 11 functions, 2,466 bytes, 0% in the core, 4 hubs insideTexture…2 KiBMap & tactical view C: 16 functions, 2,207 bytes, 31% in the core, 5 hubs insideIn-game editors D: 11 functions, 2,039 bytes, 0% in the core, 4 hubs insideUI widgets & menus A: 8 functions, 1,924 bytes, 0% in the core, 0 hubs insideUI widgets & menus B: 8 functions, 1,863 bytes, 0% in the core, 3 hubs insideGame screens & states C: 8 functions, 1,047 bytes, 25% in the core, 1 hubs insidemostly coresome coremostly fringe
Each box is a group, sized by bytes and shaded by how much of it sits in the meshed centre. Groups in light shades come loose as soon as the few hubs on their edge are rebuilt.

Groups

groupfunctionsbyteshubs insidehubs waited on
Social, chat & lobby A9847,0112431
World, entities & game data A6423,5241416
Startup & config6522,1091113
In-game editors A5919,0741215
Map & tactical view A5117,4951620
Visual effects A5716,9801819
HUD & targeting A4514,87888
In-game editors B4813,4731720
3D rendering & camera A4713,4451616
In-game editors C5313,3891719
Debug tools & console3212,58599
Game screens & states A2611,52269
Networking3910,2651315
World, entities & game data B339,9461010
Visual effects B248,47767
Game screens & states B288,33378
Map & tactical view B267,95845
Social, chat & lobby B366,81077
Audio & voice235,50967
3D rendering & camera B215,30469
Visual effects C184,13267
HUD & targeting B223,64445
Textures & images112,46644
Map & tactical view C162,20755
In-game editors D112,03944
UI widgets & menus A81,92400
UI widgets & menus B81,86333
Game screens & states C81,04711

Where the hubs are

areahubshub bytes
UI widgets & menus448,636
Visual effects339,087
3D rendering & camera307,266
World, entities & game data287,348
In-game editors173,125
HUD & targeting155,132
Map & tactical view133,234
Input & controls122,010
Textures & images112,767
Debug tools & console114,910
Game screens & states102,750
Social, chat & lobby71,783
Core runtime & platform7878
Networking51,129
Graphics drivers (DirectX/GDI)41,336
Audio & voice4978
Unattributed (no TU yet)2309
Startup & config189

Hubs are counted by the area they belong to, not named.

Kinds and definitions
Stand-alone functions
Ordinary functions that can each be rebuilt on their own.
Small groups (plain build)
Small groups outside the whole-program-optimised part of the game, tied by private calling conventions inside one source file.
Small optimiser-bound groups
Up to 8 functions the whole-program optimiser bound together; rebuilt as one unit.
Large optimiser-bound groups
9 to 99 functions bound together; rebuilt as one unit.
Stack-layout groups
Functions whose stack layout depends on their callers or callees, so neighbours are compiled together.
Interlinked (hub-blocked)
Functions tied to each other through compiler-chosen calling conventions; each waits on the shared helpers (hubs) it calls, and is unlocked hub by hub.
Library code counted as game code
Rows in the game's own count that turned out to be statically linked library code.
Tiny stubs and data
Jump stubs, tiny bodies and data-like rows.
Hub
a function in the interlinked code that takes register inputs and is called from two or more other interlinked functions. Hubs are counted, never named.
Hubs waited on
the number of distinct hubs a group's functions are or call directly. A hub can serve several groups or areas, so these counts overlap.

areas, kinds, readiness and communities are computed mechanically but rest on heuristics (area roll-up, core/fringe split, plateau classes, transcribed holds); treat them as a map, not a ledger.

How we count, and the exceptions

Every byte counted in the byte-exact tier is identical to the original. That is 372,653 bytes in 2,423 functions. Each one, recompiled with the period compiler (Microsoft Visual C++ 2005) and the original flags, gives exactly the original machine code. Every address reference agrees with the original, and a deliberate mutation of the source is shown to break the match.

The campaign headline is that tier plus 2,519 bytes (26 functions) verified by behaviour on a lower proof tier, 375,172 bytes in all. The flags below describe how a unit was admitted or attributed, meaning which evidence rules it relied on. Apart from the behaviour-verified row, they are not about bytes that fail to match. Each flag is listed so it can be revisited, and most are expected to be temporary.

CategoryBytes% of countedMatchNaturePlan / status
Shared-context rule (provisional)9,054
54 fn
2.41% of countedidenticalByte-identical. These functions sit in multi-function units whose only outside helpers are functions that were already verified; those helpers ride along unchanged as shared build context and are not counted a second time. The open question is the admission rule, not the bytes.Gate rule under review. If it is tightened, the whole block can be taken out of the count in one step.
Behaviour-verified (lower tier)2,519
26 fn
0.67% of countedbehaviour onlyNot yet byte-proven. Each function was run side by side with the original on recorded inputs and gave the same results, with a control that is able to fail. Counted in the campaign figure on a lower proof tier; not part of the byte-exact tier.Expected to be temporary: these are meant to be replaced by byte-exact versions as their units are rebuilt.
Chosen local-variable names1,955
6 fn
0.52% of countedidenticalByte-identical. The period compiler orders some stack slots by the spelling of local variable names. Where no evidence names the original variable, a name was chosen that reproduces the layout.Evidence-quality flag; revisit if naming evidence turns up.
Invented helpers23,842
64 fn
6.36% of countedidenticalByte-identical. The source uses a small helper the original may not have had, for example a stand-in caller that gives the compiler the right surrounding context. The helper itself is never counted.Evidence-quality flag; revisit and replace with the original structure where it can be identified.
References to not-yet-named globals99,954
412 fn
26.64% of countedidenticalByte-identical, and every reference lands on the same address as in the original. The referenced global or function simply has no independently backed name yet.Naming work; the bytes and addresses already agree.
Older alignment annotation420
4 fn
0.11% of countedidenticalByte-identical, but the source reproduces the stack frame with an explicit alignment annotation. A later study of frame alignment suggests the original was written differently.Grandfathered; due to be re-ported the newer way.
Other provisional rule998
3 fn
0.27% of countedidenticalByte-identical; admitted under a rule that is marked provisional.Under review.
Other provisional rule2,211
4 fn
0.59% of countedidenticalByte-identical; admitted under a rule that is marked provisional.Under review.
Other provisional rule4,130
11 fn
1.10% of countedidenticalByte-identical; admitted under a rule that is marked provisional.Under review.
Other provisional rule1,167
2 fn
0.31% of countedidenticalByte-identical; admitted under a rule that is marked provisional.Under review.
Other provisional rule298
1 fn
0.08% of countedidenticalByte-identical; admitted under a rule that is marked provisional.Under review.
Other provisional rule1,733
1 fn
0.46% of countedidenticalByte-identical; admitted under a rule that is marked provisional.Under review.
Other provisional rule141
1 fn
0.04% of countedidenticalByte-identical; admitted under a rule that is marked provisional.Under review.
Replaced records (provisional)1,621
5 fn
0.43% of countedidenticalByte-identical. A newer proof replaced an older record: either a larger unit that contains the old one, or a fresh proof for a record whose source had gone out of date. The old records are kept verbatim in a separate file; every function is counted once.Rule under review. Deleting that one file returns the count to what it was before the rule.

Apart from the behaviour-verified row, these flags describe how a unit was admitted or attributed (the evidence rules), not bytes that fail to match. A function can carry more than one flag, so the rows overlap and do not add up.

A draft-link tier also exists in the private workspace. It links drafted functions into a runnable program for testing. It is provisional and diagnostic, and it is not counted in any number here.

Milestones

  • Campaign passed 35% verified
    2,277 functions, 346,317 bytes
  • Campaign passed 30% verified
    2,119 functions, 312,374 bytes
  • Campaign passed 25% verified
    1,939 functions, 254,510 bytes
  • Campaign passed 20% verified
    1,701 functions, 202,527 bytes
  • Library tier passed 50% exact
    172,330 library bytes
  • Campaign passed 15% verified
    1,424 functions, 149,366 bytes
  • Campaign passed 10% verified
    1,130 functions, 100,103 bytes
  • Campaign passed 5% verified
    546 functions, 49,405 bytes

Latest changes

  • +934 bytes to 38.03%
    Promote intake-6b: [fn] via chained vecctor-owner supersede (+1 fn / +934 B)
  • +141 bytes to 37.94%
    Promote intake-20cr: [fn] under PROVISIONAL Amendment 20c-r (+1 fn / +141 B)
  • +1,733 bytes to 37.92%
    Promote intake-20f: [fn] under PROVISIONAL Amendment 20f (+1 fn / +1,733 B)
  • +894 bytes to 37.75%
    Promote intake-w3a: h09 re-certified in place with [fn] (+1 fn / +894 B)
  • +2,457 bytes to 37.66%
    Promote intake-w4f: hub-wave4 mesh-triangles object unit (+7 fn / +2,457 B)
  • +2,313 bytes to 37.41%
    Promote intake-m05 + intake-w4e: m05 strict recert with , and 16 published singles re-proven fresh (+17 fn / +2,313 B)

The full list is in CHANGELOG.md in the repository.

Work waves

Each wave is a batch of attempts. "Counted now" is the part of the wave that is in today's verified total.

Bar chart of attempted and counted bytes per work wave
Table: waves
waveresult datefunctions triedbytes triedbytes counted now
cluster wave 62026-09-304410,1994,321
round 472026-10-01144,00196
round 492026-10-044912,9873,905
round 502026-10-04348,9905,075
round 512026-10-04203,3342,788
round 522026-10-04202,2301,698
round 532026-10-04201,480981
round 542026-10-04202,1811,449
round 552026-10-04201,9761,349
round 562026-10-04202,4151,746
round 572026-10-04203,0721,767
round 582026-10-04206,5301,899
round 592026-10-04203,0042,167
round 602026-10-04202,8191,651
round 612026-10-05204,5521,675
round 622026-10-05192,4291,360
cluster wave 72026-10-06496,8873,516
cluster wave 82026-10-065620,0425,465
cluster wave 102026-10-075912,9012,997
cluster wave 112026-10-078029,83319,625
cluster wave 92026-10-077321,4476,411
giant attack 12026-10-078018,8124,970
giant attack 22026-10-076212,277911
giant attack 32026-10-0810520,3193,624
ready wave 12026-10-084341,44612,461
ready wave 22026-10-0810144,31220,700
ready wave 32026-10-0912440,13117,807
ready wave 42026-10-0920740,77116,511
ready wave 52026-10-1012230,98215,868
ready wave 62026-10-1013822,2032,208
hub wave 12026-10-136017,4807,376
hub wave 22026-10-13238,4072,355
ready wave 72026-10-1319831,9066,583
hub wave 32026-10-14379,7552,669
More charts: subsystems over time, feature areas as bars, percent over time
Stacked area chart of verified bytes by top-level subsystem over time
Horizontal bar chart of the verified percent of each feature area
Line chart of campaign verified-bytes percent and library-exact percent over time

What the numbers mean

Byte-exact means a function's reconstructed source, compiled with the same period compiler (Visual C++ 2005) and flags, produces exactly the machine code of the original program, with every address reference checked and a deliberate mutation shown to break the match. A small number of functions are instead counted on a differential-execution test against the original; they are listed in the exceptions table above.

Campaign verified bytes is the headline: verified bytes over all first-party target bytes. First-party excluding library rows moves rows that turned out to be library code out of the denominator. Library-exact measures the statically linked libraries (C runtime, Speex, bzip2, libjpeg) on their own line; it is never added to the first-party figure.