Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
730 commits
Select commit Hold shift + click to select a range
484a087
fix(runtime): align pre-credit abort surface with token ownership
SunSi12138 Aug 19, 2026
e75c073
fix(runtime): remove unused request-level pre-credit abort
SunSi12138 Aug 19, 2026
8e0ae95
test(runtime): cover generated invocation cancellation
SunSi12138 Aug 19, 2026
3d2c68f
perf(runtime): add starved process-memory evidence
SunSi12138 Aug 19, 2026
f1fb5bd
perf(runtime): expose starved process-memory evidence
SunSi12138 Aug 19, 2026
3a47095
perf(runtime): observe natural starved pool retention
SunSi12138 Aug 19, 2026
48df5cc
style(runtime): trim starved memory runner comment
SunSi12138 Aug 19, 2026
b483f73
perf(runtime): fix starved-memory warmup flow limits
SunSi12138 Aug 19, 2026
5b9203d
feat(runtime): expose independent pre-credit memory budget
SunSi12138 Aug 19, 2026
5a2fd33
runtime: decouple pre-credit budget from wire window
SunSi12138 Aug 19, 2026
3501b20
test(runtime): pin pre-credit ownership cases to explicit budget
SunSi12138 Aug 19, 2026
40d1f29
test(runtime): decouple lifecycle budget from wire credit
SunSi12138 Aug 19, 2026
7a51e91
test(runtime): configure generated pre-credit envelope explicitly
SunSi12138 Aug 19, 2026
aab6b11
test(runtime): cover independent pre-credit budget configuration
SunSi12138 Aug 19, 2026
2a29dc6
docs: document independent pre-credit memory budget
SunSi12138 Aug 19, 2026
cded476
test(pack): verify pre-credit budget public XML surface
SunSi12138 Aug 19, 2026
bad6852
perf(runtime): record final local pre-credit byte limit
SunSi12138 Aug 19, 2026
00ca540
test(pack): fix pre-credit XML member match
SunSi12138 Aug 19, 2026
fd4e98a
test(runtime): consume wire credit in legal frame chunks
SunSi12138 Aug 19, 2026
9ea021c
test(runtime): cover mixed pre-credit memory envelope
SunSi12138 Aug 20, 2026
85113a3
test(package): assert pre-credit public API surface
SunSi12138 Aug 20, 2026
70ea28f
docs(runtime): define aggregate pre-credit memory envelope
SunSi12138 Aug 20, 2026
4fb3d18
docs: clarify pre-credit aggregate memory contract
SunSi12138 Aug 20, 2026
25d6c59
test(perf): scope starved sampled-peak evidence
SunSi12138 Aug 20, 2026
27bbb91
fix(runtime): keep options clone behavior unchanged
SunSi12138 Aug 20, 2026
841de64
refactor(runtime): remove stale pre-credit resize path
SunSi12138 Aug 20, 2026
c9e68ff
test(runtime): cover oversized pre-credit production branch
SunSi12138 Aug 20, 2026
cd10440
test(aot): add unsized pre-credit transport smoke project
SunSi12138 Aug 20, 2026
29b3c07
test(aot): exercise unsized pre-credit fallback on real transports
SunSi12138 Aug 20, 2026
730478e
test(aot): include pre-credit smoke in solution build
SunSi12138 Aug 20, 2026
d49cbb2
test(aot): gate custom unsized pre-credit on tcp and shared memory
SunSi12138 Aug 20, 2026
f16ee58
fix(aot): complete custom codec smoke declarations
SunSi12138 Aug 20, 2026
25327a4
test(runtime): cover unsized send failure credit refund
SunSi12138 Aug 20, 2026
951c4a0
test(runtime): force slow-path send queue rejection
SunSi12138 Aug 20, 2026
a6d2d4d
Merge pull request #255 from SunSi12138/agent/issue-243-precredit-memory
SunSi12138 Aug 20, 2026
bed365b
chore(build): replace obsolete formatter allocation API
SunSi12138 Aug 20, 2026
2e354d3
chore(build): initialize contention lifecycle state
SunSi12138 Aug 20, 2026
a2d8c03
chore(build): initialize saturation lifecycle state
SunSi12138 Aug 20, 2026
c2aae79
chore(build): enforce warnings as errors repository-wide
SunSi12138 Aug 20, 2026
a1190ca
chore(build): keep source documentation warning policy scoped
SunSi12138 Aug 20, 2026
91e2b4b
docs: document repository-wide zero-warning policy
SunSi12138 Aug 20, 2026
b2e1d11
fix(aot): align codec generic trim annotations
SunSi12138 Aug 20, 2026
b2104ce
ci: validate zero-warning builds in Debug and Release
SunSi12138 Aug 20, 2026
3744204
Merge pull request #259 from SunSi12138/agent/issue-256-warnings-as-e…
SunSi12138 Aug 20, 2026
5c6b8ae
perf(server): right-size deadline snapshot rentals (#257)
SunSi12138 Aug 20, 2026
c488cf5
perf(runtime): lazily materialize stream routing state (#258)
SunSi12138 Aug 21, 2026
866dd75
feat: support runtime interceptor replacement (#266)
SunSi12138 Aug 21, 2026
9b6f627
perf(client): defer pending slot allocation until first use (#260)
SunSi12138 Aug 22, 2026
ac7453b
test(codec): add artifact-driven UnsafeBlit compatibility matrix (#265)
SunSi12138 Aug 22, 2026
9c3e91a
test: stabilize explicit lifecycle phase waits (#279)
SunSi12138 Aug 22, 2026
3c5c279
fix(client): prevent deadline final-arm overwrite race (#288)
SunSi12138 Aug 22, 2026
c89a79b
test(runtime): stabilize progress starvation regression (#291)
SunSi12138 Aug 22, 2026
2a2ac83
security(server): default concurrent handshakes to 64 (#250)
SunSi12138 Aug 23, 2026
b475cc1
fix(server): preserve client-stream frames before dispatcher registra…
SunSi12138 Aug 23, 2026
73a9f0d
perf(admission): avoid O(N) idle reclaim scans on release (#300)
SunSi12138 Aug 23, 2026
75bc381
perf(server): remove duplicate RequestId logging scopes (#297)
SunSi12138 Aug 23, 2026
1cf6d06
perf(admission): remove per-acquire partition lease allocation (#309)
SunSi12138 Aug 23, 2026
72c5f8c
fix(server): drain OneWay client streams after early completion (#304)
SunSi12138 Aug 23, 2026
4fc8667
security(codec): assess UnsafeBlit padding disclosure risk (#310)
SunSi12138 Aug 23, 2026
9d1fd13
test(server): make request-scope completion deterministic (#321)
SunSi12138 Aug 24, 2026
d228e40
api: remove contract call options and propagate time budgets (#290)
SunSi12138 Aug 26, 2026
5c0abbb
refactor(server): prototype two-phase call reservations for #273 (#276)
SunSi12138 Aug 26, 2026
7cc495d
perf(server): benchmark Phase 0 decode execution models for #273 (#281)
SunSi12138 Aug 26, 2026
41cf7c8
refactor(server): introduce production call permit ownership for #273…
SunSi12138 Aug 26, 2026
db2d4d5
refactor(server): add ResourceGovernor decode ownership for #273 (#294)
SunSi12138 Aug 26, 2026
b6af76e
refactor(server): gate compressed request decode behind resource perm…
SunSi12138 Aug 26, 2026
864786b
refactor(server): add bounded persistent request decode executor (#301)
SunSi12138 Aug 26, 2026
b08513e
feat(server): add fair scheduling to persistent decode executor (#312)
SunSi12138 Aug 26, 2026
8f37c51
ci: remove completed Phase 0 decode evidence workflow
SunSi12138 Aug 26, 2026
30da03a
feat(server): budget pre-admission stream buffers in ResourceGovernor…
SunSi12138 Aug 26, 2026
eec8c75
feat(server): capture admission program generation per request (#323)
SunSi12138 Aug 26, 2026
d4745ef
refactor(server): extract admission state kernel lifecycle (#328)
SunSi12138 Aug 26, 2026
b4179cb
[Server][DynamicAdmission] Add atomic runtime enable/disable control …
SunSi12138 Aug 27, 2026
7472542
[Server][DynamicAdmission] Preserve concurrency and queue state acros…
SunSi12138 Aug 27, 2026
df05d8b
feat(admission): preserve rate state across runtime updates (#333) (#…
SunSi12138 Aug 27, 2026
ebaabca
feat(admission): preserve partition state across runtime updates (#33…
SunSi12138 Aug 27, 2026
38181ee
Bump Microsoft.CodeAnalysis.CSharp from 5.6.0 to 5.9.0 (#326)
dependabot[bot] Aug 27, 2026
00e2f18
Bump TUnit from 1.65.0 to 1.65.68 (#388)
SunSi12138 Aug 27, 2026
3821a59
test: make client-stream time-budget emission tests deterministic (#392)
SunSi12138 Aug 29, 2026
92b0e44
feat: assembly-owned codec routing (clean port of #320) (#386)
SunSi12138 Aug 30, 2026
cd9b845
Add deterministic maintainability hotspot inventory (#391)
SunSi12138 Aug 30, 2026
3615c8c
test(client): start lifecycle worker before phase timeout (#418)
SunSi12138 Aug 30, 2026
572be0f
test(client): make timeout/user-cancel race deterministic (#414)
SunSi12138 Aug 30, 2026
e59aa8c
test(runtime): synchronize local-abort publication ownership (#416)
SunSi12138 Aug 30, 2026
6ab1349
test(server): remove scheduler bound after admission permit release (…
SunSi12138 Aug 30, 2026
1626faa
Stabilize partition queue timeout ownership regression (#423)
SunSi12138 Aug 30, 2026
b93c5ee
Stabilize concurrency queue accounting regression (#424)
SunSi12138 Aug 30, 2026
918063f
test: make composite admission queue retry deterministic (#425)
SunSi12138 Aug 30, 2026
b1f1cc9
test: run manifest-load registration on dedicated worker (#426)
SunSi12138 Aug 30, 2026
d233040
fix(runtime): drain shared-memory final close deterministically (#412)
SunSi12138 Aug 30, 2026
2c1f4d9
Add maintainability debt baseline enforcement (#413)
SunSi12138 Aug 30, 2026
9dc754f
docs(ci): record PR validation cost and tier ownership (#417)
SunSi12138 Aug 30, 2026
88ac5b4
test(server): remove scheduler bound after legacy rate grant (#427)
SunSi12138 Aug 30, 2026
fa304c2
test(server): remove scheduler bounds from admission stop drain (#428)
SunSi12138 Aug 30, 2026
de458a9
test(server): remove scheduler bound after partition resize (#429)
SunSi12138 Aug 30, 2026
de985c2
test(server): remove scheduler bound after old partition rate grant (…
SunSi12138 Aug 30, 2026
b749bf5
test(server): remove scheduler bound after old selector holder releas…
SunSi12138 Aug 30, 2026
cf8d201
test(runtime): remove scheduler bound after terminal pre-credit clean…
SunSi12138 Aug 30, 2026
798c148
docs: define production project-reference boundaries (#420)
SunSi12138 Aug 30, 2026
3e772ef
test(client): remove scheduler bound from shutdown callback dispatch …
SunSi12138 Aug 30, 2026
7af9a9a
test(integration): remove wall-clock bound from oneway completion pol…
SunSi12138 Aug 30, 2026
7721257
docs: define test project-reference boundaries (#441)
SunSi12138 Aug 30, 2026
0edd85c
ci: implement bounded PR Fast gate (#437)
SunSi12138 Aug 30, 2026
8238f93
test(client): synchronize huge retry backoff before stop (#439)
SunSi12138 Aug 30, 2026
8dc2cd0
test(runtime): assert send-pump progress fairness contract (#444)
SunSi12138 Aug 30, 2026
2411bb8
ci: stop running PR Quick on every pull request (#445)
SunSi12138 Aug 30, 2026
f8e4227
test(runtime): remove scheduler bound after read release (#446)
SunSi12138 Aug 30, 2026
baa4c0c
test(hosting): await deterministic host stop signal (#448)
SunSi12138 Aug 30, 2026
fcf28ec
test(runtime): remove scheduler bound from draining flush (#449)
SunSi12138 Aug 30, 2026
2cbd4e0
test: wait for async long-running worker startup (#450)
SunSi12138 Aug 30, 2026
98c043a
ci: split expensive validation into Extended and Nightly tiers (#447)
SunSi12138 Aug 30, 2026
6906575
ci: run PR Extended on ready for review (#453)
SunSi12138 Aug 30, 2026
0dc09b0
feat: enforce production project-reference boundaries (#440)
SunSi12138 Aug 30, 2026
08e9b29
test(server): remove scheduler bound after retained lease grant (#451)
SunSi12138 Aug 30, 2026
a5cc1fc
ci: run project reference guard in PR fast (#454)
SunSi12138 Aug 30, 2026
dd9dc8f
test: characterize DynamicClusterRuntime lifecycle invariants (#455)
SunSi12138 Aug 30, 2026
f4543ad
ci: extract shared .NET setup composite action (#456)
SunSi12138 Aug 30, 2026
6f00447
test: isolate send-pump shutdown race producers (#457)
SunSi12138 Aug 30, 2026
67f26bc
test: fix send-pump race entry barrier (#460)
SunSi12138 Aug 30, 2026
0046e55
ci: consolidate package validation and smoke sequences (#458)
SunSi12138 Aug 30, 2026
d775dcc
refactor(client): extract dynamic cluster topology state (#459)
SunSi12138 Aug 30, 2026
04f4c29
test: characterize server lifecycle ownership invariants (#442)
SunSi12138 Aug 30, 2026
f4b65a9
feat(client): require explicit request-timeout policy (#443)
SunSi12138 Aug 30, 2026
f29fee7
refactor(server): extract authentication coordination (#462)
SunSi12138 Aug 30, 2026
3f1abbb
refactor(client): extract dynamic connection retirement state (#461)
SunSi12138 Aug 30, 2026
f089a59
docs: consolidate documentation root (#466)
SunSi12138 Aug 30, 2026
9030fdf
test(client): split lifecycle fixtures by behavior (#464)
SunSi12138 Aug 30, 2026
f4fa54d
test(client): split readiness and retry fixtures by behavior (#465)
SunSi12138 Aug 30, 2026
ac9b71d
refactor(server): extract call admission coordination (#463)
SunSi12138 Aug 30, 2026
7e60c49
chore(deps): sync CodeQL action to 4.37.9 (#471)
SunSi12138 Aug 31, 2026
fdb3ed1
test(server): update integration diagnostics after call admission ext…
SunSi12138 Sep 1, 2026
a389666
refactor(client): extract dynamic cluster reconnect and lifecycle coo…
SunSi12138 Sep 1, 2026
f1d192c
docs: split architecture documentation by subsystem (#472)
SunSi12138 Sep 1, 2026
0f95706
test: stabilize deadline and terminal cleanup flakes (#476)
SunSi12138 Sep 4, 2026
d980459
feat: deterministic RPC semantic identity (#415)
SunSi12138 Sep 4, 2026
bb717ae
fix: remove client stream codec fallback (#478)
SunSi12138 Sep 4, 2026
9f8c03b
refactor(protocol): separate recognized and implemented capabilities …
SunSi12138 Sep 4, 2026
fe72d1e
refactor: extract shared assembly registry capability (#480)
SunSi12138 Sep 4, 2026
a34f26f
feat(errors): add stable machine-readable detail codes (#481)
SunSi12138 Sep 4, 2026
51da9a3
docs: add ADR convention and maintainability contribution rules (#483)
SunSi12138 Sep 4, 2026
b5ee922
test(client): split multicluster tests by behavior (#484)
SunSi12138 Sep 4, 2026
d56d29e
test(generator): split RpcAnalyzer tests by rule group (#485)
SunSi12138 Sep 4, 2026
0536603
test(generator): add focused generation fixtures (#487)
SunSi12138 Sep 4, 2026
742ae84
refactor(server): extract connection and service/module registries (#…
SunSi12138 Sep 4, 2026
65b48bb
refactor(generator): extract contract and service analysis (#488)
SunSi12138 Sep 4, 2026
0da4dd5
refactor(server): extract shutdown lifecycle coordinator (#489)
SunSi12138 Sep 5, 2026
08e86d6
refactor(generator): introduce DTO analysis emission models (#490)
SunSi12138 Sep 5, 2026
4a3be61
test: split builder and server fixtures by behavior (#379) (#492)
SunSi12138 Sep 5, 2026
7a01336
refactor(generator): extract DTO classification and validation (#494)
SunSi12138 Sep 5, 2026
c2eb38c
refactor(generator): extract method and control analysis (#493)
SunSi12138 Sep 5, 2026
e9c391d
refactor(generator): extract remaining contract analysis rules (#495)
SunSi12138 Sep 5, 2026
decb5fc
perf(interceptors): compose generations at publication time (#491)
SunSi12138 Sep 5, 2026
bd276a4
refactor(generator): introduce CodeWriter for bootstrap emitter (#496)
SunSi12138 Sep 5, 2026
aa1d188
refactor(generator): extract codec helper emitters (#497)
SunSi12138 Sep 5, 2026
86a0f6f
test(server): characterize exception mapper boundary (#498)
SunSi12138 Sep 5, 2026
8e4cb3c
refactor(generator): split DTO emit responsibilities (#499)
SunSi12138 Sep 5, 2026
43d5d95
refactor(runtime): unify generation retirement observation (#500)
SunSi12138 Sep 5, 2026
d86458e
perf(ci): add deterministic allocation regression gates (#501)
SunSi12138 Sep 5, 2026
e42e80c
refactor(runtime): unify send-pump readiness coordination (#507)
SunSi12138 Sep 5, 2026
b4fdc77
ci(codec): add .NET 10 servicing compatibility evidence (#509)
SunSi12138 Sep 5, 2026
bb9e164
refactor(runtime): make logical calls own stable stream mailboxes (#503)
SunSi12138 Sep 5, 2026
ed03b9a
feat(protocol): validate remote RPC assembly identity at bind (#510)
SunSi12138 Sep 5, 2026
8257da7
refactor(client): simplify attempt admission coordination (#515)
SunSi12138 Sep 5, 2026
8695b22
perf(client): avoid default retry attempt-state allocation (#517)
SunSi12138 Sep 5, 2026
f5070b0
test(integration): align contract manifest lifecycle (#518)
SunSi12138 Sep 5, 2026
f0307ee
perf(client): avoid fixed-endpoint retry selection allocation (#519)
SunSi12138 Sep 5, 2026
2d40094
perf(admission): avoid single-rate lease arrays (#522)
SunSi12138 Sep 5, 2026
340cd43
perf(client): reuse retry attempt outcome state (#530)
SunSi12138 Sep 5, 2026
51e14df
test: stabilize shared-memory spill cancellation regression (#531)
SunSi12138 Sep 5, 2026
4df89a3
perf(admission): create permit drain waiter lazily (#532)
SunSi12138 Sep 5, 2026
59fd96e
generator: generate SharpPack sidecars for routed external payloads (…
SunSi12138 Sep 5, 2026
b23a984
test(admission): remove scheduler-clock coupling from partition owner…
SunSi12138 Sep 5, 2026
21fd5af
test(dispatcher): isolate rent reset race workers from ThreadPool (#534)
SunSi12138 Sep 5, 2026
8aa49fb
test(server): remove scheduler bounds after manual-time grants (#536)
SunSi12138 Sep 5, 2026
c033fee
test(runtime): remove scheduler bounds before validation barriers (#537)
SunSi12138 Sep 5, 2026
4489c4e
test(multicluster): wait for child remote manifest publication (#538)
SunSi12138 Sep 5, 2026
d241bb1
test(integration): establish queued one-way admission barriers (#539)
SunSi12138 Sep 5, 2026
735e500
test(admission): decouple dynamic update waiters from scheduler laten…
SunSi12138 Sep 5, 2026
e717783
generator: add native union codecs (#541)
SunSi12138 Sep 6, 2026
51e3f2c
test: detach send-pump producer teardown from async scheduler tail (#…
SunSi12138 Sep 6, 2026
fe1a7ab
refactor(client): extract static cluster topology state (#544)
SunSi12138 Sep 6, 2026
53166d7
perf(admission): specialize FixedWindow runtime state (#542)
SunSi12138 Sep 6, 2026
d32fa91
refactor(compression): separate Core policy from concrete algorithms …
SunSi12138 Sep 6, 2026
85c7ebc
refactor(tests): split phase 1 maintainability fixtures (#547)
SunSi12138 Sep 6, 2026
ca53d43
refactor(tests): split phase 2 endpoint and call-shape fixtures (#548)
SunSi12138 Sep 6, 2026
2c49c03
refactor(tests): split phase 3 runtime unit fixtures (#549)
SunSi12138 Sep 6, 2026
0258597
refactor(tests): decompose phase 4 executable harnesses (#551)
SunSi12138 Sep 6, 2026
5e03dae
chore(maintainability): record phase 5 keep rationale (#552)
SunSi12138 Sep 6, 2026
acb160f
refactor(client): separate pending deadline scheduler (#554)
SunSi12138 Sep 6, 2026
c324ae2
refactor(client): extract assembly registry ownership (#555)
SunSi12138 Sep 6, 2026
cc8f2e3
feat(compression): add dynamic runtime policy control (#553)
SunSi12138 Sep 7, 2026
f5425db
refactor(client): extract runtime materializer (#568)
SunSi12138 Sep 7, 2026
c07f4a3
fix/test: fix pending deadline reuse race and retain validation evide…
SunSi12138 Sep 7, 2026
8120786
fix(client,codec): isolate pending diagnostics and align DateTime raw…
SunSi12138 Sep 7, 2026
d328ff5
perf(codec): rebase DateTimeOffset single-pass decode on current dev …
SunSi12138 Sep 7, 2026
f643aee
fix(telemetry): isolate external observer failures (#584)
SunSi12138 Sep 7, 2026
d03ef7e
feat(client): update request timeout policy at runtime (#593)
SunSi12138 Sep 7, 2026
fd8832c
feat(client): update retry policy at runtime (#594)
SunSi12138 Sep 7, 2026
8f40d8f
feat(client): replace endpoint admission policy at runtime (#596)
SunSi12138 Sep 8, 2026
c666dcc
feat(client): reconfigure endpoint circuit breaker at runtime (#597)
SunSi12138 Sep 8, 2026
3bccdef
feat(client): update heartbeat configuration at runtime (#598)
SunSi12138 Sep 8, 2026
a4ec60d
test(hardening): establish extension fault containment matrix (#580)
SunSi12138 Sep 8, 2026
dd7e391
feat(telemetry): update SharpLink detail policy at runtime (#600)
SunSi12138 Sep 8, 2026
d3eab9e
test(perf): establish PendingRequestTable pressure and recovery matri…
SunSi12138 Sep 8, 2026
ba33213
feat(client): resize connection pools at runtime (#599)
SunSi12138 Sep 8, 2026
09d6804
feat(session): update RPC flush policy at runtime (#601)
SunSi12138 Sep 8, 2026
1365b08
feat(client): make reconnect behavior policy-driven (#602)
SunSi12138 Sep 8, 2026
79e669e
test(runtime): stabilize recurring scheduler-bound flakes (#603)
SunSi12138 Sep 8, 2026
76b0744
test(client): stabilize retry and reconnect scheduler tails (#604)
SunSi12138 Sep 8, 2026
92b56d8
feat(client): update endpoint selection policy at runtime (#606)
SunSi12138 Sep 8, 2026
f265492
test(runtime): stabilize wakeup latch publication flake (#607)
SunSi12138 Sep 8, 2026
042c63b
test(runtime): stabilize terminal and reconnect timing flakes (#613)
SunSi12138 Sep 8, 2026
b02bffe
test(client): await successful ready reconciliation entry (#615)
SunSi12138 Sep 8, 2026
d84075c
test(hosting): assert cached health task identity (#616)
SunSi12138 Sep 8, 2026
ba3a16c
fix(protocol): enforce negotiated inbound frame limit (#614)
SunSi12138 Sep 9, 2026
d1e655d
docs: make README NuGet-first with runnable templates (#608)
SunSi12138 Sep 9, 2026
9810884
perf: merge the 13 measured runtime optimizations (#630)
SunSi12138 Sep 9, 2026
4d445b9
test(client): stabilize stack13 scheduler flakes (#632)
SunSi12138 Sep 9, 2026
9a12523
feat(server): update connection admission limits at runtime (#617)
SunSi12138 Sep 9, 2026
5ad1df1
docs: document public RPC semantics (#631)
SunSi12138 Sep 9, 2026
2adbcd5
test: harden statically attributable flakes from #387
SunSi12138 Sep 9, 2026
2a53892
perf(stack4): 端点随机序号直接映射 (#633)
SunSi12138 Sep 9, 2026
1a70268
[perf stack4 2/4] 真实发包入口只清零完整15字节帧头 (#634)
SunSi12138 Sep 9, 2026
66c3e0b
[perf stack4 3/4] decimal 合法标志直接通过,保留非法值异常路径 (#635)
SunSi12138 Sep 9, 2026
7acfac2
[perf stack4 4/4] 大 bool 集合批量校验,小输入保留原循环 (#636)
SunSi12138 Sep 9, 2026
3e9b4cc
[perf stack continuation 5/6] DateTimeOffset 不可变数组接管独占解码结果,省去二次复制 (#638)
SunSi12138 Sep 9, 2026
9372953
[perf stack continuation 6/6] DateTimeOffset 集合复用已校验 offset ticks (#639)
SunSi12138 Sep 9, 2026
868a8eb
[perf stack continuation 7] 内联解压后复用已校验 metadata,省去重复解析和分配 (#640)
SunSi12138 Sep 9, 2026
bc5f36c
test: make retry request waits terminal-aware (#641)
SunSi12138 Sep 9, 2026
424fb4a
perf(server): avoid decode resource locks for uncompressed request pe…
SunSi12138 Sep 9, 2026
e464b44
feat(server): resize active RPC call capacity at runtime (#643)
SunSi12138 Sep 9, 2026
fde86f9
perf(runtime): restack measured wakeup and NoDecode recovery (#605)
SunSi12138 Sep 9, 2026
9cfa364
feat(client): export redacted support snapshots (#645)
SunSi12138 Sep 10, 2026
911bb34
test: close statically proven CI race causes (#649)
SunSi12138 Sep 10, 2026
2f16532
feat(client): separate runtime lifecycle from remote readiness (#658)
SunSi12138 Sep 10, 2026
d5a74be
feat(server): split start wait stop lifecycle (#659)
SunSi12138 Sep 11, 2026
f7b51d0
fix(client): decouple runtime cluster add from readiness (#660)
SunSi12138 Sep 11, 2026
1e7a10c
feat(client): add structured multi-cluster mutation results (#662)
SunSi12138 Sep 12, 2026
5fac7a0
feat(api): add non-throwing multi-cluster status query (#664)
SunSi12138 Sep 12, 2026
d641767
fix(client): enforce multi-cluster physical dial concurrency (#666)
SunSi12138 Sep 12, 2026
2dfe658
feat(health): return structured probe outcomes (#665)
SunSi12138 Sep 12, 2026
3af94ea
fix: add structured runtime configuration update results (#667)
SunSi12138 Sep 12, 2026
3773bde
ci: stop auto-running PR Quick (#669)
SunSi12138 Sep 12, 2026
debebcb
feat(session): add desired configuration rolling refresh (#668)
SunSi12138 Sep 12, 2026
0f9400b
Finalize 2.0 API, package baseline and release validation (#670)
SunSi12138 Sep 12, 2026
d6b33a3
Merge dev into the 2.0 main release candidate
SunSi12138 Sep 12, 2026
97fac1d
fix: close release-gate connection ownership failures (#672)
SunSi12138 Sep 12, 2026
b9e7885
Merge release gate ownership fixes from dev
SunSi12138 Sep 12, 2026
9d1653a
fix: correct release-test synchronization and required check results …
SunSi12138 Sep 12, 2026
c502481
Merge deterministic release validation from dev
SunSi12138 Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
78 changes: 78 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
root = true

# Repository-wide text defaults.
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true

# C# formatting. Keep this section limited to layout so style preferences can
# be introduced separately without creating unrelated semantic rewrites.
[*.cs]
indent_style = space
indent_size = 4
tab_width = 4
trim_trailing_whitespace = true

dotnet_diagnostic.IDE0055.severity = warning

# New lines
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true

# Indentation
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current

# Spacing
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_after_comma = true
csharp_space_before_comma = false
csharp_space_after_dot = false
csharp_space_before_dot = false
csharp_space_after_semicolon_in_for_statement = true
csharp_space_before_semicolon_in_for_statement = false
csharp_space_around_declaration_statements = false
csharp_space_before_open_square_brackets = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_square_brackets = false

# Wrapping
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true

# Keep project XML clean without imposing a new indentation convention on the
# repository's existing mix of two- and four-space files.
[*.{csproj,props,targets,slnx}]
trim_trailing_whitespace = true

# JSON and GitHub workflow files conventionally use two-space indentation.
[*.{json,yml,yaml}]
indent_style = space
indent_size = 2
tab_width = 2
trim_trailing_whitespace = true

# Preserve intentional Markdown hard line breaks while normalizing new files.
[*.md]
trim_trailing_whitespace = false
56 changes: 56 additions & 0 deletions .github/actions/allocation-gate/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Deterministic allocation gate
description: Builds and runs the Release allocation regression harness.
inputs:
artifact-directory:
description: Directory for JSON evidence.
required: false
default: artifacts/perf/allocation-gate
negative-control:
description: Run the injected-allocation negative control and require it to fail.
required: false
default: 'false'
runs:
using: composite
steps:
- name: Restore allocation gate
shell: bash
run: dotnet restore test/SharpLink.Benchmarks/SharpLink.Benchmarks.csproj

- name: Build allocation gate in Release
shell: bash
run: dotnet build test/SharpLink.Benchmarks/SharpLink.Benchmarks.csproj -c Release --no-restore -v minimal

- name: Allocation gate harness self-tests
shell: bash
run: >-
dotnet run
--project test/SharpLink.Benchmarks/SharpLink.Benchmarks.csproj
-c Release
--no-build
--
--allocation-gate-self-test
--output "${{ inputs.artifact-directory }}/self-test.json"

- name: Enforce allocation budgets
shell: bash
env:
SHARPLINK_ALLOCATION_OUTPUT: ${{ inputs.artifact-directory }}/gate.json
run: ./eng/run-allocation-gate.sh

- name: Prove injected allocation is rejected
if: inputs.negative-control == 'true'
shell: bash
env:
SHARPLINK_ALLOCATION_OUTPUT: ${{ inputs.artifact-directory }}/negative-control.json
run: |
set +e
./eng/run-allocation-gate.sh \
--filter rpc-add-sharedmemory-c1 \
--inject-bytes-per-operation 512
status=$?
set -e
if [[ $status -eq 0 ]]; then
echo "::error::Injected allocation negative control unexpectedly passed."
exit 1
fi
echo "Injected allocation was rejected as expected."
21 changes: 21 additions & 0 deletions .github/actions/package-smoke/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Run NuGet package smoke
description: Restore and run package consumers against packages in artifacts/nuget.

runs:
using: composite
steps:
- name: Restore Package Smoke
shell: bash
env:
NUGET_PACKAGES: ${{ github.workspace }}/.nuget-package-smoke
run: dotnet restore test/SharpLink.PackageSmoke/SharpLink.PackageSmoke.csproj --force --no-cache --configfile test/SharpLink.PackageSmoke/NuGet.config

- name: Run Package Smoke
shell: bash
env:
NUGET_PACKAGES: ${{ github.workspace }}/.nuget-package-smoke
run: dotnet run -c Release --no-restore --project test/SharpLink.PackageSmoke/SharpLink.PackageSmoke.csproj

- name: Run Quick Start Package Smoke
shell: bash
run: ./eng/run-quickstart-package-smoke.sh artifacts/nuget
14 changes: 14 additions & 0 deletions .github/actions/setup-dotnet/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Setup .NET CI environment
description: Configure the shared .NET CLI environment and install the repository CI SDK.

runs:
using: composite
steps:
- name: Configure .NET CLI environment
shell: bash
run: echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" >> "$GITHUB_ENV"

- name: Setup .NET
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
dotnet-version: 10.0.x
31 changes: 31 additions & 0 deletions .github/actions/verify-packages/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Verify NuGet package contracts
description: Verify SharpLink NuGet packages contain the expected generator, metadata, symbols, and dependency contracts.

inputs:
package-directory:
description: Directory containing packaged NuGet artifacts.
required: false
default: artifacts/nuget

runs:
using: composite
steps:
- name: Verify SDK Contains Generator
shell: bash
run: |
package_listing="$(mktemp "$RUNNER_TEMP/sharplink-sdk-package-list.XXXXXX")"
trap 'rm -f "$package_listing"' EXIT
unzip -l "${{ inputs.package-directory }}"/SharpLink.Sdk.*.nupkg > "$package_listing"
grep -q 'analyzers/dotnet/cs/SharpLink.Generator.dll' "$package_listing"

- name: Verify package metadata, XML documentation, and symbols
shell: bash
run: ./eng/verify-packages.sh "${{ inputs.package-directory }}"

- name: Verify Hosting direct Runtime dependency
shell: bash
run: ./eng/verify-hosting-package-dependency.sh "${{ inputs.package-directory }}"

- name: Verify Abstractions has no DI dependency
shell: bash
run: ./eng/verify-abstractions-package-dependency.sh "${{ inputs.package-directory }}"
185 changes: 185 additions & 0 deletions .github/workflows/codec-android-arm64-evidence.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
name: Codec Android ARM64 Device Evidence

# Physical ARM64 Android evidence. GitHub-hosted ARM runners cannot currently
# provide the nested virtualization required by the Android ARM64 emulator, so
# this workflow is manual and requires a prepared self-hosted ARM64 runner with
# an attached Android ARM64 device.

permissions:
contents: read

on:
workflow_dispatch:

jobs:
android-arm64-device:
runs-on: [self-hosted, ARM64, android-device]
timeout-minutes: 45
env:
DOTNET_CLI_TELEMETRY_OPTOUT: '1'
SHARPLINK_COMMIT: ${{ github.sha }}
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: Install Android workload
run: dotnet workload install android

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

- name: Require one physical Android ARM64 device
shell: bash
run: |
command -v adb
adb start-server
device_count="$(adb devices | awk 'NR > 1 && $2 == "device" { count++ } END { print count+0 }')"
if [[ "$device_count" != "1" ]]; then
echo "::error::Expected exactly one online Android device, found $device_count."
adb devices -l
exit 1
fi
abi="$(adb shell getprop ro.product.cpu.abi | tr -d '\r')"
qemu="$(adb shell getprop ro.kernel.qemu | tr -d '\r')"
echo "Android device ABI: $abi"
echo "ro.kernel.qemu: ${qemu:-unset}"
if [[ "$abi" != "arm64-v8a" ]]; then
echo "::error::Expected a physical arm64-v8a Android device, observed $abi."
exit 1
fi
if [[ "$qemu" == "1" ]]; then
echo "::error::This workflow requires a physical device, not an emulator."
exit 1
fi

- name: Produce canonical desktop corpus
run: >-
dotnet run -c Release
--project test/SharpLink.CodecCompatibility/SharpLink.CodecCompatibility.csproj
-- produce
--output artifacts/codec-compat/producers/codec-android-arm64-corpus-desktop-reference

- name: Build and run Android ARM64 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-arm64 \
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-arm64-mono.apk
adb install -r "$apk"
node test/SharpLink.CodecCompatibility.Android/run-android.mjs \
produce artifacts/codec-compat/android-arm64-mono-corpus \
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" Mono
adb uninstall com.sharplink.codeccompat || true

- name: Build and run Android ARM64 CoreCLR 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-arm64 \
test/SharpLink.CodecCompatibility.Android/SharpLink.CodecCompatibility.Android.csproj \
-t:SignAndroidPackage \
-p:CodecRuntime=coreclr \
-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-arm64-coreclr.apk
adb install -r "$apk"
node test/SharpLink.CodecCompatibility.Android/run-android.mjs \
produce artifacts/codec-compat/android-arm64-coreclr-corpus \
"$SHARPLINK_COMMIT" "$SHARPLINK_SDK_VERSION" CoreCLR
adb uninstall com.sharplink.codeccompat || true

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

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

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

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

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

- name: Require both Android ARM64 consumer reports
shell: bash
run: |
count="$(find artifacts/codec-compat -path '*android-arm64-*-verification/verification.json' -type f | wc -l | tr -d ' ')"
if [[ "$count" != "2" ]]; then
echo "::error::Expected 2 Android ARM64 consumer reports, found $count."
exit 1
fi

- name: Aggregate Android ARM64 device evidence
run: >-
dotnet run -c Release
--project test/SharpLink.CodecCompatibility/SharpLink.CodecCompatibility.csproj
-- summarize
--input artifacts/codec-compat
--output artifacts/codec-compat/summary
--profile android-arm64-device

- name: Upload Android ARM64 device evidence
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: codec-android-arm64-device-evidence
path: |
artifacts/codec-compat/producers/codec-android-arm64-corpus-desktop-reference
artifacts/codec-compat/android-arm64-mono-corpus
artifacts/codec-compat/android-arm64-coreclr-corpus
artifacts/codec-compat/android-arm64-mono-verification/verification.json
artifacts/codec-compat/android-arm64-coreclr-verification/verification.json
artifacts/codec-compat/summary
if-no-files-found: warn
retention-days: 30
Loading
Loading