Audited 2026-07-30. Two of the six entries (2 and 6) were already done when
this was audited - one of them landed 37 minutes after the issue was filed - and
the body had never been edited. Both are struck through below with the evidence.
A register whose entries are wrong is worse than no register, so this one gets
re-read whenever something it names lands.
A tracking issue for things the placement/cliff port knowingly does not do, plus
semantics that were never pinned. None of these are unknown - all are documented in
docs/noise/ - but until now they lived only in notes files, where they are easy to
miss when picking up related work.
This is a register, not a work plan. Several entries are correct decisions that
should stay; what they need is to be findable before someone builds on top of them.
1. Vulcanus rock prototype identity is FALSIFIED (not merely unvalidated)
docs/noise/placement-roll-NOTES.md, "FALSIFIED for Vulcanus rocks".
renderVulcanusRocks models the game's max-probability arbitration, and
rockBig >= rockHuge is a theorem - the caps satisfy
0.2*(1-0.5a) >= 0.2*(1-0.75a) for all a in [0,1] and the sloped branches
-1.0+T > -1.2+T unconditionally. So argmax predicts a 0% huge-volcanic-rock
population at every tile and every seed. The game's actual population is ~28% huge
(region 2: 320 huge, 813 big).
Density still agrees to 0.2% / 0.6% / 7.5%, because the overlay gates with a uniform
huge-sized collision box. That is compensating agreement, not a structural match -
the counts are right while the per-tile identity is known wrong.
Untested hypothesis: autoplace order a[huge] sorts before b[big], so sequential
per-prototype passes would give a mixed population where a single argmax pass cannot.
Update 2026-07-30: this is no longer Vulcanus-only. The same split now
measures on Nauvis - region 0 is 42 huge / 149 big / 1 sand = 22% huge,
where argmax predicts 0% (docs/noise/placement-roll-NOTES.md:213). Two planets,
two prototype families, the same 20-30% huge population. That makes the
sequential-group hypothesis the shared root cause with #16 rather than a
Vulcanus quirk, and it is now the largest live entry in this register.
Done when: either the sequential-group hypothesis is tested against
count_entities_filtered per prototype, or the notes are updated to say the split is
unmodellable and why.
2. fixImpossibleCells was never ported - DONE (PR #32, 2026-07-28)
Corrected 2026-07-30. This entry was wrong within a day of being filed and sat
uncorrected. fixImpossibleCells was ported in PR #32 (dea73ac, merged
2026-07-28T17:36Z) - code at src/noise/cliffs/cliffPlacement.ts:105, spec at
test/cliffFixImpossibleCells.spec.ts.
The result also refutes this entry's premise: porting it changes zero
predictions on Nauvis, so it is not the cause of the ~6% residual it was named
for. That residual is still open and is now believed to be a rule error (#57).
original text
docs/noise/cliffs-NOTES.md:182-192.
The named cause of Nauvis's cliff residual, alongside water rejection. Nauvis now
measures 94.3% recall / 94.3% precision with an exact 1.000 count ratio (#21), so
this is the main remaining accuracy item there.
Worth doing after #18, not before: #18 established that the shared placement code
produces exact counts on Nauvis, so fixImpossibleCells is a refinement of an
already-good result rather than a candidate cause of Vulcanus's over-placement.
Done when: ported and the Nauvis recall/precision figures re-measured, or
explicitly declined with the residual accepted.
3. Oil-vs-uranium paint order is inverted (latent)
src/noise/preview/renderResources.ts module comment.
Crude oil paints its 3x3 marks before the thresholded pass, so the four solid ores
correctly overwrite it. But uranium is also autoplace order "c" and sorts after
oil (patchSetIndex 5 vs 4), so a uranium patch covering an oil well would hide a well
the game would show.
Measured over [-2048, 2048)^2 at seed 123456: oil covers 39869 tiles, uranium 10733,
and they share 0. So it is unreachable at this seed - a seed-specific zero, not a
theorem.
Done when: either a counterexample seed is found (then add the per-pixel guard), or
a broader sweep across seeds supports promoting "0 overlap" to a general claim.
4. random_penalty's noise-path batch extent is unsettled
docs/noise/random-penalty-NOTES.md.
Crude oil ships with the penalty modelled as an independent per-tile draw. The argument
that this is exact for density is solid: source = 1 is constant and strictly
positive, so the source <= 0 pass-through can never fire, every tile consumes exactly
one taus88 draw, each tile's U is marginally uniform however the batch is cut, and a
density is a sum of marginals.
The argument has exactly one failure mode: a batch of size 1, where every tile's U
would be the first taus88 output from a word linear in (x, y) and adjacent tiles could
be correlated rather than independent. That case would invalidate the density claim too,
not just positions.
Done when: the extent is determined (start with the size-1 case), or someone needs
tile-exact oil positions and does it then.
5. Retry-count semantics are unpinned
docs/noise/placement-roll-NOTES.md, "The roll".
The game's roll sits in a for attempt in 0..proto->mapGenData[0x28] loop
(generateEntities +1032, +1088). Each iteration draws one U and places when
U < prob, so a tile can consume a variable number of draws and in principle place
more than once. Every overlay in this port assumes exactly one roll per tile.
Expected to be 1 for these prototypes, but never confirmed against find_entities.
Done when: the field is read out of the binary for the prototypes this port places,
or a density disagreement forces the question.
6. No coverage check against the game's own map preview - DONE (PR #25, 2026-07-28)
Corrected 2026-07-30. This landed 37 minutes after this issue was filed and
the entry was never updated. test/previewAgreement.spec.ts names this item by
number in its header and records that it immediately caught a real defect: Vulcanus
rocks painted at 0.07x the game's coverage.
original text
docs/noise/vulcanus-rocks-NOTES.md:190.
Every validation in this port is against entity counts or positions. Nothing compares a
rendered preview against factorio --generate-map-preview output for the same seed,
which is the one check that would catch a whole-overlay colour, scale or compositing
error that per-entity agreement cannot see.
preview-service/container/ already shells out to exactly that binary flag, so the
capture path exists.
Done when: at least one seed is compared per planet, with the disagreement
characterised.
Related: #16 (cross-overlay occupancy), #18 (Vulcanus cliff over-placement),
#19 (perf benchmark). Those are active defects with owners; this issue is the register
of what is deliberately or unknowingly left out.
A tracking issue for things the placement/cliff port knowingly does not do, plus
semantics that were never pinned. None of these are unknown - all are documented in
docs/noise/- but until now they lived only in notes files, where they are easy tomiss when picking up related work.
This is a register, not a work plan. Several entries are correct decisions that
should stay; what they need is to be findable before someone builds on top of them.
1. Vulcanus rock prototype identity is FALSIFIED (not merely unvalidated)
docs/noise/placement-roll-NOTES.md, "FALSIFIED for Vulcanus rocks".renderVulcanusRocksmodels the game's max-probability arbitration, androckBig >= rockHugeis a theorem - the caps satisfy0.2*(1-0.5a) >= 0.2*(1-0.75a)for allain[0,1]and the sloped branches-1.0+T > -1.2+Tunconditionally. So argmax predicts a 0%huge-volcanic-rockpopulation at every tile and every seed. The game's actual population is ~28% huge
(region 2: 320 huge, 813 big).
Density still agrees to 0.2% / 0.6% / 7.5%, because the overlay gates with a uniform
huge-sized collision box. That is compensating agreement, not a structural match -
the counts are right while the per-tile identity is known wrong.
Untested hypothesis: autoplace order
a[huge]sorts beforeb[big], so sequentialper-prototype passes would give a mixed population where a single argmax pass cannot.
Update 2026-07-30: this is no longer Vulcanus-only. The same split now
measures on Nauvis - region 0 is 42 huge / 149 big / 1 sand = 22% huge,
where argmax predicts 0% (
docs/noise/placement-roll-NOTES.md:213). Two planets,two prototype families, the same 20-30% huge population. That makes the
sequential-group hypothesis the shared root cause with #16 rather than a
Vulcanus quirk, and it is now the largest live entry in this register.
Done when: either the sequential-group hypothesis is tested against
count_entities_filteredper prototype, or the notes are updated to say the split isunmodellable and why.
2.
- DONE (PR #32, 2026-07-28)fixImpossibleCellswas never portedCorrected 2026-07-30. This entry was wrong within a day of being filed and sat
uncorrected.
fixImpossibleCellswas ported in PR #32 (dea73ac, merged2026-07-28T17:36Z) - code at
src/noise/cliffs/cliffPlacement.ts:105, spec attest/cliffFixImpossibleCells.spec.ts.The result also refutes this entry's premise: porting it changes zero
predictions on Nauvis, so it is not the cause of the ~6% residual it was named
for. That residual is still open and is now believed to be a rule error (#57).
original text
docs/noise/cliffs-NOTES.md:182-192.The named cause of Nauvis's cliff residual, alongside water rejection. Nauvis now
measures 94.3% recall / 94.3% precision with an exact 1.000 count ratio (#21), so
this is the main remaining accuracy item there.
Worth doing after #18, not before: #18 established that the shared placement code
produces exact counts on Nauvis, so
fixImpossibleCellsis a refinement of analready-good result rather than a candidate cause of Vulcanus's over-placement.
Done when: ported and the Nauvis recall/precision figures re-measured, or
explicitly declined with the residual accepted.
3. Oil-vs-uranium paint order is inverted (latent)
src/noise/preview/renderResources.tsmodule comment.Crude oil paints its 3x3 marks before the thresholded pass, so the four solid ores
correctly overwrite it. But uranium is also autoplace order
"c"and sorts afteroil (
patchSetIndex5 vs 4), so a uranium patch covering an oil well would hide a wellthe game would show.
Measured over
[-2048, 2048)^2at seed 123456: oil covers 39869 tiles, uranium 10733,and they share 0. So it is unreachable at this seed - a seed-specific zero, not a
theorem.
Done when: either a counterexample seed is found (then add the per-pixel guard), or
a broader sweep across seeds supports promoting "0 overlap" to a general claim.
4.
random_penalty's noise-path batch extent is unsettleddocs/noise/random-penalty-NOTES.md.Crude oil ships with the penalty modelled as an independent per-tile draw. The argument
that this is exact for density is solid:
source = 1is constant and strictlypositive, so the
source <= 0pass-through can never fire, every tile consumes exactlyone taus88 draw, each tile's
Uis marginally uniform however the batch is cut, and adensity is a sum of marginals.
The argument has exactly one failure mode: a batch of size 1, where every tile's
Uwould be the first taus88 output from a word linear in
(x, y)and adjacent tiles couldbe correlated rather than independent. That case would invalidate the density claim too,
not just positions.
Done when: the extent is determined (start with the size-1 case), or someone needs
tile-exact oil positions and does it then.
5. Retry-count semantics are unpinned
docs/noise/placement-roll-NOTES.md, "The roll".The game's roll sits in a
for attempt in 0..proto->mapGenData[0x28]loop(
generateEntities+1032,+1088). Each iteration draws oneUand places whenU < prob, so a tile can consume a variable number of draws and in principle placemore than once. Every overlay in this port assumes exactly one roll per tile.
Expected to be 1 for these prototypes, but never confirmed against
find_entities.Done when: the field is read out of the binary for the prototypes this port places,
or a density disagreement forces the question.
6.
No coverage check against the game's own map preview- DONE (PR #25, 2026-07-28)Corrected 2026-07-30. This landed 37 minutes after this issue was filed and
the entry was never updated.
test/previewAgreement.spec.tsnames this item bynumber in its header and records that it immediately caught a real defect: Vulcanus
rocks painted at 0.07x the game's coverage.
original text
docs/noise/vulcanus-rocks-NOTES.md:190.Every validation in this port is against entity counts or positions. Nothing compares a
rendered preview against
factorio --generate-map-previewoutput for the same seed,which is the one check that would catch a whole-overlay colour, scale or compositing
error that per-entity agreement cannot see.
preview-service/container/already shells out to exactly that binary flag, so thecapture path exists.
Done when: at least one seed is compared per planet, with the disagreement
characterised.
Related: #16 (cross-overlay occupancy), #18 (Vulcanus cliff over-placement),
#19 (perf benchmark). Those are active defects with owners; this issue is the register
of what is deliberately or unknowingly left out.