Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
f1fc307
feat(coordination): integrate Contracts 1.0 closure publication
piotr-blue Aug 19, 2026
21162aa
test(coordination): prove Contracts 1.0 public behavior
piotr-blue Aug 19, 2026
3fd8b5a
build(coordination): bind Contracts 1.0 local release inputs
piotr-blue Aug 19, 2026
94dd149
chore(stabilization): capture cyclic topology baseline
piotr-blue Aug 19, 2026
2e19951
test(coordination): add authored Contracts scenario support
piotr-blue Aug 19, 2026
f803fba
test(coordination): prove branching cyclic topology
piotr-blue Aug 19, 2026
146b386
test(coordination): prove three-member cyclic execution
piotr-blue Aug 19, 2026
d044c0b
feat(coordination): instrument closure execution evidence
piotr-blue Aug 19, 2026
b1dd137
test(coordination): prove cyclic detachment and reactivation
piotr-blue Aug 19, 2026
aafcf34
test(coordination): prove public component merge and split
piotr-blue Aug 19, 2026
f9c958c
test(coordination): characterize cyclic initialization topology
piotr-blue Aug 19, 2026
42d60f8
test(coordination): characterize cyclic scope boundary
piotr-blue Aug 19, 2026
cd533cf
docs(coordination): define authored closure admission boundary
piotr-blue Aug 19, 2026
e9a7948
docs(stabilization): map cyclic topology coverage
piotr-blue Aug 19, 2026
32449f0
perf(coordination): bound cyclic closure planning
piotr-blue Aug 19, 2026
c5eb78b
perf(coordination): publish closure phase timings
piotr-blue Aug 19, 2026
6280acc
test(coordination): add cyclic performance campaign
piotr-blue Aug 19, 2026
ef214a5
test(coordination): record exact cyclic identity evidence
piotr-blue Aug 19, 2026
3e01b07
test(coordination): record cyclic performance campaign
piotr-blue Aug 19, 2026
ab071ed
docs(coordination): normalize coverage metadata
piotr-blue Aug 19, 2026
f245270
build(coordination): rebind Language documentation head
piotr-blue Aug 19, 2026
d607571
docs(stabilization): finalize cyclic topology evidence
piotr-blue Aug 19, 2026
00f4fbb
feat(coordination): add SDK engine evidence seams
piotr-blue Aug 19, 2026
64e41b5
feat(coordination): bootstrap SDK Contracts roots dynamically
piotr-blue Aug 19, 2026
c9a250a
feat(coordination): compile authored Contracts closures
piotr-blue Aug 19, 2026
f1c7178
feat(coordination): add immutable developer SDK values
piotr-blue Aug 19, 2026
4408ff4
feat(coordination): add Contracts developer SDK runtime
piotr-blue Aug 19, 2026
4dccee1
test(coordination): prove public SDK workflows
piotr-blue Aug 19, 2026
25467dc
refactor(coordination): name the legacy engine explicitly
piotr-blue Aug 19, 2026
6d6f8a9
test(coordination): cover SDK cycle detach and reattachment
piotr-blue Aug 19, 2026
9f9923e
build(coordination): add isolated SDK freeze lane
piotr-blue Aug 19, 2026
b1e3863
docs(coordination): define SDK freeze and migration boundary
piotr-blue Aug 19, 2026
2b6219a
fix(coordination): isolate staged consumer JVM lanes
piotr-blue Aug 19, 2026
bf9db53
docs(stabilization): preserve SDK freeze receipts
piotr-blue Aug 19, 2026
227f942
feat(coordination): publish managed draft expansions atomically
piotr-blue Aug 20, 2026
956f317
feat(sdk): enable managed draft operations
piotr-blue Aug 20, 2026
1b8db09
fix(coordination): preflight managed draft paths
piotr-blue Aug 20, 2026
94e5d41
fix(coordination): retire terminal draft plans
piotr-blue Aug 20, 2026
c18337c
fix(coordination): retain virtual rollback receipts
piotr-blue Aug 20, 2026
d034a7a
feat(sdk): expose managed occurrence audit
piotr-blue Aug 20, 2026
b5cf503
test(sdk): require exact cyclic topology evidence
piotr-blue Aug 20, 2026
b3ff3f3
test(sdk): cover managed draft publication
piotr-blue Aug 20, 2026
bec57e4
test(sdk): cover edge result mappings
piotr-blue Aug 20, 2026
ab4ef25
docs(coordination): document managed draft rc.3
piotr-blue Aug 20, 2026
6df7d42
build(coordination): bind rc.3 staged graph
piotr-blue Aug 20, 2026
fb3aca0
test(coordination): align closure capture metrics
piotr-blue Aug 20, 2026
aa78709
docs(stabilization): bind cyclic topology rc.3 artifacts
piotr-blue Aug 20, 2026
47475da
chore(release): prepare 3.0.0-rc.3 for published dependencies
piotr-blue Aug 20, 2026
1aaeed3
fix(ci): use published Temurin 21 build identifier
piotr-blue Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cz.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
name = "cz_conventional_commits"
tag_format = "v$version"
version_scheme = "semver"
version = "3.0.0-rc.1"
version = "3.0.0-rc.3"
update_changelog_on_bump = true
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@ __MACOSX/** export-ignore
*.hprof export-ignore
hs_err_pid*.log export-ignore
replay_pid*.log export-ignore

# These retained evidence bytes are checksum-bound and must not be normalized.
stabilization/sdk-freeze-final/FINAL_RECEIPT.md -whitespace
stabilization/sdk-freeze-final/changed-files.sha256 -whitespace
28 changes: 14 additions & 14 deletions .github/scripts/prepare-rc-release.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const { execFileSync } = require('node:child_process');
const fs = require('node:fs');

const CZ_TOML = '.cz.toml';
const CANONICAL_EVIDENCE = 'docs/releases/3.0.0-rc.1-evidence.json';
const RELEASE_AUTHORITY = 'docs/releases/3.0.0-rc.3.md';
const MAIN_REF = process.env.RC_BASE_REF || 'origin/main';
const VALID_BUMPS = new Set(['major', 'minor', 'patch']);

Expand Down Expand Up @@ -109,19 +109,19 @@ function nextVersionForCurrentRc(currentVersion, latestTaggedRc) {
return `${formatVersion(parsed)}-rc.${nextRc}`;
}

function evidenceRelease(content) {
const evidence = JSON.parse(content);
if (typeof evidence.release !== 'string' || evidence.release.length === 0) {
throw new Error(`Canonical evidence is missing a release: ${CANONICAL_EVIDENCE}`);
function authorityRelease(content) {
const match = content.match(/^RC3_VERSION:\s*(\S+)\s*$/m);
if (!match) {
throw new Error(`Release authority is missing RC3_VERSION: ${RELEASE_AUTHORITY}`);
}
return evidence.release;
return match[1];
}

function assertEvidenceRelease(preparedVersion, content) {
const canonicalRelease = evidenceRelease(content);
if (canonicalRelease !== preparedVersion) {
function assertAuthorityRelease(preparedVersion, content) {
const authorizedRelease = authorityRelease(content);
if (authorizedRelease !== preparedVersion) {
throw new Error(
`Prepared RC ${preparedVersion} does not match canonical evidence release ${canonicalRelease}`,
`Prepared RC ${preparedVersion} does not match authorized release ${authorizedRelease}`,
);
}
}
Expand All @@ -147,9 +147,9 @@ function prepareRcRelease() {
console.log(`Aggregate bump: ${bump}`);
}

assertEvidenceRelease(
assertAuthorityRelease(
nextVersion,
fs.readFileSync(CANONICAL_EVIDENCE, 'utf8'),
fs.readFileSync(RELEASE_AUTHORITY, 'utf8'),
);

const nextContent = currentContent.replace(
Expand All @@ -170,8 +170,8 @@ if (require.main === module) {
}

module.exports = {
assertEvidenceRelease,
evidenceRelease,
assertAuthorityRelease,
authorityRelease,
nextVersionForCurrentRc,
parseVersion,
};
28 changes: 14 additions & 14 deletions .github/scripts/prepare-rc-release.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ const assert = require('node:assert/strict');
const test = require('node:test');

const {
assertEvidenceRelease,
evidenceRelease,
assertAuthorityRelease,
authorityRelease,
nextVersionForCurrentRc,
parseVersion,
} = require('./prepare-rc-release.js');
Expand Down Expand Up @@ -32,24 +32,24 @@ test('advances an RC after the current tag exists', () => {
assert.equal(nextVersionForCurrentRc('3.0.0-rc.1', 8), '3.0.0-rc.9');
});

test('reads the release bound by canonical evidence', () => {
assert.equal(evidenceRelease('{"release":"3.0.0-rc.1"}'), '3.0.0-rc.1');
test('reads the release bound by the current authority', () => {
assert.equal(authorityRelease('RC3_VERSION: 3.0.0-rc.3\n'), '3.0.0-rc.3');
assert.throws(
() => evidenceRelease('{}'),
/Canonical evidence is missing a release/,
() => authorityRelease('# missing marker\n'),
/Release authority is missing RC3_VERSION/,
);
});

test('rejects a prepared RC that differs from canonical evidence', () => {
assert.doesNotThrow(() => assertEvidenceRelease(
'3.0.0-rc.1',
'{"release":"3.0.0-rc.1"}',
test('rejects a prepared RC that differs from its authority', () => {
assert.doesNotThrow(() => assertAuthorityRelease(
'3.0.0-rc.3',
'RC3_VERSION: 3.0.0-rc.3\n',
));
assert.throws(
() => assertEvidenceRelease(
'2.0.0-rc.9',
'{"release":"3.0.0-rc.1"}',
() => assertAuthorityRelease(
'3.0.0-rc.4',
'RC3_VERSION: 3.0.0-rc.3\n',
),
/Prepared RC 2\.0\.0-rc\.9 does not match canonical evidence release 3\.0\.0-rc\.1/,
/Prepared RC 3\.0\.0-rc\.4 does not match authorized release 3\.0\.0-rc\.3/,
);
});
5 changes: 2 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- test-java: '17'
setup-java: '17.0.19+10'
- test-java: '21'
setup-java: '21.0.11+10'
setup-java: '21.0.11+10.0.LTS'
env:
CI: true
defaults:
Expand Down Expand Up @@ -103,9 +103,8 @@ jobs:
- name: Verify RC staging readiness
if: ${{ matrix.test-java == '17' }}
run: >-
./gradlew --no-daemon --no-build-cache verifyRound13Readiness
./gradlew --no-daemon --no-build-cache verifyRcReadiness
-PblueDependencyMode=published-artifact
-PallowRound13LatencyException=true
-PtestJavaVersion=17

- name: Archive verification evidence
Expand Down
38 changes: 27 additions & 11 deletions .github/workflows/release-rc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,23 @@ jobs:
architecture: x64
check-latest: false

- name: Restrict Gradle to the pinned JDK
- name: Set up Java 21 test JDK
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '21.0.11+10.0.LTS'
architecture: x64
check-latest: false

- name: Restrict Gradle to the pinned JDKs
shell: bash
run: |
set -euo pipefail
mkdir -p "$GRADLE_USER_HOME"
{
echo "org.gradle.java.installations.auto-detect=false"
echo "org.gradle.java.installations.auto-download=false"
echo "org.gradle.java.installations.paths=$JAVA_HOME_17_X64"
echo "org.gradle.java.installations.paths=$JAVA_HOME_17_X64,$JAVA_HOME_21_X64"
} >> "$GRADLE_USER_HOME/gradle.properties"

- name: Set up Node 22
Expand Down Expand Up @@ -109,13 +117,19 @@ jobs:
./gradlew --no-daemon dependencyPreflight \
-PblueDependencyMode=published-artifact

- name: Build and stage from published dependencies
# RC-only policy: Gradle rejects this exception unless the declared
# canonical 3.0.0-rc.1 Round 13 evidence satisfies its exact guard.
- name: Verify the Java 21 release gate
run: >-
./gradlew --no-daemon --no-build-cache clean stageRelease
./gradlew --no-daemon --no-build-cache clean releaseCheck
-PblueDependencyMode=published-artifact
-PallowRound13LatencyException=true
-PtestJavaVersion=21

- name: Build and stage from published dependencies
run: |
set -euo pipefail
JAVA_HOME="$JAVA_HOME_17_X64" \
./gradlew --no-daemon --no-build-cache clean stageRelease \
-PblueDependencyMode=published-artifact \
-PtestJavaVersion=17

- name: Publish to Maven Central
env:
Expand All @@ -126,10 +140,12 @@ jobs:
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
JRELEASER_REPRODUCIBLE: true
run: >-
./gradlew --no-daemon --no-build-cache jreleaserDeploy
-PblueDependencyMode=published-artifact
-PallowRound13LatencyException=true
run: |
set -euo pipefail
JAVA_HOME="$JAVA_HOME_17_X64" \
./gradlew --no-daemon --no-build-cache jreleaserDeploy \
-PblueDependencyMode=published-artifact \
-PtestJavaVersion=17

- name: Push release commit and tag
run: git push origin HEAD:next --follow-tags
Expand Down
34 changes: 27 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,23 @@ jobs:
architecture: x64
check-latest: false

- name: Restrict Gradle to the pinned JDK
- name: Set up Java 21 test JDK
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '21.0.11+10.0.LTS'
architecture: x64
check-latest: false

- name: Restrict Gradle to the pinned JDKs
shell: bash
run: |
set -euo pipefail
mkdir -p "$GRADLE_USER_HOME"
{
echo "org.gradle.java.installations.auto-detect=false"
echo "org.gradle.java.installations.auto-download=false"
echo "org.gradle.java.installations.paths=$JAVA_HOME_17_X64"
echo "org.gradle.java.installations.paths=$JAVA_HOME_17_X64,$JAVA_HOME_21_X64"
} >> "$GRADLE_USER_HOME/gradle.properties"

- name: Validate Gradle wrapper
Expand All @@ -62,10 +70,19 @@ jobs:
./gradlew --no-daemon dependencyPreflight
-PblueDependencyMode=published-artifact

- name: Build and stage from published dependencies
- name: Verify the Java 21 release gate
run: >-
./gradlew --no-daemon --no-build-cache clean stageRelease
./gradlew --no-daemon --no-build-cache clean releaseCheck
-PblueDependencyMode=published-artifact
-PtestJavaVersion=21

- name: Build and stage from published dependencies
run: |
set -euo pipefail
JAVA_HOME="$JAVA_HOME_17_X64" \
./gradlew --no-daemon --no-build-cache clean stageRelease \
-PblueDependencyMode=published-artifact \
-PtestJavaVersion=17

- name: Publish to Maven Central
env:
Expand All @@ -76,9 +93,12 @@ jobs:
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
JRELEASER_REPRODUCIBLE: true
run: >-
./gradlew --no-daemon --no-build-cache jreleaserDeploy
-PblueDependencyMode=published-artifact
run: |
set -euo pipefail
JAVA_HOME="$JAVA_HOME_17_X64" \
./gradlew --no-daemon --no-build-cache jreleaserDeploy \
-PblueDependencyMode=published-artifact \
-PtestJavaVersion=17

- name: Archive release evidence
uses: actions/upload-artifact@v4
Expand Down
Loading
Loading