You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two isolated builds of one source revision produce byte-identical files for the complete staged Maven publication. A candidate manifest identifies every compared file and build input.
For each of core, coroutines, minimessage, paper, serializer, test, and test-snapshot: main JAR, sources JAR, Dokka-backed Javadoc JAR, Project Object Model (POM), and Gradle Module Metadata.
For bom: POM and Gradle Module Metadata only.
Include repository metadata and checksum files only when the publication task creates them as part of the consumer repository. Do not compare logs, test reports, Gradle caches, or temporary repository metadata.
Equivalence rule
Build twice from the same clean source revision in different temporary worktrees, processes, temporary Maven repositories, and empty task-specific Gradle user homes. Use the same pinned Java Development Kit, Gradle wrapper, Kotlin version, dependency locks, and verification metadata. Disable build-cache reuse and rerun publication tasks.
Every file in the artefact set must have the same relative repository path and identical bytes. Compare SHA-256 digests and file sizes. Do not normalise a timestamp, archive member, POM, or module file after publication to make it match.
Candidate manifest
Write build/reports/release-candidate/manifest.json and a concise Markdown summary. Record:
schema version;
repository and source commit;
project version;
operating system and architecture;
Java vendor and version;
Gradle and Kotlin versions;
build command and verification mode;
coordinate, classifier, extension, relative path, size, and SHA-256 for each file; and
the comparison result for both isolated builds.
The report is a generated release candidate, not a checked source file. Fail before publication evidence when a file is missing, extra, renamed, or different.
Pull-request stack
Make each declared publication output reproducible.
Add the two-build comparison and candidate manifest.
Add deterministic fixtures for missing, extra, and changed files.
Dependencies
Blocked by #409, #411, and #413. This issue does not require a public release.
Outcome
Two isolated builds of one source revision produce byte-identical files for the complete staged Maven publication. A candidate manifest identifies every compared file and build input.
Artefact set
Use the publication contract from #413.
core,coroutines,minimessage,paper,serializer,test, andtest-snapshot: main JAR, sources JAR, Dokka-backed Javadoc JAR, Project Object Model (POM), and Gradle Module Metadata.bom: POM and Gradle Module Metadata only.Include repository metadata and checksum files only when the publication task creates them as part of the consumer repository. Do not compare logs, test reports, Gradle caches, or temporary repository metadata.
Equivalence rule
Build twice from the same clean source revision in different temporary worktrees, processes, temporary Maven repositories, and empty task-specific Gradle user homes. Use the same pinned Java Development Kit, Gradle wrapper, Kotlin version, dependency locks, and verification metadata. Disable build-cache reuse and rerun publication tasks.
Every file in the artefact set must have the same relative repository path and identical bytes. Compare SHA-256 digests and file sizes. Do not normalise a timestamp, archive member, POM, or module file after publication to make it match.
Candidate manifest
Write
build/reports/release-candidate/manifest.jsonand a concise Markdown summary. Record:The report is a generated release candidate, not a checked source file. Fail before publication evidence when a file is missing, extra, renamed, or different.
Pull-request stack
Dependencies
Blocked by #409, #411, and #413. This issue does not require a public release.
Acceptance criteria