Skip to content

build: add graph-compose-core; keep graph-compose as a drop-in wrapper#301

Merged
DemchaAV merged 2 commits into
2.0-devfrom
build/2.0-graph-compose-core
Jul 5, 2026
Merged

build: add graph-compose-core; keep graph-compose as a drop-in wrapper#301
DemchaAV merged 2 commits into
2.0-devfrom
build/2.0-graph-compose-core

Conversation

@DemchaAV

@DemchaAV DemchaAV commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Why

The 2.0 module split originally aimed to make bare graph-compose the lean core —
which would make every existing consumer's .buildPdf() throw
MissingBackendException at runtime after upgrading to 2.0. This reverses that:
the engine gets its own graph-compose-core coordinate, and graph-compose stays a
drop-in that keeps rendering PDF, so existing consumers upgrade with zero changes.

What

  • Rename the root artifact graph-composegraph-compose-core — the engine
    sources stay at the root dir, only the coordinate string changes.
  • New wrapper/ module publishes the graph-compose coordinate as an empty
    jar (jar, not pom — a pom would force consumers to add <type>pom</type> and
    break their build) that depends on graph-compose-core. A graph-compose
    dependency now brings the engine transitively and renders PDF unchanged.
  • Repoint the engine-internal modules that need the engine classes directly
    (render-docx, testing, qa, benchmarks — incl. the tests-classifier jar) to
    graph-compose-core. bundle and examples stay on graph-compose (the wrapper),
    dogfooding the consumer path.
  • Wire the aggregator (+wrapper), CI (build gate targets graph-compose-core; the
    examples job installs the wrapper), publish (deploy the wrapper after the core),
    cut-release.ps1 (bump/commit/install the wrapper), jitpack (build both
    coordinates), and VersionConsistencyGuardTest (wrapper tracks the engine version).
  • Core still carries the PDF backend and the templates; those move into their own
    modules over the rest of the 2.0 cycle. Consumer imports are unchanged.

Tests

  • Full reactor ./mvnw -f aggregator/pom.xml clean verify → BUILD SUCCESS, all 11
    modules, all tests green (incl. the wrapper-aware version guard).
  • Back-compat proof: graph-compose dependency tree resolves to
    graph-compose → graph-compose-core (compile); the examples module (which depends
    on the graph-compose wrapper) renders 85 example PDFs.

DemchaAV added 2 commits July 5, 2026 20:52
The 2.0 module split originally aimed to make bare `graph-compose` the lean core,
which would make every existing consumer's `.buildPdf()` throw
MissingBackendException at runtime after upgrading. Reverse that: the engine gets
its own `graph-compose-core` coordinate, and `graph-compose` stays a drop-in that
keeps rendering PDF, so existing consumers upgrade with zero changes.

- Rename the root artifact `graph-compose` -> `graph-compose-core` (the engine
  sources stay at the root dir; only the coordinate string changes).
- New wrapper/ module publishes the `graph-compose` coordinate as an empty jar
  (jar, not pom — a pom would force consumers to add <type>pom</type>) that
  depends on graph-compose-core. A `graph-compose` dependency now brings the
  engine transitively and renders PDF unchanged.
- Repoint the engine-internal modules that need the engine classes directly
  (render-docx, testing, qa, benchmarks, including the tests-classifier jar) to
  graph-compose-core; bundle and examples stay on `graph-compose` (the wrapper).
- Wire the aggregator, CI (build gate targets graph-compose-core; the examples
  job installs the wrapper), publish (deploy the wrapper after the core),
  cut-release (bump/commit/install the wrapper), jitpack (build both
  coordinates), and VersionConsistencyGuardTest (wrapper tracks the engine
  version). CHANGELOG describes the coordinate structure this ships.

The core still carries the PDF backend and the templates; those move into their
own modules over the rest of the 2.0 cycle.
…pose-core

The wrapper's drop-in contract rests on it being a jar (not pom) that depends on
graph-compose-core: a pom would force consumers to add <type>pom</type>, and
dropping the core dependency would stop `graph-compose` from bringing the engine —
either change would silently break every consumer at resolve with no test red. Add
a VersionConsistencyGuardTest assertion locking both. Also correct a stale jitpack
comment that still referenced the old wrapper directory name.
@DemchaAV DemchaAV merged commit b5d5d9e into 2.0-dev Jul 5, 2026
10 checks passed
@DemchaAV DemchaAV deleted the build/2.0-graph-compose-core branch July 5, 2026 20:02
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