Skip to content

v1.4: KFPS 3.1.31 with minimal section-boundary compatibility - #40

Draft
Datamining00 wants to merge 3 commits into
v1.4-kfps-3.1.31-clean-decoder-testfrom
v1.4-kfps-3.1.31-boundary-compat-test
Draft

v1.4: KFPS 3.1.31 with minimal section-boundary compatibility#40
Datamining00 wants to merge 3 commits into
v1.4-kfps-3.1.31-clean-decoder-testfrom
v1.4-kfps-3.1.31-boundary-compat-test

Conversation

@Datamining00

@Datamining00 Datamining00 commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Goal

Test the minimal hybrid indicated by the real-data differential reports:

  • keep clean KFPS 3.1.31 group/transform/shape semantics;
  • restore only FH6 Assistant's proven populated-to-populated section-boundary preservation rule.

Differential evidence

Livery_2997_20260817150058 — legacy better

Clean 3.1.31 keeps the Top and Left counts nominally complete but advances populated section ownership too late. It then under-decodes:

  • Right: 2948 / 2964 (-16)
  • FrontWindshield: 14 / 18 (-4)
  • BackWindshield: 37 / 41 (-4)

The patched 3.1.27 report explicitly preserves an immediate next-section placement at body offset 0x184fe. The current decoder instead starts Left later, and later raw placements are consequently attributed to earlier sections.

Livery_3761_20260818134954 — 3.1.31 better

Clean 3.1.31 exactly matches every declared section count (8569 total). The patched legacy decoder produces 8561 layers and misses 8 Left placements. Around Top offsets 95628..95851, 3.1.31 recognizes eight placements that legacy omits, and the following shared Top layers receive the 3.1.31 group transform. The eight later placements around 96640..96863 are consequently assigned to Left instead of being consumed by Top.

This shows that the 3.1.31 group/occupancy/transform model must be retained, while the populated-section boundary advance still needs the proven compatibility rule for the 2997 layout.

Runtime policy

This branch therefore does not re-enable the old parser stack. It installs only apply_livery_section_boundary_fix_patch() after the 3.1.31 clean baseline. The following remain disabled:

  • compact-shape guard;
  • decoder recovery;
  • bare-parent transform fix;
  • consecutive-transform-pair fix;
  • structural parser audit;
  • source-offset normalization.

Unknown 0x0100 continues to be rejected as a native shape by KFPS 3.1.31 itself.

Validation

  • Windows CI run: 32393927765 — success
  • Regression suite: 189 tests, OK
  • PyInstaller one-file build: success
  • EXE bytes: 82,644,728
  • EXE SHA-256: 104b10e77f0d15e34e399dd5787f152f48ea09bc2f50c34fe9cd5548662ac654
  • Artifact ZIP SHA-256: 07a134ab794fce1eed1b916bf910c2d4a98c97aa4002654415052ad874c82ae4

Real-data acceptance test

Recheck both contrasting liveries with this single build:

  1. Livery_3761 / Fluorite — Left must keep the 3.1.31-corrected composition and the black occluding structure must not return.
  2. Livery_2997 — the sections that regressed on clean 3.1.31 must render correctly again.
  3. A livery that previously triggered shape word 0x0100 should still open without treating 0x0100 as a native shape.

Draft test only. Do not merge before these visual checks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant