Skip to content

Add project fingerprints and semantic diffs - #24

Merged
erseco merged 7 commits into
perf/indexed-parserfrom
feature/project-fingerprints-diff
Sep 19, 2026
Merged

erseco merged 7 commits into
perf/indexed-parserfrom
feature/project-fingerprints-diff

Conversation

@erseco

@erseco erseco commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add exact archive fingerprints with streaming ZIP-entry hashing
  • add normalized logical-content fingerprints
  • exclude volatile package identity/version metadata from normalized fingerprints
  • include parsed project structure and project resource bytes in content fingerprints
  • add hasSameContentAs() for normalized content equality
  • add semantic project diffs for:
    • core metadata
    • pages
    • blocks
    • iDevices
    • added/removed/modified resources
  • expose archive/content fingerprints in detailed serialization
  • keep ZIP packaging differences separate from logical content changes

Stack

This PR is stacked on #23 and targets perf/indexed-parser.

Fingerprint semantics

getArchiveFingerprint() hashes the exact archive bytes.

getContentFingerprint() normalizes logical project data, excludes volatile fields such as odeId, odeVersionId and the eXeLearning application version, and includes hashes of project resource bytes.

Tests

Covers:

  • different ZIP/package IDs with identical logical content
  • exact archive fingerprint differences
  • stable normalized content fingerprints
  • binary resource modifications
  • semantic metadata changes
  • diff output for modified resources

CI is green on PHP 8.0–8.5, coverage, Composer validation, PHPCS and PHPStan.

@erseco
erseco added this pull request to stack #25 September 19, 2026 20:07
@erseco
erseco force-pushed the feature/project-fingerprints-diff branch from a5d2d7f to 17e5692 Compare September 19, 2026 20:10
@erseco
erseco merged commit 3efb0a6 into main Sep 19, 2026
17 checks passed
@erseco
erseco deleted the feature/project-fingerprints-diff branch September 19, 2026 20:10
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