From 7828e3efcc0d2ff11e5eb0c590101630eeed095e Mon Sep 17 00:00:00 2001 From: YEONGUK LEE Date: Wed, 28 Oct 2026 10:20:12 +0900 Subject: [PATCH] chore(release): prepare v1.3.2 maintenance release --- README.ja.md | 4 +++- README.ko.md | 4 +++- README.md | 4 +++- README.zh-CN.md | 4 +++- RELEASING.ja.md | 10 ++++++++ RELEASING.ko.md | 10 ++++++++ RELEASING.md | 10 ++++++++ RELEASING.zh-CN.md | 10 ++++++++ docs/README.md | 2 ++ docs/i18n-manifest.json | 7 +++--- docs/ja/README.md | 2 ++ docs/ja/releases/v1.3.2.md | 37 +++++++++++++++++++++++++++++ docs/ko/README.md | 2 ++ docs/ko/releases/v1.3.2.md | 37 +++++++++++++++++++++++++++++ docs/releases/v1.3.2.md | 37 +++++++++++++++++++++++++++++ docs/zh-CN/README.md | 2 ++ docs/zh-CN/releases/v1.3.2.md | 37 +++++++++++++++++++++++++++++ session_peer.py | 2 +- session_peer_core/common.py | 2 +- tests/docs/test_docs_i18n.py | 2 +- tests/docs/test_stable_candidate.py | 24 +++++++++---------- 21 files changed, 227 insertions(+), 22 deletions(-) create mode 100644 docs/ja/releases/v1.3.2.md create mode 100644 docs/ko/releases/v1.3.2.md create mode 100644 docs/releases/v1.3.2.md create mode 100644 docs/zh-CN/releases/v1.3.2.md diff --git a/README.ja.md b/README.ja.md index eae7223..7ab9219 100644 --- a/README.ja.md +++ b/README.ja.md @@ -33,7 +33,9 @@ session-peer 1.0.2による実際のローカル通信です。CodexがClaude Co ### インストール Python 3.9以上が必要です。基本のローカル・SSH CLIに外部Python依存パッケージはありません。 -ソースバージョン:**1.3.1**。2026-10-27の準備時点で、最後に確認した公開済み安定版は**1.3.0**でした。Controlソースの依存関係修正とGitHubリリースの互換スキル資産については、[メンテナンスリリースの案内](docs/ja/releases/v1.3.1.md)を参照してください。どちらもPythonのwheelとsdistには含まれません。 +ソースバージョン:**1.3.2**。2026-10-28の準備時点で、最後に確認した公開済み安定版は**1.3.1**でした。macOSのファイアウォール案内とDirectリスナー・TLSの診断については、[メンテナンスリリースの案内](docs/ja/releases/v1.3.2.md)を参照してください。ControlのBetter Authセキュリティ更新はリポジトリのソースにあり、Python wheel/sdistには含まれないため、別途承認された配備が必要です。 + +任意の[MCPエクストラ](docs/ja/mcp.md)は`mcp>=1.30,<2`を必要とします。MCPのPython 3.10+要件と依存関係のないPython 3.9コアは変更しません。既存のMCP環境では明示的なパッケージ更新が必要です。 1.3.0では配信説明、ローカル・SSH経路プリセットと受信者アドレス帳、時間制限付きhandoff観察、信頼したSSH設定、ペアリングリンク、バージョン別通知設定を追加します。対応する組み合わせと制限は[リリース範囲と検証条件](docs/ja/releases/v1.3.0.md)を参照してください。パッケージ公開と本番環境への配備は別です。 diff --git a/README.ko.md b/README.ko.md index 5c33593..09902ec 100644 --- a/README.ko.md +++ b/README.ko.md @@ -33,7 +33,9 @@ session-peer 1.0.2를 사용해 실제 로컬 요청과 회신을 주고받았 ### 설치 Python 3.9 이상이 필요합니다. 기본 로컬·SSH CLI는 외부 Python 패키지에 의존하지 않습니다. -소스 버전: **1.3.1**. 2026-10-27 준비 시점의 마지막 확인 공개 안정판은 **1.3.0**이었습니다. Control 소스의 의존성 수정과 GitHub 릴리스의 호환 스킬 자산은 [유지보수 릴리스 안내](docs/ko/releases/v1.3.1.md)를 참고하십시오. 두 구성 요소는 Python wheel과 sdist에 포함되지 않습니다. +소스 버전: **1.3.2**. 2026-10-28 준비 시점의 마지막 확인 공개 안정판은 **1.3.1**이었습니다. macOS 방화벽 안내와 Direct 리스너·TLS 진단은 [유지보수 릴리스 안내](docs/ko/releases/v1.3.2.md)를 참고하십시오. Control의 Better Auth 보안 갱신은 저장소 소스에 있으며 Python wheel/sdist에는 포함되지 않으므로 별도로 승인된 배포가 필요합니다. + +선택형 [MCP extra](docs/ko/mcp.md)는 이제 `mcp>=1.30,<2`를 요구합니다. MCP의 Python 3.10+ 요건과 의존성 없는 Python 3.9 핵심 CLI는 유지됩니다. 기존 MCP 환경에는 명시적인 패키지 업그레이드가 필요합니다. 1.3.0에는 전달 설명, 로컬·SSH 경로 프리셋과 수신자 주소록, 유한 시간 handoff 관찰, 신뢰한 SSH 설정, 페어링 링크와 버전별 알림 설정이 추가됩니다. 지원 조합과 제한은 [릴리스 범위와 검증 조건](docs/ko/releases/v1.3.0.md)을 참고하십시오. 패키지 공개와 운영 배포는 별개입니다. diff --git a/README.md b/README.md index 3cc47b9..f002736 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,9 @@ in this ~22-second animation, not a screen recording; send success alone is not ### Install Python 3.9+. The core local/SSH CLI has no third-party Python dependencies. -Source version: **1.3.1**. At the 2026-10-27 preparation checkpoint, the last verified published stable release was **1.3.0**. See the [maintenance release notes](docs/releases/v1.3.1.md) for the Control source dependency fix and the compatibility skill asset in the GitHub release. Neither component is included in the Python wheel or sdist. +Source version: **1.3.2**. At the 2026-10-28 preparation checkpoint, the last verified published stable release was **1.3.1**. See the [maintenance release notes](docs/releases/v1.3.2.md) for macOS firewall guidance and Direct listener/TLS diagnostics. Control's Better Auth security update is in repository source, outside Python wheel/sdist, and requires a separately authorized rollout. + +The optional [MCP extra](docs/mcp.md) now requires `mcp>=1.30,<2`; its Python 3.10+ requirement and the dependency-free Python 3.9 core remain unchanged. Existing MCP environments need an explicit package upgrade. Version 1.3.0 adds delivery explanations, local/SSH route presets and recipient addresses, bounded handoff observation, trusted SSH configuration, pairing links and per-version notice preferences. See the [release scope and verification gates](docs/releases/v1.3.0.md) for supported combinations and limits. Package publication and operational deployment are separate. diff --git a/README.zh-CN.md b/README.zh-CN.md index 1b6532e..d6477a4 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -33,7 +33,9 @@ session-peer使用各智能体自身的收件箱和队列;接收方智能体 ### 安装 需要Python 3.9或更高版本。核心本地与SSH CLI没有第三方Python依赖。 -源码版本:**1.3.1**。在2026-10-27的准备检查时,最后确认的已发布稳定版本为**1.3.0**。Control源码依赖修复和GitHub发布中的兼容技能资产请参阅[维护版本说明](docs/zh-CN/releases/v1.3.1.md)。这两个组件均不包含在Python wheel或sdist中。 +源码版本:**1.3.2**。在2026-10-28的准备检查时,最后确认的已发布稳定版本为**1.3.1**。macOS防火墙说明和Direct监听器/TLS诊断请参阅[维护版本说明](docs/zh-CN/releases/v1.3.2.md)。Control的Better Auth安全更新位于仓库源码中,不包含在Python wheel/sdist内,需另行批准部署。 + +可选的[MCP extra](docs/zh-CN/mcp.md)现在要求`mcp>=1.30,<2`;MCP的Python 3.10+要求和无外部依赖的Python 3.9核心保持不变。现有MCP环境需要显式升级软件包。 1.3.0增加传递说明、本地与SSH路由预设及收件人地址簿、有时限的handoff观察、受信任SSH配置、配对链接和按版本设置的通知偏好。支持的组合与限制请参阅[发布范围与验证条件](docs/zh-CN/releases/v1.3.0.md)。软件包发布与生产环境部署是两项独立操作。 diff --git a/RELEASING.ja.md b/RELEASING.ja.md index 993f86d..975fa72 100644 --- a/RELEASING.ja.md +++ b/RELEASING.ja.md @@ -1,5 +1,15 @@ # session-peerのリリース +## v1.3.2 準備 + +PR #345のゲート修正ソース基準は`a68c6cf16c234cd3fe72926e519e4178c093081a`です。マージ済みPR #347後の統合準備基準は、バージョン準備コミットより前の`ef7748a78e6b466f67074708f5c14decf37f31d7`です。最終公開記録でリリースコミットを別途特定します。 + +公開済みv1.3.1を基準に2026-10-28に準備しました。[メンテナンス案内](docs/ja/releases/v1.3.2.md)は#341/#342のDirect起動・accept・TLS診断、旧Python向け実験用プローブの修正、macOSファイアウォールの案内を扱います。Direct機能のソース基準は`dac1c30b1553136b9379be0c6d94eef34ccbad51`で、最終統合リリースコミットではありません。元のランタイムのペアリングは所有者のPython.appファイアウォール許可後に復旧しており、Direct診断変更は許可を自動化したり、Direct転送・認証・再試行の動作を変えたりしません。最新の準備レビュー、保護されたmainのCI、監査、再現可能な成果物、新規インストール検証が必要です。準備・添付の成功を待ち、不変資産7件、SHA256SUMS、release-provenance.json、認証済みattestationを正確なタグ・ソースと照合してから公開してください。必須の人手によるPyPI環境承認は維持します。公開はサービス配備や別途管理するスキルの更新を含みません。以下の過去の手順はタグを再利用せず保存します。オプションのレシーバー診断を適用するには、レシーバー自身のパッケージ・環境の更新と明示的なプロセス再起動が必要で、単体版session_peer.pyの更新だけでは適用されません。 + +PR #345の#343 Better Auth/core 1.7.7セキュリティ更新と#344の保護された読み取り区間のSIGINT試験同期は、個別レビュー済みのコミットとしてマージされ、PR #347のMCP下限・CIプロファイルもマージされました。レビュー対象のPR #347コミットはMCPの全8セルを含む32チェックに成功し、自動Codexコード・セキュリティレビューも別途指摘なしで完了しました。リリース準備PRのマージ前に現在のmainの検証成功を必須とし、ローカル・PR検証で代用しないでください。Node ControlはPython wheel/sdistに含まれず、別途承認されたサービス配備が必要です。上流のOAuth検証接頭辞変更を確認し、検証ストレージを共有するサーバー間で更新を調整してください。進行中のOAuthサインインは最初からやり直す必要が生じる場合があります。この準備では運用環境への配備、セッション失効、データ移行を行いません。試験修正は製品のシグナル動作を変えず、再実行成功だけで過去のCI失敗原因が立証されるわけではありません。 + +#346/#347のMCP変更は`mcp>=1.30,<2`を要求し、正確なSDK下限`1.30.0`と最新の互換`1.x`プロファイルを検証します。コアPython 3.9とMCP Python 3.10+マーカーは維持します。POSIX CIはMac/Linux × Python 3.10/3.13 × SDKプロファイルの8セルとし、間接依存関係はすべて最低版へ固定せず通常どおり解決します。インストール済みの実際の`stdio`契約を検証し、HTTP/OAuthの悪用可能性を試験したものではありません。ローカルMacでは4プロファイルそれぞれのMCPテスト28件、脆弱性0件を報告した監査、文書チェック69件が成功しており、最終CIは別途確認する必要があります。 + ## v1.3.1 準備 公開済みv1.3.0を基準に2026-10-27に準備しました。[メンテナンス案内](docs/ja/releases/v1.3.1.md)はNode ControlのZod修正(#338/#339)、公開済み互換スキルv0.4.0(#334/#335)、ダウンロードバッジ(#336/#337)を扱います。この準備変更の前に依存関係の修正をマージしてください。最新レビューと保護されたmainのCIを通過した後、不変成果物の検証と必須のPyPI環境における人の承認が必要です。Pythonの公開は稼働中のControlサービスや別途管理するスキルを更新しません。以下の過去のリリース手順で以前のタグを再使用しないでください。 diff --git a/RELEASING.ko.md b/RELEASING.ko.md index e8d62dc..d29b553 100644 --- a/RELEASING.ko.md +++ b/RELEASING.ko.md @@ -1,5 +1,15 @@ # session-peer 릴리스 +## v1.3.2 준비 + +PR #345의 게이트 수정 소스 기준은 `a68c6cf16c234cd3fe72926e519e4178c093081a`입니다. 병합된 PR #347 이후 통합 준비 기준은 버전 준비 커밋 이전의 `ef7748a78e6b466f67074708f5c14decf37f31d7`입니다. 최종 발행 증거에서 릴리스 커밋을 별도로 식별합니다. + +공개된 v1.3.1을 기준으로 2026-10-28에 준비했습니다. [유지보수 안내](docs/ko/releases/v1.3.2.md)는 #341/#342의 Direct 시작·accept·TLS 진단, 구버전 Python 실험 프로브 수정과 macOS 방화벽 안내를 다룹니다. Direct 기능 소스 기준은 `dac1c30b1553136b9379be0c6d94eef34ccbad51`이며 최종 통합 릴리스 커밋은 아닙니다. 기존 런타임의 페어링은 소유자의 Python.app 방화벽 허용 후 복구됐으며, Direct 진단 변경은 그 권한을 자동화하거나 Direct 전송·인증·재시도 동작을 바꾸지 않습니다. 최신 준비 리뷰, 보호된 main의 CI, 감사, 재현 가능한 산출물과 신규 설치 검증이 필요합니다. 준비·첨부가 성공한 뒤 불변 자산 7개, SHA256SUMS, release-provenance.json과 인증된 attestation을 정확한 태그·소스와 대조하고 공개하십시오. 사람이 수행하는 필수 PyPI 환경 승인은 유지합니다. 발행은 서비스 배포나 별도 관리 스킬 갱신을 포함하지 않습니다. 아래의 과거 절차는 태그를 재사용하지 않고 보존합니다. 선택적 수신기 진단을 적용하려면 수신기 자체의 패키지·환경 갱신과 명시적인 프로세스 재시작이 필요하며, 독립 실행형 session_peer.py만 갱신해서는 적용되지 않습니다. + +PR #345의 #343 Better Auth/core 1.7.7 보안 갱신과 #344 보호된 읽기 구간 SIGINT 시험 동기화는 별도로 검토된 커밋으로 병합됐고, PR #347의 MCP 하한·CI 프로필도 병합됐습니다. 검토한 PR #347 커밋은 MCP 8개 셀을 포함한 검사 32개를 모두 통과했으며, 자동 Codex 코드·보안 리뷰도 별도로 지적 없이 완료됐습니다. 릴리스 준비 PR 병합 전에 현재 main 검사의 성공을 확인해야 하며, 로컬·PR 검증은 이를 대신하지 않습니다. Node Control은 Python wheel/sdist에 포함되지 않으며 별도로 승인된 서비스 배포가 필요합니다. 업스트림의 OAuth 검증 접두어 변경을 검토하고 검증 저장소를 공유하는 서버들의 갱신을 조율하십시오. 진행 중인 OAuth 로그인은 처음부터 다시 시작해야 할 수 있습니다. 이 준비에서는 운영 배포·세션 취소·데이터 마이그레이션을 수행하지 않습니다. 시험 수정은 제품의 시그널 동작을 바꾸지 않으며, 재실행 통과만으로 과거 CI 실패 원인이 입증되지는 않습니다. + +#346/#347의 MCP 변경은 `mcp>=1.30,<2`를 요구하며 정확한 SDK 하한 `1.30.0`과 최신 호환 `1.x` 프로필을 검증합니다. 코어 Python 3.9와 MCP Python 3.10+ 마커는 그대로입니다. POSIX CI는 Mac/Linux × Python 3.10/3.13 × SDK 프로필의 8개 셀로 구성하며, 간접 의존성은 모두 최소 버전으로 고정하지 않고 일반 규칙으로 해석합니다. 설치된 실제 `stdio` 계약을 검사하며 HTTP/OAuth 악용 가능성을 검증한 것은 아닙니다. 로컬 Mac에서는 프로필 4개 각각의 MCP 테스트 28개, 취약점 0건을 보고한 감사와 문서 검사 69개를 통과했으며 최종 CI는 별도로 확인해야 합니다. + ## v1.3.1 준비 공개된 v1.3.0을 기준으로 2026-10-27에 준비했습니다. [유지보수 안내](docs/ko/releases/v1.3.1.md)는 Node Control의 Zod 수정(#338/#339), 공개된 호환 스킬 v0.4.0(#334/#335), 다운로드 배지(#336/#337)를 다룹니다. 이 준비 변경보다 의존성 수정을 먼저 병합하십시오. 최신 리뷰와 보호된 main의 CI를 통과한 뒤 불변 산출물 검증과 필수 PyPI 환경의 사람 승인을 거쳐야 합니다. Python 발행은 실행 중인 Control 서비스나 별도 관리 스킬을 갱신하지 않습니다. 아래의 과거 릴리스 절차에서 이전 태그를 재사용하지 마십시오. diff --git a/RELEASING.md b/RELEASING.md index f6369e0..30a9f42 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,5 +1,15 @@ # Releasing session-peer +## v1.3.2 preparation + +Gate-fix source base after PR #345: `a68c6cf16c234cd3fe72926e519e4178c093081a`. Integrated preparation base after merged PR #347: `ef7748a78e6b466f67074708f5c14decf37f31d7`, before the version-preparation commit. Final publication evidence identifies the release commit separately. + +Prepared on 2026-10-28 against published v1.3.1. The [maintenance notes](docs/releases/v1.3.2.md) cover #341/#342 Direct startup/accept/TLS diagnostics, the older-Python experimental probe fix and macOS firewall guidance. Direct-feature source base: `dac1c30b1553136b9379be0c6d94eef34ccbad51`, not the final integrated release commit. Original-runtime pairing recovered after the owner's Python.app firewall approval; the Direct diagnostic change does not automate that permission or change Direct transport/authentication/retry behavior. Require current preparation review, protected-main CI, audits, reproducible artifacts and fresh installs. Wait for successful preparation/attachment and verify all 7 immutable assets, SHA256SUMS, release-provenance.json and authenticated attestations against the exact tag/source before publication; required human PyPI environment approval remains. Publication does not deploy services or update independently managed skills. Preserve the historical procedures below without reusing their tags. Optional receiver diagnostics require the receiver's own package/environment update and explicit process restart; updating only standalone session_peer.py is insufficient. + +PR #345 has merged separately reviewed commits for #343's Better Auth/core 1.7.7 security update and #344's protected-read SIGINT fixture synchronization; PR #347's MCP floor/CI-profile change is also merged. The reviewed PR #347 head passed all 32 checks, including the 8 MCP cells, and automatic Codex code/security reviews separately completed without findings. Require successful current-main checks before the release-preparation PR merge; local or PR validation does not replace them. Node Control is outside Python wheel/sdist and needs a separately authorized service rollout. Review upstream OAuth verification-prefix changes and coordinate upgrades across servers sharing verification storage; pending OAuth sign-ins may need to be started again. This preparation performs no operational rollout, session revocation or data migration. The fixture repair changes no product signal behavior, and passing reruns do not prove the cause of historical CI failures. + +The #346/#347 MCP change requires `mcp>=1.30,<2`, with exact SDK floor `1.30.0` and latest compatible `1.x` profiles. Core Python 3.9 and the MCP Python 3.10+ marker are unchanged. POSIX CI defines 8 Mac/Linux × Python 3.10/3.13 × SDK-profile cells; transitive dependencies resolve normally rather than all being pinned to their minima. Actual installed `stdio` contracts are tested, not HTTP/OAuth exploitability. Local Mac checks passed 28 MCP tests in each of 4 profiles, audits reported 0 vulnerabilities and documentation passed 69 tests; require final CI separately. + ## v1.3.1 preparation Prepared on 2026-10-27 against published v1.3.0. The [maintenance notes](docs/releases/v1.3.1.md) cover the Node Control Zod fix (#338/#339), published compatibility skill v0.4.0 (#334/#335), and download badges (#336/#337). Merge the dependency fix before this preparation. Require current review and protected-main CI, then verified immutable artifacts and required human PyPI environment approval. Python publication does not update a running Control service or independently managed skills. Historical release procedures below must not reuse old tags. diff --git a/RELEASING.zh-CN.md b/RELEASING.zh-CN.md index 788adca..adeb657 100644 --- a/RELEASING.zh-CN.md +++ b/RELEASING.zh-CN.md @@ -1,5 +1,15 @@ # 发布session-peer +## v1.3.2 准备 + +PR #345的门禁修复源码基准为`a68c6cf16c234cd3fe72926e519e4178c093081a`。已合并PR #347后的集成准备基准为版本准备提交前的`ef7748a78e6b466f67074708f5c14decf37f31d7`;最终发布证据会另行标明发布提交。 + +于2026-10-28基于已发布的v1.3.1准备。[维护说明](docs/zh-CN/releases/v1.3.2.md)涵盖#341/#342的Direct启动、accept、TLS诊断,旧版Python实验探测脚本修复及macOS防火墙说明。Direct功能源码基准为`dac1c30b1553136b9379be0c6d94eef34ccbad51`,并非最终集成发布提交。原运行时在所有者允许Python.app的防火墙提示后恢复配对;Direct诊断变更不会自动授予该权限,也不改变Direct传输、认证或重试行为。须完成当前准备审查、受保护main的CI、审计、可复现产物及全新安装验证。等待准备及附件上传成功,将7个不可变资产、SHA256SUMS、release-provenance.json及经过认证的attestation与准确标签和源码核对后再发布;必需的人工PyPI环境审批保持不变。发布不包括服务部署或独立管理技能的更新。保留下方历史流程,不复用其标签。应用可选接收端诊断需更新接收端自身的软件包和环境,并明确重启进程;仅更新独立脚本session_peer.py不足以应用变更。 + +PR #345的#343 Better Auth/core 1.7.7安全更新和#344受保护读取区间SIGINT测试同步已作为分别审查过的提交合并;PR #347的MCP下限及CI配置也已合并。审查的PR #347提交通过全部32项检查,其中包括8个MCP单元;自动Codex代码及安全审查也分别完成且无发现。合并发布准备PR前仍须确认当前main检查成功,本地或PR验证不能替代这些检查。Node Control不包含在Python wheel/sdist中,需另行批准服务部署。请审查上游OAuth验证前缀变更,并协调共享验证存储的服务器升级;正在进行的OAuth登录可能需要重新开始。此次准备不执行运行环境部署、会话吊销或数据迁移。夹具修复不改变产品信号行为,通过重跑也不能证明历史CI失败原因。 + +#346/#347的MCP变更要求`mcp>=1.30,<2`,验证精确SDK下限`1.30.0`及最新兼容`1.x`配置。核心Python 3.9及MCP Python 3.10+标记保持不变。POSIX CI定义Mac/Linux × Python 3.10/3.13 × SDK配置共8个单元;间接依赖仍按通常规则解析,不全部固定至最低版本。验证范围为已安装SDK的实际`stdio`契约,不是HTTP/OAuth可利用性。本地Mac的4种配置各通过28项MCP测试,审计报告0个漏洞,文档检查通过69项;最终CI仍需单独确认。 + ## v1.3.1 准备 于2026-10-27基于已发布的v1.3.0准备。[维护说明](docs/zh-CN/releases/v1.3.1.md)涵盖Node Control的Zod修复(#338/#339)、已发布的兼容技能v0.4.0(#334/#335)及下载量徽章(#336/#337)。应先合并依赖修复,再合并此准备变更。须通过当前审查与受保护main的CI,随后验证不可变产物并取得PyPI环境所要求的人工批准。发布Python软件包不会更新正在运行的Control服务或独立管理的技能。请勿复用下方历史发布流程中的旧标签。 diff --git a/docs/README.md b/docs/README.md index e07636f..6b66e87 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,6 +24,8 @@ installation paths. ## Development and history +- [v1.3.2 maintenance notes](releases/v1.3.2.md) explain macOS firewall approval, Direct listener/TLS diagnostics, the MCP SDK floor and the Control security update outside Python archives, which requires a separate rollout. + - [v1.3.1 maintenance notes](releases/v1.3.1.md) cover the Control dependency fix, compatibility skill update and publication/deployment boundaries. - [v1.3.0 release notes](releases/v1.3.0.md) describe the six merged features, supported combinations and release verification. diff --git a/docs/i18n-manifest.json b/docs/i18n-manifest.json index bde53e3..bb185d0 100644 --- a/docs/i18n-manifest.json +++ b/docs/i18n-manifest.json @@ -7,10 +7,10 @@ "zh-CN" ], "sources": { - "README.md": "96b6b4b72f46059f9df4ebdcf79f0c7f86efd8f3a99e26a4029df7d0bbe532d7", - "RELEASING.md": "75e5f96df663070e67a40560dca15a5bdc1b0d41e240b4b28db75c919ffbcbd7", + "README.md": "bbab4acce7d5bbb1b4a03bd22c48fc71feacc98e231e42d23468309f80be30d1", + "RELEASING.md": "521f2c857e034714f63118eff5a9fcf8a0a4763b1e6c55b1797eee2a00aab424", "SECURITY.md": "8f018f6f98002312e143609b9734aeb971ca5217e146597c06b57b5645031046", - "docs/README.md": "edccfc92bd4e45850b5f5aa31f90cc4fc644e46a1d55529eedee0ca7a0b34c1b", + "docs/README.md": "b2113e46b366055cab95b77ab5940236bc8c18217144b9a6dbd08264773968c6", "docs/agent-adapters.md": "bf185d3121c94829bb412071a25c4d943302e10a6b2e713111e653b8f8c3ea91", "docs/ai-assistant-guide.md": "9624ec96b92fb688fae3be3c94cb3564c77985091be451fbf1f056a1af9b9d9c", "docs/antigravity.md": "f2b5122a0ce6e6fb5bd4d8ed50ce2c8bd2dc9c98ec8ce328405cf7c2cd24229d", @@ -54,6 +54,7 @@ "docs/releases/v1.2.1.md": "70a3026c2d874a6fd7addcaef840ecfa84bf4f33a0165605217379acffa4fddb", "docs/releases/v1.3.0.md": "a422901b83c85cfb48ac0ad2f99dbc82dca46c4929a3016acd15010e4a18188b", "docs/releases/v1.3.1.md": "1600b3f6e708ded1cd5d0cad7b5f2d78244e0e4b01d122d727f2a692fccaf652", + "docs/releases/v1.3.2.md": "fe97d1feec0c3a5ebe04d3b573d2c9872a95b110b9ed57a2ce4989f376e1b96f", "docs/validation/69-rc.md": "e490c6a9ad0fec9108b91c74922cedac7ddf214ed405f8f5523da22f48a4b222", "docs/validation/85-antigravity.md": "f89b175191cd98ab03d4029b487065133814b3c8dd8de8cd0a5cc367e2579e4f", "docs/wake.md": "cde135da2ea7be21c815bb265e694f737dbe467d8e76bb82eb118e3b86e29d22", diff --git a/docs/ja/README.md b/docs/ja/README.md index 4c392ec..f34e1e5 100644 --- a/docs/ja/README.md +++ b/docs/ja/README.md @@ -23,6 +23,8 @@ ## 開発と履歴 +- [v1.3.2メンテナンス案内](releases/v1.3.2.md)ではmacOSのファイアウォール承認、Directリスナー・TLS診断、MCP SDK下限、Python配布物の外にあるControlのセキュリティ更新と別途の配備について説明します。 + - [v1.3.1メンテナンス案内](releases/v1.3.1.md)はControlの依存関係修正、互換スキル更新、公開と運用配備の範囲を説明します。 - [v1.3.0リリースノート](releases/v1.3.0.md)は、マージ済みの6機能、対応する組み合わせ、リリース検証を説明します。 diff --git a/docs/ja/releases/v1.3.2.md b/docs/ja/releases/v1.3.2.md new file mode 100644 index 0000000..92b2120 --- /dev/null +++ b/docs/ja/releases/v1.3.2.md @@ -0,0 +1,37 @@ +# v1.3.2 メンテナンスリリース + +公開済みv1.3.1を基準に2026-10-28に準備しました。Direct機能のソース基準は`dac1c30b1553136b9379be0c6d94eef34ccbad51`で、最終統合リリースコミットではありません。本書は準備範囲を説明します。実際の公開記録は[GitHub Releases](https://github.com/abruption/session-peer/releases)と[PyPI](https://pypi.org/project/session-peer/)で確認してください。 + +PR #345のゲート修正ソース基準は`a68c6cf16c234cd3fe72926e519e4178c093081a`です。マージ済みPR #347後の統合準備基準は、バージョン準備コミットより前の`ef7748a78e6b466f67074708f5c14decf37f31d7`です。最終公開記録でリリースコミットを別途特定します。 + +## 変更内容 + +- #341 / #342:レシーバー起動時の`ready:true`を維持し、`directReadyConfirmed:false`を追加して、ローカルリスナーの設定とリモートからの到達可能性を区別します。TLS完了だけではペアリング、ネイティブ対象へのアクセス、ACKを証明しません。 +- 明示的に選択する`--diagnostic-events`にDirectのコールバック・TLS観測と、上限のあるレシーバーごとの`accepted`、`tlsCompleted`、`tlsFailed`カウンターを追加します。`accepted`と`peer_tls`の段階では合計で60秒に最大2件を記録し、TLS成功・失敗は後者の段階の制限を共有します。正常終了時には0件も含む`summary`の記録を追加で1回試み、終了処理を繰り返しても再試行しません。固定フィールドにアドレス、ピア/セッションID、メッセージデータ、例外原文は含めません。ロギング失敗は元のハンドシェイク例外を置き換えません。既存の同期stderr出力には、出力先が詰まった場合の強制的な制限時間はありません。 +- 実験用TCPプローブはPython 3.9/3.10の`asyncio.TimeoutError`を処理し、Python 3.9/3.13で応答が止まるループバック回帰試験を実施しました。手動の2台のMac・tailnet実験はCIとは別で、`experiments/`はwheel/sdistから除外されます。[実験記録](https://github.com/abruption/session-peer/blob/dac1c30b1553136b9379be0c6d94eef34ccbad51/experiments/macos-direct-listener/README.md)を参照してください。 +- #343 / #345:Node Controlの`better-auth`と`@better-auth/core`の固定版を1.7.5から1.7.7へ更新し、アダプター・telemetryの版もそろえます。上流は[GHSA-965c-763c-88jm](https://github.com/advisories/GHSA-965c-763c-88jm)(重大)、[GHSA-r4xp-prcw-77qf](https://github.com/advisories/GHSA-r4xp-prcw-77qf)(高)、[GHSA-44jh-23m7-hpcf](https://github.com/advisories/GHSA-44jh-23m7-hpcf)(低)の最初の修正版を1.7.7としています。 +- #344 / #345:保護された読み取り区間に入ってからだけREADYを通知するよう、SIGINT試験を同期します。macOS Python 3.13で観測されたシグナル終了(-2)と想定する処理済み終了130の競合に対応し、製品のシグナル動作ではなく試験の同期を変更します。固定sleepや弱いアサーションでこの境界を代用せず、過去のCI失敗の正確な原因も確定していません。 + +- #346 / #347:オプションのMCP SDK要件を`mcp>=1.30,<2`へ引き上げます。コアのPython 3.9下限とMCPのPython 3.10+マーカーは維持します。POSIX CIはMac/Linux、Python 3.10/3.13、正確な下限`1.30.0`または最新の互換`1.x`という2つのSDKプロファイルを組み合わせた8セルです。間接依存関係は通常どおり解決し、下限プロファイルは全パッケージの最低版を検証するものではありません。インストール済みSDKの標準入出力(`stdio`)契約チェックは、HTTP/OAuthの露出や悪用可能性を立証しません。 + +PR #345の2つのゲート修正は個別レビュー済みのコミットとしてマージされ、PR #347のMCP下限・CIプロファイルもマージされました。レビュー対象のPR #347コミットはMCPの全8セルを含む32チェックに成功し、自動Codexコード・セキュリティレビューも別途指摘なしで完了しました。このPR結果は保護された最終mainの検証や公開証拠に代わるものではありません。リリース準備PRのマージ前に現在のmainの検証成功を必須とします。 + +## 原因と互換性の範囲 + +所有者がPython.appへの着信接続を許可した後、両方のMacで、元の公開済みv1.3.1のHomebrew Python 3.14.9ランタイム、同じtailnetのbindアドレスと各機器の同じポートを使い、Directペアリングと認証済みprobeが成功しました。新しい試験用の識別情報を使い、ネイティブ呼び出しは0件でした。転送プロセスや別のインタープリターは不要でした。この結果は、今回の接続を妨げていたのがmacOSアプリケーションファイアウォールの承認待ちだったことを裏付けます。診断コードが接続を復旧したわけではありません。以前の陰性・署名・転送の対照試験は過去の観測記録であり、必須の解決策やmacOS・Tailscale・Pythonに共通する原因の判定ではありません。 + +Directのbind、TLS・認証チェック、期限、ペアリング状態、自動再試行禁止の動作は維持します。ファイアウォール・アクセス方針・ランタイム選択を自動化せず、新しいプラットフォームや一般的なACK対応も追加しません。既存ユーザーのpending状態は再試行・初期化していません。ネイティブ世代識別、handoff、保存先、起動時の受け入れ条件(#180/#181/#268/#304/#306/#307)とSide Session・steering研究は別途扱います。 + +オプションのRelayレシーバーモジュールの変更はwheel/sdistに含まれ、単体版`session_peer.py`には組み込まれません。診断機能を適用するには、レシーバー自身のパッケージ・環境を更新し、そのプロセスを明示的に再起動する必要があります。単体ファイルの更新だけでは、これらのモジュールは更新されません。この公開で運用環境の更新や再起動は行いません。 + +調査したControlソースはSQLiteと`bearer`、`deviceAuthorization`プラグインを使い、勧告のMagic Link/OAuth Proxy/PostgreSQL経路は使っていません。配備済み環境での悪用可能性は立証していません。Node Controlの依存関係修正はPython wheel/sdistに含まれず、別途承認されたサービス配備が必要です。上流のOAuth検証識別子の接頭辞変更を確認し、検証ストレージを共有するサーバー間で更新を調整してください。更新後、進行中だったOAuthサインインは最初からやり直す必要が生じる場合があります。この準備では運用環境への配備、セッション失効、データ移行を行いません。 + +互換スキルはv0.4.0、最小ランタイム0.9.1 / 文書のCLI機能の基準1.3.0を維持し、受信側`codexBin`の最小バージョンも1.0.1のままです。変更のないSHA-256は`debedd472e3b0c0c6844fb63f7fb2f17cb6c6cc8c3e981e9afd2531a35327af7`です。ランタイムの公開は、別途管理するスキルの更新や稼働サービスの配備を行いません。 + +## リリース検証 + +ゲート修正のローカル検証ではControlテスト123件、Node/Python統合テスト11件、脆弱性0件を報告した依存関係監査に加え、Python 3.9/3.13それぞれのstdinテスト17件と制御したシグナル試行400回が成功しました。このローカル結果は保護されたmainのCIや実際のOAuth受け入れ試験に代わるものではありません。 + +ローカルMacのMCP検証では、4つのSDK・PythonプロファイルそれぞれでMCPテスト28件が成功し、依存関係監査の報告は脆弱性0件でした。現在の文書チェックも69件成功しています。このローカル結果はCIの8セル、最終mainの検証やHTTP/OAuth受け入れ試験の代わりにはなりません。 + +#342の検証記録にはRelayテスト354件、文書テスト65件、Python 3.9/3.13で試験したプローブ回帰テスト1件が含まれます。これは実装の検証資料であり、この準備で新しく行ったネイティブエージェントの受け入れ試験ではありません。最新の準備レビュー、保護されたmainのCI、依存関係監査、生成器の一致、再現可能な成果物、新規インストールの検証が必要です。準備成功後、`SHA256SUMS`と`release-provenance.json`を含む不変資産7件、およびそれらの認証済みattestationを正確なタグ・ソースと照合してから公開してください。必須の人手によるPyPI環境承認は維持します。この準備は既存のv1.3.1資産や稼働中のインストールを置き換えません。 diff --git a/docs/ko/README.md b/docs/ko/README.md index 171fa7d..19921d3 100644 --- a/docs/ko/README.md +++ b/docs/ko/README.md @@ -23,6 +23,8 @@ ## 개발과 이력 +- [v1.3.2 유지보수 안내](releases/v1.3.2.md)에서 macOS 방화벽 승인, Direct 리스너·TLS 진단, MCP SDK 하한과 Python 배포물 밖의 Control 보안 업데이트 및 별도 배포 필요성을 설명합니다. + - [v1.3.1 유지보수 안내](releases/v1.3.1.md)는 Control 의존성 수정, 호환 스킬 갱신과 발행·운영 배포의 범위를 설명합니다. - [v1.3.0 릴리스 노트](releases/v1.3.0.md)는 병합된 기능 6개, 지원 조합과 릴리스 검증을 설명합니다. diff --git a/docs/ko/releases/v1.3.2.md b/docs/ko/releases/v1.3.2.md new file mode 100644 index 0000000..3e2cf5e --- /dev/null +++ b/docs/ko/releases/v1.3.2.md @@ -0,0 +1,37 @@ +# v1.3.2 유지보수 릴리스 + +공개된 v1.3.1을 기준으로 2026-10-28에 준비했습니다. Direct 기능 소스 기준은 `dac1c30b1553136b9379be0c6d94eef34ccbad51`이며 최종 통합 릴리스 커밋은 아닙니다. 이 문서는 준비 범위를 설명하며, 실제 공개 기록은 [GitHub Releases](https://github.com/abruption/session-peer/releases)와 [PyPI](https://pypi.org/project/session-peer/)에서 확인하십시오. + +PR #345의 게이트 수정 소스 기준은 `a68c6cf16c234cd3fe72926e519e4178c093081a`입니다. 병합된 PR #347 이후 통합 준비 기준은 버전 준비 커밋 이전의 `ef7748a78e6b466f67074708f5c14decf37f31d7`입니다. 최종 발행 증거에서 릴리스 커밋을 별도로 식별합니다. + +## 변경 사항 + +- #341 / #342: 수신기 시작 출력의 `ready:true`를 유지하고 `directReadyConfirmed:false`를 추가해 로컬 리스너 구성과 원격 도달 가능성을 구분합니다. TLS 완료만으로 페어링·네이티브 대상 접근·ACK를 증명하지 않습니다. +- 명시적으로 선택하는 `--diagnostic-events`에 Direct 콜백·TLS 관측과 상한이 있는 수신기별 `accepted`, `tlsCompleted`, `tlsFailed` 카운터를 추가합니다. `accepted`와 `peer_tls` 단계는 합계로 60초에 최대 2개를 기록하며, TLS 성공·실패는 후자의 단계 제한을 공유합니다. 정상 종료 시에는 0회도 포함한 `summary`의 기록을 1번 더 시도하고, 종료 처리를 반복해도 재시도하지 않습니다. 고정 필드에는 주소·피어/세션 ID·메시지 데이터·예외 원문을 포함하지 않습니다. 로깅 실패는 원래 핸드셰이크 예외를 대체하지 않습니다. 기존의 동기식 stderr 출력에는 출력 대상이 막혔을 때 강제 시간 제한이 없습니다. +- 실험용 TCP 프로브는 Python 3.9/3.10의 `asyncio.TimeoutError`를 처리하며, Python 3.9/3.13에서 응답이 지연되는 루프백 회귀 시험을 수행했습니다. 수동 두 Mac·tailnet 실험은 CI와 별개이며 `experiments/`는 wheel/sdist에서 제외됩니다. [실험 기록](https://github.com/abruption/session-peer/blob/dac1c30b1553136b9379be0c6d94eef34ccbad51/experiments/macos-direct-listener/README.md)을 참고하십시오. +- #343 / #345: Node Control의 `better-auth`와 `@better-auth/core` 고정 버전을 1.7.5에서 1.7.7로 올리고 어댑터·telemetry 버전도 맞춥니다. 업스트림은 [GHSA-965c-763c-88jm](https://github.com/advisories/GHSA-965c-763c-88jm)(치명적), [GHSA-r4xp-prcw-77qf](https://github.com/advisories/GHSA-r4xp-prcw-77qf)(높음), [GHSA-44jh-23m7-hpcf](https://github.com/advisories/GHSA-44jh-23m7-hpcf)(낮음)의 최초 수정 버전을 1.7.7로 명시합니다. +- #344 / #345: 보호된 읽기 구간에 들어간 뒤에만 READY를 알리도록 SIGINT 시험을 동기화합니다. macOS Python 3.13에서 관측한 시그널 종료(-2)와 기대한 처리 후 종료 130 사이의 경합에 대응하며, 제품의 시그널 동작이 아닌 시험 동기화를 바꿉니다. 고정 sleep이나 약화된 단언으로 이 경계를 대체하지 않으며, 과거 CI 실패의 정확한 원인이 확정된 것은 아닙니다. + +- #346 / #347: 선택적 MCP SDK 요구 사항을 `mcp>=1.30,<2`로 올립니다. 코어의 Python 3.9 하한과 MCP의 Python 3.10+ 마커는 그대로입니다. POSIX CI는 Mac/Linux, Python 3.10/3.13, 정확한 하한 `1.30.0` 또는 최신 호환 `1.x`의 SDK 프로필 2개를 조합한 8개 셀로 구성합니다. 간접 의존성은 일반 규칙으로 해석하며, 하한 프로필이 모든 패키지의 최소 버전을 검증하는 것은 아닙니다. 설치된 SDK의 표준 입출력(`stdio`) 계약 검사는 HTTP/OAuth 노출이나 악용 가능성을 입증하지 않습니다. + +PR #345의 두 게이트 수정은 별도로 검토된 커밋으로 병합됐고, PR #347의 MCP 하한·CI 프로필도 병합됐습니다. 검토한 PR #347 커밋은 MCP 8개 셀을 포함한 검사 32개를 통과했으며, 자동 Codex 코드·보안 리뷰도 별도로 지적 없이 완료됐습니다. 이 PR 결과는 보호된 최종 main 검증이나 발행 증거를 대신하지 않습니다. 릴리스 준비 PR 병합 전 현재 main 검사의 성공을 확인해야 합니다. + +## 원인과 호환성 범위 + +소유자가 Python.app의 들어오는 연결을 허용한 뒤, 두 Mac 모두 공개된 원래 v1.3.1의 Homebrew Python 3.14.9 런타임, 각 Mac에서 같은 tailnet 바인딩 주소와 포트로 Direct 페어링과 인증된 probe를 완료했습니다. 새 시험 신원을 사용했고 네이티브 호출은 0회였습니다. 중계기나 대체 인터프리터는 필요하지 않았습니다. 이 결과는 이번 사례의 차단 원인이 macOS 애플리케이션 방화벽의 승인 대기였음을 뒷받침합니다. 진단 코드가 연결을 복구한 것은 아닙니다. 이전의 연결 실패·코드 서명·중계 대조시험은 과거 실측 기록이며 필수 해결책이나 macOS·Tailscale·Python의 보편적인 원인 판정이 아닙니다. + +Direct의 바인딩, TLS·인증 검사, 시간 제한, 페어링 상태와 자동 재시도 금지 동작은 유지합니다. 방화벽·접근 정책·런타임 선택을 자동화하지 않으며 새 플랫폼이나 일반 ACK 지원을 추가하지 않습니다. 기존 사용자의 pending 상태는 재시도하거나 초기화하지 않았습니다. 네이티브 세대 식별·handoff·저장소·시작 시점 수락 조건(#180/#181/#268/#304/#306/#307)과 Side Session·steering 연구는 별도 과제입니다. + +선택적 Relay 수신기 모듈의 변경은 wheel/sdist에 포함되며 독립 실행형 `session_peer.py`에 내장되지 않습니다. 진단 기능을 적용하려면 수신기 자체의 패키지·환경을 갱신하고 해당 프로세스를 명시적으로 재시작해야 합니다. 독립 실행 파일만 갱신해서는 이 모듈이 갱신되지 않습니다. 이번 발행에서는 운영 갱신이나 재시작을 수행하지 않습니다. + +검토한 Control 소스는 SQLite와 `bearer`, `deviceAuthorization` 플러그인을 사용하며, 권고문에 나온 Magic Link/OAuth Proxy/PostgreSQL 경로는 사용하지 않습니다. 운영 환경의 악용 가능성은 입증하지 않았습니다. Node Control 의존성 수정은 Python wheel/sdist에 포함되지 않으며 별도로 승인된 서비스 배포가 필요합니다. 업스트림의 OAuth 검증 식별자 접두어 변경을 검토하고, 검증 저장소를 공유하는 서버들의 갱신을 조율하십시오. 업데이트 뒤 진행 중이던 OAuth 로그인은 처음부터 다시 시작해야 할 수 있습니다. 이 준비에서는 운영 배포·세션 취소·데이터 마이그레이션을 수행하지 않습니다. + +호환 스킬은 v0.4.0, 최소 런타임 0.9.1 / 문서의 CLI 기능 기준 1.3.0을 유지하며 수신 측 `codexBin`의 최소 버전은 1.0.1입니다. 변경되지 않은 SHA-256은 `debedd472e3b0c0c6844fb63f7fb2f17cb6c6cc8c3e981e9afd2531a35327af7`입니다. 런타임 발행은 별도로 관리되는 스킬을 갱신하거나 실행 중인 서비스를 배포하지 않습니다. + +## 릴리스 검증 + +게이트 수정의 로컬 검증에서는 Control 테스트 123개, Node/Python 연동 테스트 11개, 취약점 0건을 보고한 의존성 감사가 기록됐고, Python 3.9/3.13 각각의 stdin 테스트 17개와 통제된 시그널 시도 400회도 통과했습니다. 이 로컬 결과는 보호된 main의 CI나 실제 OAuth 수락 시험을 대신하지 않습니다. + +로컬 Mac MCP 검증은 SDK·Python 프로필 4개 각각에서 MCP 테스트 28개를 통과했고, 의존성 감사에서 보고된 취약점은 0건이었습니다. 현재 문서 검사도 69개를 통과했습니다. 이 로컬 결과는 CI 매트릭스 8개 셀, 최종 main 검사나 HTTP/OAuth 수락 시험을 대신하지 않습니다. + +#342의 검증 기록에는 Relay 테스트 354개, 문서 테스트 65개, Python 3.9/3.13에서 시험한 프로브 회귀 테스트 1개가 포함됩니다. 이는 구현 검증 자료이며 이번 준비의 새로운 네이티브 에이전트 수락 시험은 아닙니다. 최신 준비 리뷰, 보호된 main의 CI, 의존성 감사, 생성기 일치, 재현 가능한 산출물과 신규 설치 검증을 완료해야 합니다. 준비가 성공한 뒤에는 `SHA256SUMS`와 `release-provenance.json`을 포함한 불변 자산 7개 및 해당 자산의 인증된 attestation을 정확한 태그·소스와 대조한 후 공개하십시오. 사람이 수행하는 필수 PyPI 환경 승인은 유지합니다. 이 준비는 기존 v1.3.1 자산이나 운영 설치본을 교체하지 않습니다. diff --git a/docs/releases/v1.3.2.md b/docs/releases/v1.3.2.md new file mode 100644 index 0000000..f19635e --- /dev/null +++ b/docs/releases/v1.3.2.md @@ -0,0 +1,37 @@ +# v1.3.2 maintenance release + +Prepared on 2026-10-28 against published v1.3.1. Direct-feature source base: `dac1c30b1553136b9379be0c6d94eef34ccbad51`; this is not the final integrated release commit. These notes describe the preparation scope; check [GitHub Releases](https://github.com/abruption/session-peer/releases) and [PyPI](https://pypi.org/project/session-peer/) for publication records. + +Gate-fix source base after PR #345: `a68c6cf16c234cd3fe72926e519e4178c093081a`. Integrated preparation base after merged PR #347: `ef7748a78e6b466f67074708f5c14decf37f31d7`, before the version-preparation commit. Final publication evidence identifies the release commit separately. + +## Changes + +- #341 / #342: receiver startup preserves `ready:true` and adds `directReadyConfirmed:false`, distinguishing local listener setup from remote reachability. TLS completion alone does not prove pairing, native-target access or ACK. +- Opt-in `--diagnostic-events` adds Direct callback/TLS observations with bounded per-receiver `accepted`, `tlsCompleted` and `tlsFailed` counters. The `accepted` and `peer_tls` phases permit at most 2 records per 60 seconds in total; TLS success/failure share the latter phase limit. Normal close attempts 1 additional `summary`, including zero counts, without repeating it on repeated close. Fixed fields omit addresses, peer/session IDs, message data and exception text. Logging failures do not replace handshake exceptions. Existing synchronous stderr has no hard deadline for a blocked sink. +- The experimental TCP probe catches `asyncio.TimeoutError` on Python 3.9/3.10 and has a stalled-loopback regression test on Python 3.9/3.13. Manual two-Mac/tailnet experiments remain separate from CI; `experiments/` is excluded from wheel/sdist. See the [experiment record](https://github.com/abruption/session-peer/blob/dac1c30b1553136b9379be0c6d94eef34ccbad51/experiments/macos-direct-listener/README.md). +- #343 / #345: update Node Control's exact `better-auth` and `@better-auth/core` versions from 1.7.5 to 1.7.7, with aligned adapters/telemetry. Upstream lists 1.7.7 as the first patched version for [GHSA-965c-763c-88jm](https://github.com/advisories/GHSA-965c-763c-88jm) (critical), [GHSA-r4xp-prcw-77qf](https://github.com/advisories/GHSA-r4xp-prcw-77qf) (high) and [GHSA-44jh-23m7-hpcf](https://github.com/advisories/GHSA-44jh-23m7-hpcf) (low). +- #344 / #345: synchronize the SIGINT test fixture so READY is announced only inside the protected read. This addresses the observed macOS Python 3.13 race between signal termination (-2) and the expected handled exit 130; it changes test synchronization, not product signal behavior. No fixed sleep or weaker assertion is a substitute for that boundary, and the exact cause of historical CI failures is not established. + +- #346 / #347: raise the optional MCP SDK requirement to `mcp>=1.30,<2`. The core Python 3.9 floor and MCP Python 3.10+ marker remain unchanged. POSIX CI defines 8 cells: Mac/Linux, Python 3.10/3.13 and 2 SDK profiles, exact floor `1.30.0` or latest compatible `1.x`. Transitive dependencies resolve normally; the floor profile does not certify every package's minimum version. Installed standard-input/output (`stdio`) contract checks do not establish HTTP/OAuth exposure or exploitability. + +PR #345 has merged the two separately reviewed gate fixes, and PR #347 has merged the MCP floor/CI-profile work. The reviewed PR #347 head passed 32 checks, including all 8 MCP cells; its automatic Codex code/security reviews separately completed without findings. These PR results do not replace final protected-main validation or publication evidence. Require successful current-main checks before merging the release-preparation PR. + +## Incident and compatibility boundaries + +After the owner allowed Python.app's incoming connections, both Macs completed Direct pairing and authenticated probes using the original released session-peer v1.3.1 on the Homebrew Python 3.14.9 runtime, the same tailnet bind addresses and per-machine ports, fresh test identities and zero native calls. No forwarder or alternate interpreter was needed. This supports pending macOS Application Firewall approval as the blocker in this incident; the diagnostic code did not restore the connection. Earlier negative/signature/forwarding controls are historical evidence, not required remedies or a universal macOS/Tailscale/Python diagnosis. + +Direct binds, TLS/authentication checks, deadlines, pairing state and no-automatic-retry behavior are unchanged. No firewall, access policy or runtime selection is automated, and no platform or general ACK support is added. Existing user pending state was not retried or reset. Native generation, handoff, storage and startup acceptance (#180/#181/#268/#304/#306/#307) and Side Session/steering research remain separate. + +The optional Relay receiver module changes are included in wheel/sdist, not embedded in standalone `session_peer.py`. Applying the diagnostics requires updating the receiver's own package/environment and explicitly restarting its process; a standalone-file update alone does not update those modules. This release performs no operational update or restart. + +The inspected Control source uses `bearer` and `deviceAuthorization` plugins with SQLite, not the Magic Link/OAuth Proxy/PostgreSQL paths named in the advisories; deployed exploitability was not established. The Node Control dependency patch is outside the Python wheel/sdist and requires its own separately authorized service rollout. Review the upstream OAuth verification-identifier prefix changes and coordinate upgrades across servers sharing verification storage; pending OAuth sign-ins may need to be started again after the update. This preparation performs no operational rollout, session revocation or data migration. + +The compatibility skill remains v0.4.0, minimum runtime 0.9.1 / documented CLI coverage 1.3.0; receiver `codexBin` retains its 1.0.1 floor. Its unchanged SHA-256 is `debedd472e3b0c0c6844fb63f7fb2f17cb6c6cc8c3e981e9afd2531a35327af7`. Runtime publication does not update independently managed skills or deploy running services. + +## Release verification + +Local gate-fix validation passed 123 Control tests, 11 Node/Python integration tests, 17 stdin tests on each of Python 3.9/3.13 and 400 controlled signal attempts; dependency audits reported 0 vulnerabilities. These local results do not replace protected-main CI or live OAuth acceptance. + +Local Mac MCP validation passed 28 MCP tests in each of 4 SDK/Python profiles, with dependency audits reporting 0 vulnerabilities; current documentation checks passed 69 tests. These local results do not replace the 8-cell CI matrix, final main checks or HTTP/OAuth acceptance. + +The #342 verification record includes 354 Relay tests, 65 documentation tests and 1 probe regression tested on Python 3.9/3.13. These are implementation evidence, not new native-agent acceptance for this preparation. Require current preparation review, protected-main CI, dependency audits, generator consistency, reproducible artifacts and fresh installations. After preparation succeeds, verify all 7 immutable assets (including `SHA256SUMS` and `release-provenance.json`) and their authenticated attestations against the exact tag/source before publication. Required human PyPI environment approval remains. Existing v1.3.1 assets and operating installations are not replaced by this preparation. diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index f7fc002..503a93e 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -22,6 +22,8 @@ ## 开发与历史 +- [v1.3.2维护说明](releases/v1.3.2.md)说明macOS防火墙授权、Direct监听器/TLS诊断、MCP SDK下限,以及位于Python分发包之外且需要单独部署的Control安全更新。 + - [v1.3.1维护说明](releases/v1.3.1.md)介绍Control依赖修复、兼容技能更新以及发布与运行环境部署的界限。 - [v1.3.0发行说明](releases/v1.3.0.md)介绍已合并的六项功能、支持的组合和发行验证。 diff --git a/docs/zh-CN/releases/v1.3.2.md b/docs/zh-CN/releases/v1.3.2.md new file mode 100644 index 0000000..28a2ce4 --- /dev/null +++ b/docs/zh-CN/releases/v1.3.2.md @@ -0,0 +1,37 @@ +# v1.3.2 维护版本 + +于2026-10-28基于已发布的v1.3.1准备。Direct功能源码基准为`dac1c30b1553136b9379be0c6d94eef34ccbad51`,并非最终集成发布提交。本文说明准备范围;实际发布记录请查看[GitHub Releases](https://github.com/abruption/session-peer/releases)和[PyPI](https://pypi.org/project/session-peer/)。 + +PR #345的门禁修复源码基准为`a68c6cf16c234cd3fe72926e519e4178c093081a`。已合并PR #347后的集成准备基准为版本准备提交前的`ef7748a78e6b466f67074708f5c14decf37f31d7`;最终发布证据会另行标明发布提交。 + +## 变更 + +- #341 / #342:保留接收端启动时的`ready:true`,增加`directReadyConfirmed:false`,以区分本地监听器建立与远程可达性。TLS完成本身不能证明配对完成、原生目标访问或ACK。 +- 显式启用的`--diagnostic-events`增加Direct回调及TLS观测,以及有上限的每个接收端的`accepted`、`tlsCompleted`、`tlsFailed`计数器。`accepted`和`peer_tls`阶段合计每60秒最多记录2条;TLS成功和失败共享后者的阶段限制。正常关闭时额外尝试记录1次包含零计数的`summary`,重复关闭不会再次尝试。固定字段不包含地址、对端/会话ID、消息数据或异常原文。日志失败不会替换原始握手异常。现有同步stderr输出在目标阻塞时没有强制超时机制。 +- 实验性TCP探测脚本处理Python 3.9/3.10中的`asyncio.TimeoutError`,并在Python 3.9/3.13上运行了回环无响应回归测试。手动的双Mac及tailnet实验与CI分开;`experiments/`不包含在wheel/sdist中。请参阅[实验记录](https://github.com/abruption/session-peer/blob/dac1c30b1553136b9379be0c6d94eef34ccbad51/experiments/macos-direct-listener/README.md)。 +- #343 / #345:将Node Control的`better-auth`和`@better-auth/core`固定版本从1.7.5更新至1.7.7,并对齐适配器及telemetry版本。上游将1.7.7列为[GHSA-965c-763c-88jm](https://github.com/advisories/GHSA-965c-763c-88jm)(严重)、[GHSA-r4xp-prcw-77qf](https://github.com/advisories/GHSA-r4xp-prcw-77qf)(高)及[GHSA-44jh-23m7-hpcf](https://github.com/advisories/GHSA-44jh-23m7-hpcf)(低)的首个修复版本。 +- #344 / #345:同步SIGINT测试夹具,仅在进入受保护的读取区间后发送READY。它处理macOS Python 3.13中观测到的信号终止(-2)与预期已处理退出130之间的竞争;变更针对测试同步,不改变产品信号行为。不使用固定sleep或弱化断言替代该边界,也未确定历史CI失败的准确原因。 + +- #346 / #347:将可选MCP SDK要求提高至`mcp>=1.30,<2`。核心Python 3.9下限及MCP Python 3.10+标记保持不变。POSIX CI包含8个单元:Mac/Linux、Python 3.10/3.13,以及精确下限`1.30.0`或最新兼容`1.x`这2种SDK配置。间接依赖仍按通常规则解析;下限配置不代表验证所有软件包的最低版本。已安装SDK的标准输入输出(`stdio`)契约检查不能证明HTTP/OAuth暴露或可利用性。 + +PR #345的两项门禁修复已作为分别审查过的提交合并,PR #347的MCP下限及CI配置也已合并。审查的PR #347提交通过了包括全部8个MCP单元在内的32项检查;自动Codex代码及安全审查也分别完成且无发现。这些PR结果不能替代受保护最终main的验证或发布证据。合并发布准备PR前仍须确认当前main检查成功。 + +## 原因与兼容性边界 + +所有者允许Python.app接收入站连接后,两台Mac均使用原先已发布的v1.3.1 Homebrew Python 3.14.9运行时、相同的tailnet绑定地址及各自相同的端口,完成了Direct配对和已认证probe。试验使用新的身份,原生调用为0次,不需要转发进程或替代解释器。这一结果支持macOS应用程序防火墙等待批准是本次事件的阻断原因;连接并非由诊断代码恢复。此前的阴性、签名及转发对照是历史观测,不是必需的补救办法,也不是对所有macOS、Tailscale或Python问题的通用诊断。 + +Direct绑定、TLS与认证检查、截止时间、配对状态及禁止自动重试的行为均保持不变。不自动修改防火墙、访问策略或选择运行时,也不增加平台或通用ACK支持。未重试或重置现有用户的pending状态。原生代次标识、handoff、存储及启动验收条件(#180/#181/#268/#304/#306/#307)和Side Session、steering研究仍为独立工作。 + +可选Relay接收端模块的变更包含在wheel/sdist中,不嵌入独立脚本`session_peer.py`。应用诊断功能需要更新接收端自身的软件包和环境,并明确重启其进程;仅更新独立脚本不会更新这些模块。此次发布不执行运行环境更新或重启。 + +检查的Control源码使用SQLite及`bearer`、`deviceAuthorization`插件,未使用公告中的Magic Link/OAuth Proxy/PostgreSQL路径;未证实部署环境中的可利用性。Node Control依赖修复不包含在Python wheel/sdist中,需另行批准服务部署。请审查上游OAuth验证标识符前缀变更,并协调共享验证存储的服务器升级;更新后,正在进行的OAuth登录可能需要重新开始。此次准备不执行运行环境部署、会话吊销或数据迁移。 + +兼容技能保持v0.4.0,最低运行时0.9.1 / 文档CLI功能覆盖基准1.3.0;接收端`codexBin`的最低版本仍为1.0.1。未变更的SHA-256为`debedd472e3b0c0c6844fb63f7fb2f17cb6c6cc8c3e981e9afd2531a35327af7`。运行时发布不会更新独立管理的技能或部署正在运行的服务。 + +## 发布验证 + +门禁修复的本地验证记录了123项Control测试、11项Node/Python集成测试及报告0个漏洞的依赖审计,并通过了Python 3.9/3.13各17项stdin测试及400次受控信号尝试。这些本地结果不能替代受保护main的CI或实际OAuth验收。 + +本地Mac MCP验证在4种SDK/Python配置中各通过28项MCP测试,依赖审计报告0个漏洞;当前文档检查通过69项测试。这些本地结果不能替代8单元CI矩阵、最终main检查或HTTP/OAuth验收。 + +#342的验证记录包括354项Relay测试、65项文档测试,以及在Python 3.9/3.13中验证的1项探测脚本回归测试。这些是实现验证资料,不是此次准备新增的原生代理验收。发布前需完成当前准备审查、受保护main的CI、依赖审计、生成器一致性、可复现产物及全新安装验证。准备成功后,须将包括`SHA256SUMS`和`release-provenance.json`在内的7个不可变资产及其经过认证的attestation与准确的标签和源码核对,再进行发布。必需的人工PyPI环境审批保持不变。此次准备不替换现有v1.3.1资产或运行中的安装。 diff --git a/session_peer.py b/session_peer.py index 44460f0..3544e84 100644 --- a/session_peer.py +++ b/session_peer.py @@ -45,7 +45,7 @@ except ImportError: # Native Windows uses its own read-only writer inspection. fcntl = None -__version__ = "1.3.1" +__version__ = "1.3.2" GITHUB_REPO = "abruption/session-peer" # Claude Code refuses a same-machine message once its serialized form passes diff --git a/session_peer_core/common.py b/session_peer_core/common.py index 1368fa1..6bfb99c 100644 --- a/session_peer_core/common.py +++ b/session_peer_core/common.py @@ -45,7 +45,7 @@ except ImportError: # Native Windows uses its own read-only writer inspection. fcntl = None -__version__ = "1.3.1" +__version__ = "1.3.2" GITHUB_REPO = "abruption/session-peer" # Claude Code refuses a same-machine message once its serialized form passes diff --git a/tests/docs/test_docs_i18n.py b/tests/docs/test_docs_i18n.py index 8d06d0e..712f680 100644 --- a/tests/docs/test_docs_i18n.py +++ b/tests/docs/test_docs_i18n.py @@ -64,7 +64,7 @@ class DocumentationTranslationsTest(unittest.TestCase): def test_every_canonical_document_has_each_translation(self): sources = canonical_documents() - self.assertEqual(51, len(sources), "Update the translation manifest for new canonical docs") + self.assertEqual(52, len(sources), "Update the translation manifest for new canonical docs") canonical_docs = { path.relative_to(ROOT / "docs") for path in (ROOT / "docs").rglob("*.md") diff --git a/tests/docs/test_stable_candidate.py b/tests/docs/test_stable_candidate.py index 7bfd4ad..6640e89 100644 --- a/tests/docs/test_stable_candidate.py +++ b/tests/docs/test_stable_candidate.py @@ -235,7 +235,7 @@ def test_completed_release_examples_are_explicitly_historical(self): def test_source_version_keeps_experimental_acceptance_gates(self): for suffix in ("", ".ko", ".ja", ".zh-CN"): text = (ROOT / ("README" + suffix + ".md")).read_text(encoding="utf-8") - self.assertIn("**1.3.0**", text) + self.assertIn("**" + session_peer.__version__ + "**", text) self.assertIn("releases/v1.3.0.md", text) self.assertIn("handoff-runtime.md", text) self.assertIn("POSIX", text) @@ -255,8 +255,8 @@ def test_source_version_keeps_experimental_acceptance_gates(self): self.assertIn(marker, english) def test_package_and_generated_core_version_agree(self): - self.assertEqual(session_peer.__version__, "1.3.1") - self.assertIn('__version__ = "1.3.1"', + self.assertEqual(session_peer.__version__, "1.3.2") + self.assertIn('__version__ = "1.3.2"', (ROOT / "session_peer_core/common.py").read_text(encoding="utf-8")) def test_current_readmes_and_runbooks_match_source_version(self): @@ -264,7 +264,7 @@ def test_current_readmes_and_runbooks_match_source_version(self): for stem in ("README", "RELEASING"): with self.subTest(stem=stem, suffix=suffix): text = (ROOT / (stem + suffix + ".md")).read_text(encoding="utf-8") - self.assertIn("1.3.1", text) + self.assertIn("1.3.2", text) self.assertNotIn("1.0.0rc4", text) if stem == "RELEASING": self.assertIn("--draft=false --prerelease=false --latest", text) @@ -287,17 +287,17 @@ def test_release_notes_keep_scope_and_limits_visible(self): def test_stable_release_keeps_operational_deployment_separate(self): profiles = ( - ("", "Source version: **1.3.1**.", - "At the 2026-10-27 preparation checkpoint, the last verified published stable release was **1.3.0**.", + ("", "Source version: **1.3.2**.", + "At the 2026-10-28 preparation checkpoint, the last verified published stable release was **1.3.1**.", "Development candidate 1.2.1 is unpublished"), - (".ko", "소스 버전: **1.3.1**.", - "2026-10-27 준비 시점의 마지막 확인 공개 안정판은 **1.3.0**이었습니다.", + (".ko", "소스 버전: **1.3.2**.", + "2026-10-28 준비 시점의 마지막 확인 공개 안정판은 **1.3.1**이었습니다.", "개발 후보 1.2.1은 미공개입니다"), - (".ja", "ソースバージョン:**1.3.1**。", - "2026-10-27の準備時点で、最後に確認した公開済み安定版は**1.3.0**でした。", + (".ja", "ソースバージョン:**1.3.2**。", + "2026-10-28の準備時点で、最後に確認した公開済み安定版は**1.3.1**でした。", "開発候補1.2.1は未公開です"), - (".zh-CN", "源码版本:**1.3.1**。", - "在2026-10-27的准备检查时,最后确认的已发布稳定版本为**1.3.0**。", + (".zh-CN", "源码版本:**1.3.2**。", + "在2026-10-28的准备检查时,最后确认的已发布稳定版本为**1.3.1**。", "开发候选版本1.2.1尚未发布"), ) for suffix, source_version, dated_checkpoint, stale_unpublished in profiles: