Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
402 commits
Select commit Hold shift + click to select a range
9e5704e
Cover runtime-sized UnsafeBlit rejection
SunSi12138 Aug 30, 2026
39fac33
Cover manifest provider UnsafeBlit guard
SunSi12138 Aug 30, 2026
39ab8da
Add sixth review regression coverage
SunSi12138 Aug 30, 2026
50bc47d
Fix sixth review regression assertion
SunSi12138 Aug 30, 2026
6e38642
Fix Codec policy initializer syntax
SunSi12138 Aug 30, 2026
abdc393
fix: include closed adapter target schema in codec identity
SunSi12138 Aug 30, 2026
b285850
fix: tighten deterministic codec wire identities
SunSi12138 Aug 30, 2026
2321718
fix: reject nested runtime-sized unsafe layouts
SunSi12138 Aug 31, 2026
54132b0
fix: restrict unsafe blit to stable 64-bit ABI
SunSi12138 Aug 31, 2026
9af64cc
fix: reject non-little-endian runtime wire platform
SunSi12138 Aug 31, 2026
2d02c0b
test: cover unsafe blit ABI and endian guards
SunSi12138 Aug 31, 2026
b7a4035
test: cover seventh deterministic identity review cases
SunSi12138 Aug 31, 2026
f2c1775
fix: compile closed adapter identity helper
SunSi12138 Aug 31, 2026
739e10c
fix: move endian guard to runtime context initialization
SunSi12138 Aug 31, 2026
ade9f07
fix: canonicalize root string codec as UTF-8
SunSi12138 Aug 31, 2026
d23d7f4
fix: enforce little-endian wire platform at module load
SunSi12138 Aug 31, 2026
bdf528a
fix: align deterministic string identity with UTF-8 framing
SunSi12138 Aug 31, 2026
e130402
test: cover canonical UTF-8 root string framing
SunSi12138 Aug 31, 2026
4c6024a
fix: assert SharpLink string decode error code
SunSi12138 Aug 31, 2026
a592d35
fix: compare canonical string length as uint
SunSi12138 Aug 31, 2026
f67cbd1
fix: avoid adapter identity pattern variable collisions
SunSi12138 Aug 31, 2026
551c595
test: verify DTO string canonical UTF-8 framing
SunSi12138 Aug 31, 2026
c06abb5
fix: keep adapter lifecycle id out of wire identity
SunSi12138 Aug 31, 2026
8a4b9e4
fix: preserve v2 root string wire format
SunSi12138 Aug 31, 2026
f541e61
fix: treat adapter codecs as opaque identities
SunSi12138 Aug 31, 2026
62cdd15
docs: define opaque adapter compatibility boundary
SunSi12138 Aug 31, 2026
4ac2ccb
fix: align codec identities with opaque adapters and v2 wire
SunSi12138 Aug 31, 2026
ce3d4c6
fix: canonicalize generated string and datetimeoffset wire
SunSi12138 Aug 31, 2026
7271269
fix: preserve utf16 dto string fast path
SunSi12138 Aug 31, 2026
59f71ac
test: cover opaque adapters and v2 string wire
SunSi12138 Aug 31, 2026
7231abe
test: preserve v2 string compatibility
SunSi12138 Aug 31, 2026
5642e12
test: cover canonical generated datetimeoffset wire
SunSi12138 Aug 31, 2026
16f32dc
fix: keep canonical datetimeoffset span scoped
SunSi12138 Aug 31, 2026
f8b0228
test: preserve generated utf16 code units
SunSi12138 Aug 31, 2026
8ee1fe5
test: align generated string protocol coverage
SunSi12138 Aug 31, 2026
d39f0e9
refactor: name generated string helper for utf16
SunSi12138 Aug 31, 2026
eb5f2eb
test: align exact string sizing with utf16 wire
github-actions[bot] Aug 31, 2026
60de434
test: lock canonical generated DateTimeOffset wire
SunSi12138 Aug 31, 2026
7c71788
docs: define opaque adapter semantic identity boundary
SunSi12138 Aug 31, 2026
4b66210
test: avoid LINQ clone in DateTimeOffset regression
SunSi12138 Aug 31, 2026
544955c
chore: scan review compatibility surfaces
SunSi12138 Aug 31, 2026
6fad417
chore: apply latest review fixes
SunSi12138 Aug 31, 2026
fa59b2c
chore: rerun review patch with project validation
SunSi12138 Aug 31, 2026
307aa39
chore: validate review patch with current dotnet cli
SunSi12138 Aug 31, 2026
d6525eb
chore: validate enum identity propagation
SunSi12138 Aug 31, 2026
06c9b78
chore: isolate direct and dto enum identity tests
SunSi12138 Aug 31, 2026
f2cf745
chore: scan PR415 review markers
SunSi12138 Aug 31, 2026
cb54814
chore: validate PR415 review fixes
SunSi12138 Aug 31, 2026
36cbf26
chore: run PR415 review validation
SunSi12138 Aug 31, 2026
05c59ce
chore: harden PR415 review runner
SunSi12138 Aug 31, 2026
4c22f1b
chore: add protocol boundary review validation
SunSi12138 Aug 31, 2026
0ee0433
chore: run final PR415 review validation
SunSi12138 Aug 31, 2026
42cb811
fix: fence the new DTO wire generation
SunSi12138 Aug 31, 2026
06dedf5
fix: reject stale negotiated protocol minors
SunSi12138 Aug 31, 2026
893badb
test: cover protocol wire generation boundary
SunSi12138 Aug 31, 2026
b0e0f34
chore: run trusted final review patch
SunSi12138 Aug 31, 2026
4857b86
fix: close deterministic identity review gaps
SunSi12138 Aug 31, 2026
dbe8b02
fix: persist enum semantic identity in contract manifest
SunSi12138 Aug 31, 2026
fab5c80
fix: feed enum codec hashes into contract manifest
SunSi12138 Aug 31, 2026
b21aae2
fix: emit enum codec hash in contract baseline
SunSi12138 Aug 31, 2026
c3982ad
fix: compare enum semantic identity in baselines
SunSi12138 Aug 31, 2026
2989044
test: cover enum mapping contract baseline identity
SunSi12138 Aug 31, 2026
1471828
fix: recursively identify adapter targets
SunSi12138 Aug 31, 2026
c8f6191
fix: align codec hashes with runtime selection
SunSi12138 Aug 31, 2026
b6f1895
test: cover closed adapter and nullable identity
SunSi12138 Aug 31, 2026
d1d861f
test: pin builtin collection wire strategies
SunSi12138 Aug 31, 2026
35567a4
test: add auto-layout compatibility evidence
SunSi12138 Aug 31, 2026
30ee829
test: retain auto-layout compatibility fixtures
SunSi12138 Aug 31, 2026
206738f
test: keep auto-layout fixture indexes in sync
SunSi12138 Aug 31, 2026
584143b
test: expose auto-layout compatibility fixtures
SunSi12138 Aug 31, 2026
262e82d
test: retain auto-layout evidence in codec matrix
SunSi12138 Aug 31, 2026
291b681
test: record DateTimeOffset container evidence without marshal offsets
SunSi12138 Aug 31, 2026
0232fee
test: fix nullable contract codec identity regression
SunSi12138 Aug 31, 2026
993f27b
test: link auto layout evidence into android probe
SunSi12138 Aug 31, 2026
eba1a73
test: link auto layout evidence into ios probe
SunSi12138 Aug 31, 2026
2e9c99b
test: link auto layout evidence into browser probe
SunSi12138 Aug 31, 2026
4dbb549
test: sync compatibility fixture policy digest
SunSi12138 Aug 31, 2026
3201c75
test: sync portable compatibility policy digest
SunSi12138 Aug 31, 2026
1c95cf6
test: focus nullable regression on selected wire identity
SunSi12138 Aug 31, 2026
529b5a5
ci: run non-Mono codec verification before Mono
SunSi12138 Sep 1, 2026
920d523
ci: remove Mono codec matrix from mobile evidence
SunSi12138 Sep 1, 2026
614d50e
test: detect CoreCLR on experimental iOS lane
SunSi12138 Sep 1, 2026
81364e2
test: add experimental iOS CoreCLR target
SunSi12138 Sep 1, 2026
4a108be
test: assert experimental iOS CoreCLR runtime
SunSi12138 Sep 1, 2026
82b148c
ci: add experimental iOS CoreCLR codec evidence
SunSi12138 Sep 1, 2026
79319ae
ci: allow net11 iOS CoreCLR portable evidence
SunSi12138 Sep 1, 2026
42a7a67
ci: validate net11 iOS CoreCLR evidence directly
SunSi12138 Sep 1, 2026
a04bd43
ci: cross-check desktop corpus on iOS CoreCLR
SunSi12138 Sep 1, 2026
63cc97b
ci: disable unsupported iOS CoreCLR debugger mode
SunSi12138 Sep 1, 2026
cebe14e
ci: harden experimental iOS CoreCLR simulator probe
SunSi12138 Sep 1, 2026
fb1b4ab
test: validate runtime manifests by target framework generation
SunSi12138 Sep 1, 2026
39979a5
feat: advise on AutoLayout UnsafeBlit payloads
SunSi12138 Sep 1, 2026
c7fe26a
test: expand UnsafeBlit layout compatibility evidence
SunSi12138 Sep 1, 2026
66b4a79
test: harden UnsafeBlit layout evidence harness
SunSi12138 Sep 1, 2026
2161b8d
fix: include split UnsafeBlit layout matrix
SunSi12138 Sep 1, 2026
a160997
fix: include split UnsafeBlit layout matrix
SunSi12138 Sep 1, 2026
9d6ec6f
fix: include split UnsafeBlit layout matrix
SunSi12138 Sep 1, 2026
27612ee
test: retain UnsafeBlit portable layout domain
SunSi12138 Sep 1, 2026
442e969
refactor: resolve final codec plans before hashing
SunSi12138 Sep 1, 2026
881c90f
refactor: hash resolved final codec plans
SunSi12138 Sep 1, 2026
0c42b2a
refactor: drive UnsafeBlit guidance from final codec plans
SunSi12138 Sep 1, 2026
8a0dde2
refactor: split final codec plan IR models
SunSi12138 Sep 1, 2026
2c7230c
refactor: split final codec physical layout resolver
SunSi12138 Sep 1, 2026
f758fc6
refactor: separate final codec selection from physical layout
SunSi12138 Sep 1, 2026
7e67d55
fix: type explicit layout offsets in codec plan
SunSi12138 Sep 1, 2026
144ca3b
refactor: bump deterministic codec generated ABI
SunSi12138 Sep 1, 2026
94b6c23
test: expose final codec plan generator failures
SunSi12138 Sep 1, 2026
f6ef804
refactor: stamp final codec plan ABI
SunSi12138 Sep 1, 2026
9f517e1
refactor: hash only pre-resolved codec graphs
SunSi12138 Sep 1, 2026
7fbeb29
refactor: resolve final codec graphs once per analysis pass
SunSi12138 Sep 1, 2026
2159b33
fix: retain reached enum codec metadata
SunSi12138 Sep 1, 2026
e3680b0
fix: canonicalize DateTimeOffset collection wire
SunSi12138 Sep 1, 2026
152489b
fix: decode DateTimeOffset collections canonically
SunSi12138 Sep 1, 2026
7ca52c3
test: pin canonical DateTimeOffset collection wire
SunSi12138 Sep 1, 2026
b89570c
test: fix segmented DateTimeOffset fixture
SunSi12138 Sep 1, 2026
06db74e
refactor: hash canonical DateTimeOffset collection wire
SunSi12138 Sep 1, 2026
f052995
fix: keep canonical DateTimeOffset parsing scoped
SunSi12138 Sep 1, 2026
e8d75c4
refactor: carry normalized timeout and layout diagnostics
SunSi12138 Sep 1, 2026
4a15fc2
refactor: consume resolved graph for layout diagnostics
SunSi12138 Sep 1, 2026
1e44820
refactor: attach UnsafeBlit layout diagnostics to codec analysis
SunSi12138 Sep 1, 2026
80c75e9
refactor: report UnsafeBlit layout guidance from main analysis
SunSi12138 Sep 1, 2026
200d743
refactor: remove duplicate UnsafeBlit diagnostic generator pass
SunSi12138 Sep 1, 2026
fbef966
test: validate DateTimeOffset canonical wire without CLR padding forgery
SunSi12138 Sep 1, 2026
fd96c5f
test: exercise UnsafeBlit guidance through main generator
SunSi12138 Sep 1, 2026
559f1b8
refactor: hash normalized RPC timeout ticks
SunSi12138 Sep 1, 2026
32dff8b
test: pin normalized timeout semantic identity
SunSi12138 Sep 1, 2026
e5a7567
refactor: remove duplicate UnsafeBlit graph resolution helper
SunSi12138 Sep 1, 2026
4490128
refactor: emit normalized timeout ticks
SunSi12138 Sep 1, 2026
25978bb
refactor: emit normalized timeout ticks
SunSi12138 Sep 1, 2026
7f7964c
refactor: normalize timeout policy identity
SunSi12138 Sep 1, 2026
3dacc0b
test: migrate generated manifest fixtures to ABI v4
SunSi12138 Sep 1, 2026
7022561
refactor: split generator analysis responsibilities
SunSi12138 Sep 1, 2026
4627696
refactor: split generator method semantics
SunSi12138 Sep 1, 2026
0561582
refactor: split generator contract modeling
SunSi12138 Sep 1, 2026
2e731af
refactor: store normalized timeout semantics
SunSi12138 Sep 1, 2026
28075ef
refactor: normalize method timeout once
SunSi12138 Sep 1, 2026
0771449
refactor: isolate contract model construction
SunSi12138 Sep 1, 2026
2526b90
refactor: isolate referenced contract analysis
SunSi12138 Sep 1, 2026
ace856c
refactor: make final codec graph complete at resolution
SunSi12138 Sep 1, 2026
905d7eb
refactor: isolate final codec selection
SunSi12138 Sep 1, 2026
4c9e79c
refactor: hash only resolved final codec graph
SunSi12138 Sep 1, 2026
62848d4
refactor: require collection strategy in resolved plan
SunSi12138 Sep 1, 2026
1d38365
refactor: guard UnsafeBlit framework raw ABI
SunSi12138 Sep 1, 2026
a4d21b0
test: cover UnsafeBlit framework raw ABI guard
SunSi12138 Sep 1, 2026
6d8b93d
style: format final codec identity hasher
SunSi12138 Sep 1, 2026
95e3195
fix: complete generator hash value model
SunSi12138 Sep 1, 2026
05ed331
style: normalize final codec plan file endings
SunSi12138 Sep 1, 2026
c6b25fa
style: normalize generator partial file endings
SunSi12138 Sep 1, 2026
8598318
style: normalize generator method semantics ending
SunSi12138 Sep 1, 2026
92398e1
style: normalize generator partial file endings
SunSi12138 Sep 1, 2026
1212d63
chore: remove resolved generator maintainability allowance
SunSi12138 Sep 1, 2026
d3d6566
refactor: declare DateTimeOffset raw ABI shape
SunSi12138 Sep 1, 2026
908319f
refactor: centralize builtin collection wire catalog
SunSi12138 Sep 1, 2026
bbd1336
fix: restore generator DTO support models
SunSi12138 Sep 1, 2026
f42b58e
refactor: link builtin collection wire catalog
SunSi12138 Sep 1, 2026
c326a0c
refactor: resolve builtin collections from shared catalog
SunSi12138 Sep 1, 2026
1e64489
fix: normalize builtin collection type aliases
SunSi12138 Sep 1, 2026
cafbb50
test: lock builtin collection catalog to runtime codecs
SunSi12138 Sep 1, 2026
d743ef4
test: lock generator builtin candidates to shared catalog
SunSi12138 Sep 1, 2026
8f871ef
test: align timeout descriptor assertion with tick canonicalization
SunSi12138 Sep 1, 2026
040e1c2
test: keep timeout assertion change isolated
SunSi12138 Sep 1, 2026
646b86c
test: cover final codec plan acceptance
SunSi12138 Sep 1, 2026
53b6587
test: tighten final plan acceptance coverage
SunSi12138 Sep 1, 2026
16cc440
test: validate propagated unsafe blit identity
SunSi12138 Sep 1, 2026
c5b4ded
test: inspect raw nullable codec identity
SunSi12138 Sep 2, 2026
f07a135
test: locate nullable final codec hash
SunSi12138 Sep 2, 2026
4e2eee1
refactor: gate generated codecs on final plan reachability
SunSi12138 Sep 2, 2026
601e214
refactor: drive generated factories from final codec graph
SunSi12138 Sep 2, 2026
19c7ca2
style: restore codec ownership final newline
SunSi12138 Sep 2, 2026
42c82c4
refactor: let final resolver own runtime codec selection
SunSi12138 Sep 2, 2026
4a1df74
refactor: carry final codec emission bindings in resolved plan
SunSi12138 Sep 2, 2026
a69462c
refactor: resolve codec emission bindings into final plan
SunSi12138 Sep 2, 2026
e5ca403
refactor: derive codec ownership from resolved plan graph
SunSi12138 Sep 2, 2026
c2dd98e
fix: expose resolved codec dependency traversal
SunSi12138 Sep 2, 2026
8c3d679
refactor: keep DTO analysis to codec candidate discovery
SunSi12138 Sep 2, 2026
5adb804
refactor: perform codec policy selection in final plan resolver
SunSi12138 Sep 2, 2026
6b2a506
refactor: derive codec emission from resolved plan graph
SunSi12138 Sep 2, 2026
6c56639
fix: keep unsupported payloads outside codec routes
SunSi12138 Sep 2, 2026
23996dd
fix: preserve generated UTF-8 string wire semantics
SunSi12138 Sep 2, 2026
a1f96ec
revert: keep v2 UTF-16 string wire semantics
SunSi12138 Sep 2, 2026
904de26
test: align generated string integration evidence with UTF-16 wire
SunSi12138 Sep 2, 2026
3eac42f
chore: apply PR 415 integration evidence patch
SunSi12138 Sep 2, 2026
a3e9538
chore: retry PR 415 integration evidence patch
SunSi12138 Sep 2, 2026
2fcb57c
test: align DateTimeOffset integration evidence with canonical wire
github-actions[bot] Sep 2, 2026
dd708be
chore: dispatch final PR 415 validation
SunSi12138 Sep 2, 2026
102d394
chore: remove PR 415 CI dispatcher
github-actions[bot] Sep 2, 2026
b2e8446
chore: stage AOT unsafe blit plan fix
SunSi12138 Sep 2, 2026
cdf1154
chore: add temporary AOT patch script
SunSi12138 Sep 2, 2026
b7966bd
chore: fix temporary AOT patch workflow
SunSi12138 Sep 2, 2026
a1779bb
fix: derive UnsafeBlit AOT guards from resolved plan
github-actions[bot] Sep 2, 2026
7dc4446
fix: preserve resolved codec identity boundaries
github-actions[bot] Sep 2, 2026
9681db9
fix: align codec selection guards with emission
github-actions[bot] Sep 2, 2026
5029a8e
fix: bind referenced codec dependencies by type and hash
SunSi12138 Sep 3, 2026
3e60fbb
fix: bind generated dependencies to runtime assemblies
SunSi12138 Sep 3, 2026
937c6f8
fix: preserve referenced codec baseline and shutdown identity
SunSi12138 Sep 3, 2026
65be5e1
fix: retain final codec identities in contract baseline
SunSi12138 Sep 3, 2026
abfd361
fix: compare unresolved final codec identities in baselines
SunSi12138 Sep 3, 2026
7cbbd10
test: cover unsafe blit baseline identity changes
SunSi12138 Sep 3, 2026
8da8867
fix: hash effective DTO null semantics
SunSi12138 Sep 3, 2026
01987f3
test: accept retained final payload identities
SunSi12138 Sep 3, 2026
70593c2
test: cover effective DTO null identity
SunSi12138 Sep 3, 2026
ceb19f1
test: align optional DTO nullability identity expectation
SunSi12138 Sep 3, 2026
078de98
test: restore unrelated generator fixture expectations
SunSi12138 Sep 3, 2026
de2b694
fix: materialize generated codecs in owner scope
SunSi12138 Sep 4, 2026
5ef1065
test: keep referenced codec construction in provider scope
SunSi12138 Sep 4, 2026
221d770
fix: persist baseline compatibility semantics
SunSi12138 Sep 4, 2026
2ad435e
fix: emit effective baseline semantics
SunSi12138 Sep 4, 2026
e25522a
fix: compare effective baseline semantics
SunSi12138 Sep 4, 2026
b38d37a
test: cover contract compatibility projection gaps
SunSi12138 Sep 4, 2026
2de459d
fix: canonicalize identical explicit layout aliases
SunSi12138 Sep 4, 2026
f534084
test: isolate client dependency validation from catalog
SunSi12138 Sep 4, 2026
814c6df
test: fix compatibility projection regression fixtures
SunSi12138 Sep 4, 2026
25db8db
test: keep dto shape regression on generated codec path
SunSi12138 Sep 4, 2026
edeb097
fix: freeze generated codec owner resolution scope
SunSi12138 Sep 4, 2026
c027b8e
fix: bind generated registrations to frozen owner providers
SunSi12138 Sep 4, 2026
daef5df
test: reject endpoint codec injection into referenced graph
SunSi12138 Sep 4, 2026
4cae114
test: cover local frozen owner resolution
SunSi12138 Sep 4, 2026
45334ee
test: avoid unassigned fallback fixture field
SunSi12138 Sep 4, 2026
820f202
test: retry transient Android layout result reads
SunSi12138 Sep 4, 2026
2153db7
ci: make preview iOS arm64 evidence non-blocking
SunSi12138 Sep 4, 2026
7eda38d
ci: fix Android layout retry syntax
SunSi12138 Sep 4, 2026
671291d
test: build dependency fixtures in solution configurations
SunSi12138 Sep 4, 2026
c9c5e2a
fix: make generated dependency binding trim safe
SunSi12138 Sep 4, 2026
ffa82bd
ci: retry Android codec result reads
SunSi12138 Sep 4, 2026
814b471
test: cover generated dependency version binding
SunSi12138 Sep 4, 2026
fb74f22
fix: preserve full generated dependency binding
SunSi12138 Sep 4, 2026
92b4f0a
test: cover contract baseline assembly identity
SunSi12138 Sep 4, 2026
fbe6445
fix: persist assembly identity in contract baseline
SunSi12138 Sep 4, 2026
99950c0
fix: compare contract assembly identity
SunSi12138 Sep 4, 2026
5760596
fix: project assembly identity into contract manifest
SunSi12138 Sep 4, 2026
4622805
test: cover global referenced codec dependency pinning
SunSi12138 Sep 4, 2026
88edee7
fix: retain referenced hashes for global codec graph
SunSi12138 Sep 4, 2026
a0c6fff
fix: collect global referenced codec hashes
SunSi12138 Sep 4, 2026
54b04a6
fix: emit all referenced codec dependency hashes
SunSi12138 Sep 4, 2026
49d0388
fix: route referenced hashes into generated manifest
SunSi12138 Sep 4, 2026
0b1c679
fix: require running typed codec dependencies
SunSi12138 Sep 4, 2026
97d1e93
fix: require running typed codec dependencies
SunSi12138 Sep 4, 2026
9d9a47b
test: reject typed dependants of draining modules
SunSi12138 Sep 4, 2026
d8e4f9c
fix: revalidate replacement dependencies before publish
SunSi12138 Sep 4, 2026
a7d4fc4
fix: revalidate replacement dependencies before publish
SunSi12138 Sep 4, 2026
25a1ee9
fix: begin dynamic drain under registry lock
SunSi12138 Sep 4, 2026
30a32ca
fix: begin dynamic drain under registry lock
SunSi12138 Sep 4, 2026
3712154
test: preserve published union tag reservations
SunSi12138 Sep 4, 2026
1765562
fix: preserve published union tag reservations
SunSi12138 Sep 4, 2026
82477e4
test: retain removed union reservations
SunSi12138 Sep 4, 2026
c9bc323
revert: allow union schema evolution across exact-match versions
SunSi12138 Sep 4, 2026
0cfc64b
revert: keep assembly identity out of compatibility baseline
SunSi12138 Sep 4, 2026
70a323b
revert: avoid redundant drain reordering
SunSi12138 Sep 4, 2026
8322579
fix: validate generated dependency assembly identity
SunSi12138 Sep 4, 2026
30cf726
test: align replacement dependency failure expectation
SunSi12138 Sep 4, 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
195 changes: 76 additions & 119 deletions .github/workflows/codec-mobile-compatibility.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Codec Mobile Evidence

# This workflow retains explicitly documented producer -> consumer edges.
# It is not an all-to-all mobile compatibility matrix.
# Non-Mono mobile codec evidence.
# Android CoreCLR targets .NET 10; experimental iOS CoreCLR targets .NET 11 preview.

permissions:
contents: read
Expand Down Expand Up @@ -104,8 +104,6 @@ jobs:
echo "ANDROID_AVD_HOME=$ANDROID_AVD_HOME" >> "$GITHUB_ENV"
mkdir -p "$ANDROID_AVD_HOME"
echo no | "$AVDMANAGER" create avd --force --name "$ANDROID_AVD" --package "system-images;android-$ANDROID_API;google_apis;x86_64" --device pixel_6
echo "Visible AVDs:"
emulator -list-avds
emulator -list-avds | grep -Fx "$ANDROID_AVD"
nohup emulator -avd "$ANDROID_AVD" -no-window -noaudio -no-boot-anim -no-snapshot -gpu swiftshader_indirect -accel on > artifacts-android-emulator.log 2>&1 &
if ! timeout 180 adb wait-for-device; then
Expand All @@ -127,25 +125,6 @@ jobs:
adb shell settings put global animator_duration_scale 0
adb shell getprop ro.product.cpu.abi

- name: Build and run Android Mono producer
shell: bash
run: |
rm -rf test/SharpLink.CodecCompatibility.Android/bin test/SharpLink.CodecCompatibility.Android/obj
dotnet build -c Debug -f net10.0-android -r android-x64 \
test/SharpLink.CodecCompatibility.Android/SharpLink.CodecCompatibility.Android.csproj \
-t:SignAndroidPackage \
-p:CodecRuntime=mono \
-p:AndroidPackageFormats=apk \
-p:AndroidBuildApplicationPackage=true
apk="$(find test/SharpLink.CodecCompatibility.Android/bin/Debug -name '*-Signed.apk' -type f | head -n 1)"
test -n "$apk"
cp "$apk" artifacts/codec-compat/android-mono.apk
adb install -r "$apk"
node test/SharpLink.CodecCompatibility.Android/run-android.mjs \
produce artifacts/codec-compat/android-mono-corpus \
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" Mono
adb uninstall com.sharplink.codeccompat || true

- name: Build and run Android CoreCLR producer
shell: bash
run: |
Expand All @@ -165,34 +144,12 @@ jobs:
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" CoreCLR
adb uninstall com.sharplink.codeccompat || true

- name: Assemble Android producer fan-in
- name: Assemble Android CoreCLR producer fan-in
shell: bash
run: |
mkdir -p artifacts/codec-compat/producers/codec-mobile-corpus-android-x64-mono
mkdir -p artifacts/codec-compat/producers/codec-mobile-corpus-android-x64-coreclr
cp -R artifacts/codec-compat/android-mono-corpus/. artifacts/codec-compat/producers/codec-mobile-corpus-android-x64-mono/
cp -R artifacts/codec-compat/android-coreclr-corpus/. artifacts/codec-compat/producers/codec-mobile-corpus-android-x64-coreclr/

- name: Verify documented edges on Android Mono
shell: bash
env:
SHARPLINK_SKIP_BUILTIN_RAW: '1'
run: |
adb install -r artifacts/codec-compat/android-mono.apk
node test/SharpLink.CodecCompatibility.Android/run-android.mjs \
verify artifacts/codec-compat/producers \
artifacts/codec-compat/android-mono-verification/verification.json \
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" Mono
adb uninstall com.sharplink.codeccompat || true

- name: Append raw evidence for Android Mono
run: |
node test/SharpLink.CodecCompatibility.Browser/portable-artifacts.mjs \
append-raw artifacts/codec-compat/android-mono-verification/verification.json \
artifacts/codec-compat/producers artifacts/codec-compat/android-mono-corpus
node test/SharpLink.CodecCompatibility.Browser/portable-artifacts.mjs \
check-report artifacts/codec-compat/android-mono-verification/verification.json

- name: Verify documented edges on Android CoreCLR
shell: bash
env:
Expand All @@ -203,6 +160,7 @@ jobs:
verify artifacts/codec-compat/producers \
artifacts/codec-compat/android-coreclr-verification/verification.json \
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" CoreCLR
adb uninstall com.sharplink.codeccompat || true

- name: Append raw evidence for Android CoreCLR
run: |
Expand All @@ -212,21 +170,20 @@ jobs:
node test/SharpLink.CodecCompatibility.Browser/portable-artifacts.mjs \
check-report artifacts/codec-compat/android-coreclr-verification/verification.json

- name: Upload Android evidence
- name: Upload Android CoreCLR evidence
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: codec-mobile-evidence-android-x64
path: |
artifacts/codec-compat/android-mono-corpus
artifacts/codec-compat/android-coreclr-corpus
artifacts/codec-compat/android-mono-verification/verification.json
artifacts/codec-compat/android-coreclr-verification/verification.json
artifacts/codec-compat/android-coreclr-verification/verification-progress.log
artifacts-android-emulator.log
if-no-files-found: warn
retention-days: 30

ios:
ios-coreclr:
needs: desktop-reference
strategy:
fail-fast: false
Expand All @@ -235,22 +192,39 @@ jobs:
- id: ios-simulator-x64
os: macos-26-intel
rid: iossimulator-x64
experimental: false
- id: ios-simulator-arm64
os: macos-26
rid: iossimulator-arm64
experimental: true
continue-on-error: ${{ matrix.experimental }}
runs-on: ${{ matrix.os }}
timeout-minutes: 45
timeout-minutes: 50
env:
DOTNET_CLI_TELEMETRY_OPTOUT: '1'
SHARPLINK_COMMIT: ${{ github.sha }}
DOTNET_11_SDK: 11.0.100-preview.7.26381.103
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup .NET
- name: Pin experimental .NET 11 SDK for iOS CoreCLR
shell: bash
run: |
cat > global.json <<EOF
{
"sdk": {
"version": "$DOTNET_11_SDK",
"rollForward": "disable",
"allowPrerelease": true
}
}
EOF

- name: Setup .NET 11 preview
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
dotnet-version: 10.0.x
dotnet-version: 11.0.100-preview.7.26381.103

- name: Show Xcode version
run: xcodebuild -version
Expand All @@ -260,7 +234,10 @@ jobs:

- name: Record SDK version
shell: bash
run: echo "SHARPLINK_SDK_VERSION=$(dotnet --version)" >> "$GITHUB_ENV"
run: |
actual="$(dotnet --version)"
test "$actual" = "$DOTNET_11_SDK"
echo "SHARPLINK_SDK_VERSION=$actual" >> "$GITHUB_ENV"

- name: Download canonical desktop corpus
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
Expand Down Expand Up @@ -295,103 +272,83 @@ jobs:
done
xcrun simctl list devices | grep "$udid" | grep '(Booted)'

- name: Build and run iOS simulator producer
- name: Build and run experimental iOS CoreCLR producer
shell: bash
run: |
rm -rf test/SharpLink.CodecCompatibility.iOS/bin test/SharpLink.CodecCompatibility.iOS/obj
dotnet build -c Debug -f net10.0-ios -r "${{ matrix.rid }}" \
test/SharpLink.CodecCompatibility.iOS/SharpLink.CodecCompatibility.iOS.csproj
app="$(find test/SharpLink.CodecCompatibility.iOS/bin/Debug -path "*/${{ matrix.rid }}/*" -name '*.app' -type d | head -n 1)"
dotnet build -c Debug -f net11.0-ios -r "${{ matrix.rid }}" \
test/SharpLink.CodecCompatibility.iOS/SharpLink.CodecCompatibility.iOS.csproj \
-p:CodecRuntime=coreclr
app="$(find test/SharpLink.CodecCompatibility.iOS/bin/Debug -path "*/net11.0-ios/${{ matrix.rid }}/*" -name '*.app' -type d | head -n 1)"
test -n "$app"
xcrun simctl install "$IOS_SIMULATOR_UDID" "$app"
node test/SharpLink.CodecCompatibility.iOS/run-ios.mjs \
produce artifacts/codec-compat/ios-corpus \
produce artifacts/codec-compat/ios-coreclr-corpus \
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" \
"net10.0-ios/${{ matrix.rid }}"
"net11.0-ios/${{ matrix.rid }}"

- name: Assemble iOS producer fan-in
- name: Assemble iOS CoreCLR producer fan-in
shell: bash
run: |
mkdir -p artifacts/codec-compat/producers/codec-mobile-corpus-${{ matrix.id }}
cp -R artifacts/codec-compat/ios-corpus/. artifacts/codec-compat/producers/codec-mobile-corpus-${{ matrix.id }}/
mkdir -p artifacts/codec-compat/producers/codec-mobile-corpus-${{ matrix.id }}-coreclr
cp -R artifacts/codec-compat/ios-coreclr-corpus/. \
artifacts/codec-compat/producers/codec-mobile-corpus-${{ matrix.id }}-coreclr/

- name: Verify documented edges on iOS simulator
- name: Verify desktop and self edges on experimental iOS CoreCLR
shell: bash
env:
SHARPLINK_SKIP_BUILTIN_RAW: '1'
run: |
node test/SharpLink.CodecCompatibility.iOS/run-ios.mjs \
verify artifacts/codec-compat/producers \
artifacts/codec-compat/ios-verification/verification.json \
artifacts/codec-compat/ios-coreclr-verification/verification.json \
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" \
"net10.0-ios/${{ matrix.rid }}"
"net11.0-ios/${{ matrix.rid }}"

- name: Append raw evidence for iOS simulator
- name: Validate iOS CoreCLR semantic evidence
shell: bash
run: |
node test/SharpLink.CodecCompatibility.Browser/portable-artifacts.mjs \
append-raw artifacts/codec-compat/ios-verification/verification.json \
artifacts/codec-compat/producers artifacts/codec-compat/ios-corpus
node test/SharpLink.CodecCompatibility.Browser/portable-artifacts.mjs \
check-report artifacts/codec-compat/ios-verification/verification.json

- name: Upload iOS simulator evidence
node - <<'NODE'
const fs = require('fs');
const report = JSON.parse(fs.readFileSync('artifacts/codec-compat/ios-coreclr-verification/verification.json', 'utf8'));
if (report?.schemaVersion !== 1) throw new Error('Unexpected iOS verification schema.');
if (report?.consumer?.runtimeFamily !== 'CoreCLR') throw new Error(`Expected CoreCLR, got ${report?.consumer?.runtimeFamily}`);
if (!String(report?.consumer?.platformTag ?? '').endsWith('-coreclr-net11')) throw new Error(`Unexpected platform tag ${report?.consumer?.platformTag}`);
const expectedProducers = new Set(['linux-x64-hosted-desktop-coreclr-net10', report.consumer.platformTag]);
const actualProducers = new Set((report?.results ?? []).map(item => String(item?.producer ?? '')));
if (actualProducers.size !== expectedProducers.size || [...expectedProducers].some(value => !actualProducers.has(value))) {
throw new Error(`Unexpected iOS producer set: ${[...actualProducers].sort().join(', ')}`);
}
const blocking = (report?.results ?? []).filter(item => item?.blocking).length;
if (blocking !== 0) throw new Error(`iOS CoreCLR verification has ${blocking} blocking result(s).`);
console.log(`Validated iOS CoreCLR cross-platform semantic report with ${report?.results?.length ?? 0} result(s) and no blockers.`);
NODE

- name: Upload experimental iOS CoreCLR evidence
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: codec-mobile-evidence-${{ matrix.id }}
name: codec-mobile-evidence-${{ matrix.id }}-coreclr
path: |
artifacts/codec-compat/ios-corpus
artifacts/codec-compat/ios-verification/verification.json
artifacts/codec-compat/ios-coreclr-corpus
artifacts/codec-compat/ios-coreclr-verification/verification.json
if-no-files-found: warn
retention-days: 30

summary:
needs: [android, ios]
needs: [android, ios-coreclr]
if: always()
runs-on: ubuntu-24.04
timeout-minutes: 15
env:
DOTNET_CLI_TELEMETRY_OPTOUT: '1'
SHARPLINK_COMMIT: ${{ github.sha }}
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup .NET
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
dotnet-version: 10.0.x

- name: Download mobile verification evidence
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: codec-mobile-evidence-*
path: artifacts/codec-compat/verifications
merge-multiple: false

- name: Require every documented mobile consumer report
- name: Require blocking non-Mono mobile evidence
shell: bash
env:
ANDROID_RESULT: ${{ needs.android.result }}
IOS_RESULT: ${{ needs.ios-coreclr.result }}
run: |
count="$(find artifacts/codec-compat/verifications -name verification.json -type f | wc -l | tr -d ' ')"
if [[ "$count" != "4" ]]; then
echo "::error::Expected 4 mobile consumer reports, found $count."
echo "Android CoreCLR (.NET 10): $ANDROID_RESULT"
echo "iOS CoreCLR (.NET 11 preview; x64 blocking, arm64 experimental): $IOS_RESULT"
if [[ "$ANDROID_RESULT" != "success" || "$IOS_RESULT" != "success" ]]; then
Comment thread
SunSi12138 marked this conversation as resolved.
exit 1
fi

- name: Aggregate documented mobile edge evidence
run: >-
dotnet run -c Release
--project test/SharpLink.CodecCompatibility/SharpLink.CodecCompatibility.csproj
-- summarize
--input artifacts/codec-compat/verifications
--output artifacts/codec-compat/summary
--profile mobile

- name: Upload mobile evidence summary
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: codec-mobile-evidence-summary
path: artifacts/codec-compat/summary
if-no-files-found: warn
retention-days: 30
Loading
Loading