Skip to content

[release][usability] 发布前收口 NuGet 入门、语义说明与诊断体验 #572

Closed

Description

@SunSi12138

目标

在发布前从 NuGet 用户首次接入 的视角做一次易用性收口:让用户不需要先理解仓库构建、RuntimeContext、Manifest、Assembly Catalog 等内部/高级概念,就能完成安装、定义契约、启动 Server、发起 Client 调用、正确释放,并能快速理解关键语义和导出可用于提 issue 的脱敏诊断信息。

创建基线:

dev@81207868a24050da7933aac87090143555f268bd

执行时仍应重新记录实际 dev HEAD,并以当时真实 package graph / public API 为准。

Related: #86(public API/package baseline、migration docs、release gate)。本 tracker 不重复 #86 的 API freeze/migration 工作,而聚焦 新用户 onboarding + semantic clarity + supportability。


子 issue

如果实施中发现某个语义本身错误或 public API 缺口,不扩大这些文档/诊断 PR;应另开 correctness/API issue 并关联回来。


为什么需要单独收口

当前 README 的快速开始更偏仓库贡献者路径:构建仓库、运行测试、运行 demo;而 NuGet 用户真正需要尽早知道的内容包括:

  • Contracts / Server / Client 各自安装什么 package;
  • Generator 如何随 package/analyzer 分发;
  • 契约项目不需要为了定义 contract 引入完整 Runtime;
  • 最小可运行 contract / service / call / dispose;
  • 生产接入时 timeout、TLS、resource limits、graceful shutdown、logging 如何组合;
  • ConnectAsync、OneWay、retry、deadline、dynamic replacement 等边界到底意味着什么;
  • “连不上 / 经常超时 / pending 满”时如何一次导出足够但不泄密的诊断快照。

这些内容分散在后续章节或架构文档中会显著提高首次接入成本。


总体设计原则

1. 第一屏服务 NuGet consumer

README 首屏应优先回答:

装什么包?
契约怎么写?
Server 怎么起?
Client 怎么调?
怎么正确停?

而不是先要求 clone/build/test repository。

2. Hello World 与生产模板分开

Hello World 只展示最小成功路径。

第二份 production-shaped template 在同一份可运行配置中展示:

timeout / deadline
TLS
resource limits
logging / telemetry baseline
graceful shutdown / drain

不要让用户从十个 demo 拼生产配置,也不要把所有高级 feature 塞进第一屏。

3. 文档代码必须可执行验证

Quick Start / production template 应来自仓库中真正会被编译/运行的 canonical source。Release validation 应至少能使用本地 .nupkg 从空项目完成一次 Contracts -> Server -> Client smoke,而不是只依赖 repository ProjectReference。

4. 关键语义集中回答

Quick Start 附近必须直接回答:

用户问题 文档必须明确的边界
调用 timeout/deadline 覆盖哪些阶段? queue/send/response/retry 如何共享预算;connect/handshake 是否独立
ConnectAsync 成功意味着什么? physical connection 与 endpoint/client readiness 的关系
await OneWay 成功意味着什么? local send boundary 与 remote execution success 的区别
服务/模块替换后已有 proxy 怎样? binding/reacquire/failure 行为;不暗示透明 rebind
timeout/disconnect 后能否 retry? method kind/idempotency/error/deadline 约束,以及 Server 可能已执行的边界

5. 排障优先一次 support snapshot

不增加默认每 RPC verbose logging。优先提供按需快照,汇总:

effective non-secret config
runtime/package/protocol summary
endpoint readiness/state
connection state
negotiated protocol/compression
pending / queue usage + limits
retry/admission/breaker summary where applicable
last connection failure stage + safe classification

默认输出不得包含:

authentication credentials/tokens
private keys/certificate secret material
arbitrary metadata
request/response payload
high-cardinality business identifiers
raw application object values

Endpoint 地址、certificate identity、exception message 等灰区必须有显式 redaction policy;默认 JSON 应适合公开 issue。


Release-level 验收标准


非目标

本 tracker 不直接:

发现现有语义本身存在问题时,应单独创建 correctness/API issue;本 tracker 只负责把已确定的边界变得 可发现、可运行、可诊断。

Activity

  1. SunSi12138 commented on Sep 13, 2026

    @SunSi12138
    OwnerAuthor

    2.0.0 release closure sync — 2026-09-13

    This usability tracker is complete against the final 2.0.0 release candidate.

    The #572 release-level acceptance criteria are therefore satisfied. Any post-2.0 onboarding/support refinements should be tracked independently rather than keeping this release tracker open.

  2. SunSi12138 commented on Sep 13, 2026

    @SunSi12138
    OwnerAuthor

    Final release note

    The usability/onboarding closure tracked here shipped with SharpLink 2.0.0.

    No further action is required on this tracker; it remains closed as completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions