Skip to content

Preserve eraser state and finish plugin modularization - #1

Merged
MRoiban merged 40 commits into
mainfrom
refactor/modularization
Jul 16, 2026
Merged

Preserve eraser state and finish plugin modularization#1
MRoiban merged 40 commits into
mainfrom
refactor/modularization

Conversation

@MRoiban

@MRoiban MRoiban commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

  • preserve configured eraser width and actual object/brush policy across toolbar, pen, and hardware-eraser switches
  • replace the umbrella translation unit and .cc.inc fragments with explicit runtime, resolver, entry-point, hook, visibility, and feature translation units
  • add an audited globals budget and host-safe make check
  • add checksum-pinned firmware ABI, clean NickelTC build, preview ABI, binary parity, and exact installer-content checks to GitHub Actions
  • document the verified 0.0.2-alpha release changes

Safety and compatibility

  • target remains Kobo Elipsa 2E (condor) firmware 4.38.23697 only
  • package validator requires exactly the ARM plugin and stock libiinknote.so
  • required stock library SHA-256: f80a7de7a1c482173a89b18f2bb8164fcfb53b8fab9b2a75bd23998813a528ea
  • no Kobo database, updater, boot, recovery, or partition behavior is changed

Validation

  • make -C mods/custom-notebook-templates check
  • python3 scripts/verify-layer-abi.py
  • clean NickelTC GCC 4.9.4/Qt 5.2.1 -Wall -Wextra -Werror build
  • preview listener ABI verification
  • loader-visible parity vs. v0.0.1-alpha: 46 exports, 350 imports, and 9 ordered DT_NEEDED entries
  • exact two-file installer validation and plugin/build byte parity
  • device smoke test: pen, object/brush eraser and sizes, hardware eraser, layer isolation, previews, covers, templates, page tools, and support-image filtering
  • post-refactor trace: no failures, mismatches, exceptions, or verified=no

@MRoiban MRoiban changed the title Modularize plugin sources and add README previews Modularize plugin sources with binary parity checks Jul 16, 2026
MRoiban added 26 commits July 16, 2026 12:04
Keep the dormant page-transaction writer private while cross-notebook moves are disabled; promoting it alone adds otherwise-elided Qt imports and fails the binary parity gate.
Promote the verified page context, reorder, duplicate, and document access paths behind explicit FirmwareApi and cover-cache dependencies. Keep dormant cross-notebook move code in the umbrella so its extra Qt imports remain un-emitted.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Candidate SHA-256: 4e2ba785f1153c408eb769f3fb92ed45efc019593b99556317d812b92f0f0502.
Promote only the startup cleanup for legacy notebook backups, preserving the visibility-hook transaction and timer lifecycle in the umbrella translation unit. The backup root remains an explicit caller-owned dependency and its QString conversion stays at the original execution point.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Candidate SHA-256: e6db7174415136a79d89c68b9251c2a8226aa407779243f97aa296c59e5f2106.
Move URI classification and sync-exclusion normalization behind hidden visibility helpers while leaving both exported hooks, firmware calls, runtime state, and one-shot tracing in the umbrella translation unit. The helpers use references so the exported ARM ABI and QString return path stay unchanged.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Candidate SHA-256: d7511592068e3bed15b25c32d4a30a1fe44f4a85bb16855e4f24dd16562ed21b.
Promote the active cover picker, backup, update, and page-zero insertion path behind explicit FirmwareApi and cover-cache dependencies. Keep the layer/layout bridge and dormant cross-notebook move code quarantined in the umbrella translation unit.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Dormant move-page symbols and Qt imports remain absent. Candidate SHA-256: 792d92e0d22e01620d2068694590d37b5bdefe637a0e5fffe620f1456657bba2.
Promote the exact IInkNotePadWidget classifier and ancestor/descendant lookup from the layer fragment into the existing notebook_widget service. All page, cover, eraser, and layer call sites now share the same hidden implementation.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Candidate SHA-256: 599b1261c6c9d8d0e4129f55016589149ad7f0dcd3f00fd837240e414b91d87b.
Move duplicate/reorder execution and error handling into a hidden page_actions service with explicit firmware and cover-cache dependencies. Preserve the controller guard and compile-time-disabled cross-notebook address-taking block in the umbrella so dormant code stays un-emitted.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Dormant move-page symbols and imports remain absent. Candidate SHA-256: 23dbdd94b1171720cd7cac8127268ba1a638828bed1d41e816ec0e162163f063.
Keep every exported hook ABI, caller-address capture, stock background-options result object, and stock grid load in the umbrella while moving template/cover routing, title handling, thumbnail composition, and grid augmentation into a stateless hidden service.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. ARM disassembly confirms the background hook preserves its original sret storage. Candidate SHA-256: 5ef37fcb3b4b0a594d38a66e40c88e6985f8e1ab1da5ef0cce99967741f9d022.
Move cover and page receiver wiring plus native row construction into a hidden notebook_menu service. Keep the exported hook's stock call, caller-range validation, once property, shared icon, and inline layer contribution in place, with the umbrella page adapter passed as a narrow callback.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Dormant cross-notebook symbols/imports remain absent. Candidate SHA-256: 71a63bc9ceb36fc714634a41579a8386d66f85ad0d49f87dad7349023060cf49.
Give the visibility module ownership of its process-lifetime runtime state and move backing-file preservation plus sync-exclusion one-shot behavior behind explicit stateful handlers. Exported hooks still perform firmware guards, content lookup, stock calls, and ABI forwarding.\n\nVerified against the Phase 2 device artifact: 46 dynamic exports, 350 dynamic imports, and 9 ordered DT_NEEDED entries. Candidate SHA-256: 1bf807f65e8cade26594c9d1822612a018d2a4dd8b935bb30fd0842da9674f68.
@MRoiban MRoiban changed the title Modularize plugin sources with binary parity checks Preserve eraser state and finish plugin modularization Jul 16, 2026
@MRoiban
MRoiban marked this pull request as ready for review July 16, 2026 21:26
@MRoiban
MRoiban merged commit 9a8dfe1 into main Jul 16, 2026
4 checks passed
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