diff --git a/README.ja.md b/README.ja.md index e40c47f7..55777f58 100644 --- a/README.ja.md +++ b/README.ja.md @@ -38,6 +38,8 @@ Python 3.9以上が必要です。基本のローカル・SSH CLIに外部Python 2026-10-07付のメンテナンス版の[リリースノート](docs/ja/releases/v1.0.4.md)を参照してください。パッケージ公開と本番環境への配備は別です。 +リリース候補 **1.1.0** を準備中で、まだ公開していません。予定される変更と残る検証条件は[候補ノート](docs/ja/releases/v1.1.0.md)を参照してください。 + ```bash pipx install session-peer session-peer --version diff --git a/README.ko.md b/README.ko.md index f5a2db34..019adc40 100644 --- a/README.ko.md +++ b/README.ko.md @@ -38,6 +38,8 @@ Python 3.9 이상이 필요합니다. 기본 로컬·SSH CLI는 외부 Python 2026-10-07 유지보수 릴리스의 [릴리스 노트](docs/ko/releases/v1.0.4.md)를 참고하십시오. 패키지 공개와 운영 배포는 별개입니다. +릴리스 후보 **1.1.0**을 준비하고 있으며 아직 발행하지 않았습니다. 예정된 변경과 남은 검증 조건은 [후보 릴리스 노트](docs/ko/releases/v1.1.0.md)를 참고하십시오. + ```bash pipx install session-peer session-peer --version diff --git a/README.md b/README.md index d55fab48..006677d2 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ Current stable release: **1.0.4**. Maintenance release dated 2026-10-07; see the [release notes](docs/releases/v1.0.4.md). Package publication and operational deployment are separate. +Release candidate **1.1.0** is being prepared; it is not published. See the [candidate notes](docs/releases/v1.1.0.md) for planned changes and remaining acceptance gates. + ```bash pipx install session-peer session-peer --version diff --git a/README.zh-CN.md b/README.zh-CN.md index 3773eedb..c23edc01 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -38,6 +38,8 @@ session-peer使用各智能体自身的收件箱和队列;接收方智能体 请参阅2026-10-07维护版本的[发布说明](docs/zh-CN/releases/v1.0.4.md)。软件包发布与生产环境部署是两项独立操作。 +发布候选 **1.1.0** 正在准备,尚未发布。计划变更与剩余验收条件请参阅[候选说明](docs/zh-CN/releases/v1.1.0.md)。 + ```bash pipx install session-peer session-peer --version diff --git a/RELEASING.ja.md b/RELEASING.ja.md index 12c0749d..3ff9bf3b 100644 --- a/RELEASING.ja.md +++ b/RELEASING.ja.md @@ -1,18 +1,18 @@ # session-peerのリリース -1.0.4は、1.0.3に続く2026-10-07付のメンテナンスリリースです。準備のみの承認では、タグ作成、ドラフト作成、ワークフローの起動、公開には進みません。このリリースを完了するよう明示的に指示された場合、公開手順は承認されたものとして扱います。ただし、必須の人手によるPyPI環境レビューや本番環境への配備が不要になるわけではありません。準備、変更できないGitHub公開、人手によるPyPI環境レビュー、公開後の検証を区別します。保護されたmainでは、レビュー済みで最新のPRと、Pythonのプラットフォーム別テストマトリクス、ドキュメント、シェル、パッケージ/単独ファイル/MCP/Relay/Control、統合テスト、Python/Nodeの依存関係監査を含む統合リリースゲートへの合格が必要です。 +1.1.0は2026-10-09に準備した未公開の候補で、現在の公開安定版は1.0.4です。 準備のみの承認では、タグ作成、ドラフト作成、ワークフローの起動、公開には進みません。このリリースを完了するよう明示的に指示された場合、公開手順は承認されたものとして扱います。ただし、必須の人手によるPyPI環境レビューや本番環境への配備が不要になるわけではありません。準備、変更できないGitHub公開、人手によるPyPI環境レビュー、公開後の検証を区別します。保護されたmainでは、レビュー済みで最新のPRと、Pythonのプラットフォーム別テストマトリクス、ドキュメント、シェル、パッケージ/単独ファイル/MCP/Relay/Control、統合テスト、Python/Nodeの依存関係監査を含む統合リリースゲートへの合格が必要です。 ## 過去の証拠と現在の境界 -5台のホストで行ったv1.0.0 RC4 rc4-rerun-02キャンペーンは14,436.65秒間実行されました。記録はcomplete、公開ヘルスチェックは241/241、プローブは147/147、送信は21/21、Relay再起動後の復旧時間は3.182秒でした。独立して確認できたACKは20/21です。T120のWindowsネイティブClaudeでは、TUIが終了したため元のACKを確認できませんでした。後の別の単発テストでは正確なACKを受信し、所有者は#164でこの例外を受け入れています。20/21という値は変更しないでください。この過去の記録はv1.0.4の検証にはなりません。#161は未解決のままで、外部で発生した停滞の根本原因も未確認です。 +5台のホストで行ったv1.0.0 RC4 rc4-rerun-02キャンペーンは14,436.65秒間実行されました。記録はcomplete、公開ヘルスチェックは241/241、プローブは147/147、送信は21/21、Relay再起動後の復旧時間は3.182秒でした。独立して確認できたACKは20/21です。T120のWindowsネイティブClaudeでは、TUIが終了したため元のACKを確認できませんでした。後の別の単発テストでは正確なACKを受信し、所有者は#164でこの例外を受け入れています。20/21という値は変更しないでください。この過去の記録はv1.0.4またはv1.1.0の検証にはなりません。#161は未解決のままで、外部で発生した停滞の根本原因も未確認です。 -Python/PyPI版のバージョンは1.0.4で、対応するタグとGitHubリリースはv1.0.4です。公開の承認を得た後にのみ、安定版およびLatestとして設定します。プラグインのバージョンは別管理です。コアCLIはPython 3.9以上、MCPは3.10以上、Relayの受信側/サーバーはUnixまたはWSLとPython 3.11以上が必要です。サービス管理下で起動する受信側には、サービスのPATH上にあるCodexか、運用者が管理するcodexBin設定が必要です。パッケージ公開は、ホスト型サービスへの修正適用、フリート全体への導入、本番環境の再起動、稼働中のOAuthの健全性、エージェントからのACKを証明するものではありません。不明な結果が自動再送を許可することはありません。 +Python/PyPI候補は1.1.0で、予定するタグとGitHubリリースはv1.1.0です。準備ではどちらも作成しません。公開の承認を得た後にのみ、安定版およびLatestとして設定します。プラグインのバージョンは別管理です。コアCLIはPython 3.9以上、MCPは3.10以上、Relayの受信側/サーバーはUnixまたはWSLとPython 3.11以上が必要です。サービス管理下で起動する受信側には、サービスのPATH上にあるCodexか、運用者が管理するcodexBin設定が必要です。パッケージ公開は、ホスト型サービスへの修正適用、フリート全体への導入、本番環境の再起動、稼働中のOAuthの健全性、エージェントからのACKを証明するものではありません。不明な結果が自動再送を許可することはありません。 ## ソースと設定のゲート -1. v1.0.4の変更を1.0.3および4言語のリリースノートと照合します。統合後のmainには、メンテナンス修正#262、#263、#264、#265、#266、#267の6件が含まれている必要があります。公開済みv1.0.3のセキュリティ履歴と、独立管理されるスキルのバージョン/最低対応バージョン/全機能対応バージョンの契約を維持します。パッケージと生成物のバージョン、4言語のREADMEにある安定版の案内、アーカイブ内のリリースノートを確認します。cc_peer.pyは変更せず、配布物から除外します。資格情報、鍵、データベース、リプレイ状態、ブラウザープロファイル、ローカルの証拠と会話も含めないでください。 +1. v1.1.0候補を公開版1.0.4と4言語のノートで照合します。PR #261と機能PR #283–#290は通常の保護手順で統合基準 `3b328799b73b69e3640534ce229ec5ba565ca894` にマージ済みです。準備PRの正確なコミットと最終統合mainの検査を必須とし、両方のparser保護と固定契約のバイトを維持し、#180/#181/#268の未対応条件と別のスキルPR #30を再確認します。公開済みv1.0.3のセキュリティ履歴とスキル0.3.2/最低0.9.1/全機能1.0.1を維持します。パッケージ・生成物のバージョン、4言語READMEの公開版/候補の区別、アーカイブを確認します。cc_peer.pyは凍結し配布から除外します。資格情報、鍵、DB、リプレイ状態、ブラウザープロファイル、ローカル証拠と会話も除外します。 2. ローカルテスト一式とPRのリリースゲートを実行します。マージ後、統合済みの公開mainにおける正確なコミットでCIが成功していることを確認します。非公開のセキュリティアドバイザリー修正用フォークの検査は、公開mainに対するこのリリースゲートの代わりにはなりません。クリーンな環境でwheel/sdistをインストールし、隔離環境からインストール済みパッケージをimportできること、正確なCLIバージョン、初期化済みホームでのJSON list、extras、pip checkを検証します。明示的に指定した空のCodexホームはstate_db_missingでfail closed(安全側に停止)する必要があります。このゲートでは実際のメッセージを送信しません。 -3. PyPIに1.0.4のファイルがないことを確認します。2026-10-07の準備確認では、このバージョンのJSONがHTTP 404を返しました。GitHub Immutable Releasesとv*タグ規則を確認し、タグの作成は許可され、迂回手段なしで更新・削除は禁止されていることを確かめます。所有者は2026-10-03に有効化しました(規則24408525)。2026-10-05の確認では、厳格なmainリリースゲートが有効でした。2026-10-07のGitHub API確認では、Immutable Releasesと規則24408525が有効で、対象はrefs/tags/v*、タグの更新・削除は禁止され、迂回手段もないことを再確認しました。過去のv1.0.2は不変ではなく、リリースアセットも含まれていませんでした。これは検証済みの単独ファイルリリースではありません。公開前に現在の設定を再確認します。 +3. PyPIに1.1.0のファイルがないことを確認します。2026-10-07の準備確認では、過去の1.0.4バージョンのJSONがHTTP 404を返しました。GitHub Immutable Releasesとv*タグ規則を確認し、タグの作成は許可され、迂回手段なしで更新・削除は禁止されていることを確かめます。所有者は2026-10-03に有効化しました(規則24408525)。2026-10-05の確認では、厳格なmainリリースゲートが有効でした。2026-10-07のGitHub API確認では、Immutable Releasesと規則24408525が有効で、対象はrefs/tags/v*、タグの更新・削除は禁止され、迂回手段もないことを再確認しました。過去のv1.0.2は不変ではなく、リリースアセットも含まれていませんでした。これは検証済みの単独ファイルリリースではありません。公開前に現在の設定を再確認します。 4. Trusted Publisherがsession-peerをabruption/session-peer、publish.yml、pypiに対応づけていることを確認します。2026-10-05にログイン済みPyPIブラウザーでその対応を確認しましたが、これは過去の証拠であり、PyPIブラウザーによる新たな再確認ではありません。2026-10-07のGitHub API確認では、レビュー担当者`abruption`が必須であること、自己レビューが許可されていること (`prevent_self_review: false`)、`v*`タグが許可されていることを再確認しました。2026-10-05の確認時点では管理者による迂回が有効でした (`can_admins_bypass: true`)。この過去の観測を、現在の迂回ポリシーの確認として扱わないでください。所有者による以前の[2026-09-29対応確認](https://github.com/abruption/session-peer/issues/235#issuecomment-5882178667)も過去の証拠です。設定を再確認し、通常の人手レビューを経てください。無断で迂回しないでください。 ## 不変ドラフトの準備 @@ -21,7 +21,7 @@ Python/PyPI版のバージョンは1.0.4で、対応するタグとGitHubリリ ```bash git fetch origin main --tags -release_tag=v1.0.4 +release_tag=v1.1.0 release_commit=$(git rev-parse origin/main) git tag "$release_tag" "$release_commit" git push origin "$release_tag" @@ -39,7 +39,7 @@ prepare-release.ymlはソース/ref/バージョン/系譜を検証し、再現 このバージョンを公開するのは、所有者から明示的な承認を得た場合に限ります。このリリースを完了するよう既に指示されている場合は、手続き上の承認要件を満たしているため、この手順書だけを理由に再度確認を求めません。ただし、必須の人手によるpypi環境レビューに代わるものではありません。公開するとタグとアセットが固定され、publish.ymlが開始します。 ```bash -gh release edit v1.0.4 --repo abruption/session-peer \ +gh release edit v1.1.0 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` @@ -54,9 +54,9 @@ publish.ymlは所有者、正確なタグ/ソース/main系譜を確認し、固 ## 公開の検証または復旧 -正確なタグとコミットでpublish.ymlおよびPyPIの検証が成功したことを確認します。PyPIから2つのファイルを取得し、ファイル一覧とハッシュが固定済み候補/provenanceと一致することを確認して、クリーンな環境にそれぞれインストールします。隔離環境でのバージョン、初期化済みホームでのJSON list、extras、pip checkも再確認します。安定版/Latestに設定され、通常の更新でv1.0.4が選択されることを確認します。マイルストーンを終了する前に証拠を記録し、#161は監視用として未解決のまま維持します。 +正確なタグとコミットでpublish.ymlおよびPyPIの検証が成功したことを確認します。PyPIから2つのファイルを取得し、ファイル一覧とハッシュが固定済み候補/provenanceと一致することを確認して、クリーンな環境にそれぞれインストールします。隔離環境でのバージョン、初期化済みホームでのJSON list、extras、pip checkも再確認します。安定版/Latestに設定され、通常の更新でv1.1.0が選択されることを確認します。マイルストーンを終了する前に証拠を記録し、#161は監視用として未解決のまま維持します。 -GitHub公開とPyPI公開は、それぞれ別の不可逆な手順です。GitHub公開後に監査が失敗すると、PyPIファイルがないまま固定されたリリースが残る場合があります。両方の実行記録と正確なアセットを保持してください。監査の迂回、変更したアセットでの再アップロード、既存ファイルのスキップ、バージョンの再利用は禁止です。1.0.4の一部だけがアップロードされた場合や不一致があった場合は、昇格を停止します。最初に失敗したゲートを調べ、レビュー済みの変更と新しいバージョン(通常は1.0.5)で修正します。yankしてもバージョンは再利用できません。 +GitHub公開とPyPI公開は、それぞれ別の不可逆な手順です。GitHub公開後に監査が失敗すると、PyPIファイルがないまま固定されたリリースが残る場合があります。両方の実行記録と正確なアセットを保持してください。監査の迂回、変更したアセットでの再アップロード、既存ファイルのスキップ、バージョンの再利用は禁止です。1.1.0の一部だけがアップロードされた場合や不一致があった場合は、昇格を停止します。最初に失敗したゲートを調べ、レビュー済みの変更と新しいバージョン(通常は1.1.1)で修正します。yankしてもバージョンは再利用できません。 ## 検証済み単独ファイルの導入 diff --git a/RELEASING.ko.md b/RELEASING.ko.md index f8a6d4ff..8bec77d6 100644 --- a/RELEASING.ko.md +++ b/RELEASING.ko.md @@ -1,18 +1,18 @@ # session-peer 릴리스 -1.0.4는 1.0.3 이후에 나온 2026-10-07 유지보수 릴리스입니다. 준비만 승인된 경우에는 태그 생성, 초안 작성, 워크플로 실행 또는 공개 단계로 넘어가지 않습니다. 이 릴리스를 완료하라는 명시적 지시는 해당 공개 단계를 승인하지만, 사람이 수행해야 하는 필수 PyPI 환경 검토나 운영 배포까지 승인하는 것은 아닙니다. 릴리스 준비, 불변 GitHub 릴리스 공개, 사람이 수행하는 필수 PyPI 환경 검토, 공개 후 검증은 각각 별도 단계입니다. 보호된 main에 반영하려면 검토를 마치고 최신 main을 반영한 PR과, Python 플랫폼 매트릭스·문서·셸·패키지/독립 실행 파일/MCP/Relay/Control 테스트·통합 테스트·Python/Node 의존성 감사를 포함한 릴리스 게이트가 필요합니다. +1.1.0은 2026-10-09에 준비한 미발행 후보이며 현재 공개 안정판은 1.0.4입니다. 준비만 승인된 경우에는 태그 생성, 초안 작성, 워크플로 실행 또는 공개 단계로 넘어가지 않습니다. 이 릴리스를 완료하라는 명시적 지시는 해당 공개 단계를 승인하지만, 사람이 수행해야 하는 필수 PyPI 환경 검토나 운영 배포까지 승인하는 것은 아닙니다. 릴리스 준비, 불변 GitHub 릴리스 공개, 사람이 수행하는 필수 PyPI 환경 검토, 공개 후 검증은 각각 별도 단계입니다. 보호된 main에 반영하려면 검토를 마치고 최신 main을 반영한 PR과, Python 플랫폼 매트릭스·문서·셸·패키지/독립 실행 파일/MCP/Relay/Control 테스트·통합 테스트·Python/Node 의존성 감사를 포함한 릴리스 게이트가 필요합니다. ## 과거 증거와 현재 경계 -다섯 호스트에서 진행한 v1.0.0 RC4 rc4-rerun-02 캠페인은 14,436.65초 동안 실행됐습니다. 상태는 complete(완료)였고, 공개 health(서비스 상태) 점검 241/241, 프로브(연결 점검) 147/147, 제출 21/21, Relay 재시작 후 복구 시간 3.182초를 기록했습니다. 독립적으로 확인한 ACK(수신 확인)는 20/21입니다. T120 Windows 네이티브 Claude의 원래 ACK는 TUI가 종료되어 확인되지 않았지만, 별도의 단발 확인에서 정확한 ACK를 받았습니다. 소유자는 #164에서 이 예외를 수락했습니다. 집계는 20/21로 유지하십시오. 이 과거 증거는 v1.0.4를 검증하지 않습니다. #161은 계속 열려 있으며 외부 경로 정체의 근본 원인은 확인되지 않았습니다. +다섯 호스트에서 진행한 v1.0.0 RC4 rc4-rerun-02 캠페인은 14,436.65초 동안 실행됐습니다. 상태는 complete(완료)였고, 공개 health(서비스 상태) 점검 241/241, 프로브(연결 점검) 147/147, 제출 21/21, Relay 재시작 후 복구 시간 3.182초를 기록했습니다. 독립적으로 확인한 ACK(수신 확인)는 20/21입니다. T120 Windows 네이티브 Claude의 원래 ACK는 TUI가 종료되어 확인되지 않았지만, 별도의 단발 확인에서 정확한 ACK를 받았습니다. 소유자는 #164에서 이 예외를 수락했습니다. 집계는 20/21로 유지하십시오. 이 과거 증거는 v1.0.4 또는 v1.1.0을 검증하지 않습니다. #161은 계속 열려 있으며 외부 경로 정체의 근본 원인은 확인되지 않았습니다. -Python/PyPI 버전은 1.0.4이며 해당 태그와 GitHub 릴리스는 v1.0.4입니다. 공개 승인이 끝난 뒤에만 안정판·Latest(최신 릴리스)로 설정합니다. 플러그인 버전은 별도로 관리합니다. 코어에는 Python 3.9 이상, MCP에는 Python 3.10 이상이 필요합니다. Relay 수신기와 서버에는 Unix 또는 WSL 환경 및 Python 3.11 이상이 필요합니다. 서비스로 실행되는 수신기는 서비스 PATH에서 Codex를 찾을 수 있거나 운영자가 관리하는 codexBin 바인딩이 있어야 합니다. 패키지를 공개해도 호스팅 서비스에 대응 조치가 적용되거나, 전체 기기에 설치되거나, 운영 환경이 재시작되거나, 실시간 OAuth 상태가 확인되거나, 에이전트 ACK가 수신됐다는 뜻은 아닙니다. 결과가 불확실하면 자동으로 재전송하지 않습니다. +Python/PyPI 후보 버전은 1.1.0이며 예정된 태그와 GitHub 릴리스는 v1.1.0입니다. 준비 작업에서는 둘 다 생성하지 않습니다. 공개 승인이 끝난 뒤에만 안정판·Latest(최신 릴리스)로 설정합니다. 플러그인 버전은 별도로 관리합니다. 코어에는 Python 3.9 이상, MCP에는 Python 3.10 이상이 필요합니다. Relay 수신기와 서버에는 Unix 또는 WSL 환경 및 Python 3.11 이상이 필요합니다. 서비스로 실행되는 수신기는 서비스 PATH에서 Codex를 찾을 수 있거나 운영자가 관리하는 codexBin 바인딩이 있어야 합니다. 패키지를 공개해도 호스팅 서비스에 대응 조치가 적용되거나, 전체 기기에 설치되거나, 운영 환경이 재시작되거나, 실시간 OAuth 상태가 확인되거나, 에이전트 ACK가 수신됐다는 뜻은 아닙니다. 결과가 불확실하면 자동으로 재전송하지 않습니다. ## 소스와 설정 게이트 -1. v1.0.4 변경을 1.0.3 및 네 언어 릴리스 노트와 대조합니다. 통합 main에 유지보수 수정 #262, #263, #264, #265, #266, #267 여섯 건이 포함돼야 합니다. 공개된 v1.0.3 보안 기록과 스킬의 독립 버전 및 최소/전체 지원 계약을 보존합니다. 패키지와 생성 파일의 버전, 네 언어 README의 안정판 안내와 아카이브 노트를 확인합니다. 레거시 cc_peer.py는 동결 상태로 유지하고 배포에서 제외합니다. 자격정보, 키, DB, 재전송 방지 상태, 브라우저 프로필, 로컬 증거와 채팅도 배포에서 제외합니다. +1. v1.1.0 후보를 공개판 1.0.4 및 네 언어 릴리스 노트와 대조합니다. PR #261과 기능 PR #283–#290은 정상 보호 절차에 따라 통합 기준 `3b328799b73b69e3640534ce229ec5ba565ca894`에 병합됐습니다. 준비 PR의 정확한 커밋과 최종 통합 main의 검사를 요구하며 두 parser 보호와 고정 계약의 바이트를 보존하며, #180/#181/#268 미지원 조건과 별도 스킬 PR #30을 재확인합니다. 공개된 v1.0.3 보안 기록과 스킬 0.3.2/최소 0.9.1/전체 1.0.1을 유지합니다. 패키지·생성 버전, 네 언어 README의 공개판/후보 구분과 아카이브를 확인합니다. 레거시 cc_peer.py는 동결하고 배포에서 제외합니다. 자격정보·키·DB·재전송 방지 상태·브라우저 프로필·로컬 증거·채팅도 제외합니다. 2. 전체 로컬 테스트와 PR(풀 리퀘스트) 릴리스 게이트를 실행합니다. 병합 후 공개 main에 통합된 정확한 커밋에서 CI(지속적 통합)가 성공해야 합니다. 비공개 보안 포크의 검사는 공개 릴리스 게이트를 대체하지 않습니다. 깨끗한 환경에서 wheel/sdist를 설치하고, 격리 환경의 설치 패키지를 import하며, 정확한 CLI 버전, 초기화된 홈에서의 JSON list, 선택 의존성(extras)과 pip check를 검증합니다. Codex 홈을 명시적으로 비워 둔 경우에는 state_db_missing으로 차단 상태에서 실패해야 합니다. 이 게이트에서는 실제 메시지를 전송하지 않습니다. -3. PyPI에 1.0.4 파일이 없는지 확인합니다. 2026-10-07 준비 확인 당시 해당 버전의 JSON 응답은 HTTP 404였습니다. GitHub 불변 릴리스 기능과 v* 태그 규칙을 확인합니다. 태그 생성은 허용되고, 수정·삭제는 우회 없이 차단돼야 합니다. 소유자는 2026-10-03에 이를 활성화했고(규칙 24408525), 2026-10-05 확인에서는 엄격한 main 릴리스 게이트를 확인했습니다. 2026-10-07 GitHub API 확인에서도 불변 릴리스 기능과 규칙 24408525가 활성 상태이고, refs/tags/v*에 적용되며, 우회 없이 수정·삭제를 차단하는 것을 재확인했습니다. 과거 v1.0.2는 불변 릴리스가 아니었고 자산도 없어 검증된 독립형 설치 릴리스가 아닙니다. 공개 전에 현재 설정을 다시 확인합니다. +3. PyPI에 1.1.0 파일이 없는지 확인합니다. 2026-10-07 준비 확인 당시 과거 1.0.4 버전의 JSON 응답은 HTTP 404였습니다. GitHub 불변 릴리스 기능과 v* 태그 규칙을 확인합니다. 태그 생성은 허용되고, 수정·삭제는 우회 없이 차단돼야 합니다. 소유자는 2026-10-03에 이를 활성화했고(규칙 24408525), 2026-10-05 확인에서는 엄격한 main 릴리스 게이트를 확인했습니다. 2026-10-07 GitHub API 확인에서도 불변 릴리스 기능과 규칙 24408525가 활성 상태이고, refs/tags/v*에 적용되며, 우회 없이 수정·삭제를 차단하는 것을 재확인했습니다. 과거 v1.0.2는 불변 릴리스가 아니었고 자산도 없어 검증된 독립형 설치 릴리스가 아닙니다. 공개 전에 현재 설정을 다시 확인합니다. 4. Trusted Publisher(신뢰된 게시자)가 session-peer를 abruption/session-peer, publish.yml, pypi에 연결하는지 확인합니다. 2026-10-05 로그인된 PyPI 브라우저에서 해당 연결을 확인했습니다. 이는 과거 증거이며 새 PyPI 브라우저 검증은 아닙니다. 2026-10-07 GitHub API 확인에서는 필수 검토자가 `abruption`이고, 자기 검토가 허용되며 (`prevent_self_review: false`), `v*` 태그가 허용되는 것을 재확인했습니다. 2026-10-05 확인 당시에는 관리자 우회도 활성화돼 있었습니다 (`can_admins_bypass: true`). 이 과거 관찰을 현재 우회 정책의 증거로 간주하지 않습니다. 소유자의 이전 [2026-09-29 연결 확인](https://github.com/abruption/session-peer/issues/235#issuecomment-5882178667)도 과거 증거입니다. 설정을 다시 확인하고 정해진 사람 검토 절차를 따르며, 이 절차를 숨긴 채 우회하지 않습니다. ## 변경 불가능한 초안 준비 @@ -21,7 +21,7 @@ Python/PyPI 버전은 1.0.4이며 해당 태그와 GitHub 릴리스는 v1.0.4입 ```bash git fetch origin main --tags -release_tag=v1.0.4 +release_tag=v1.1.0 release_commit=$(git rev-parse origin/main) git tag "$release_tag" "$release_commit" git push origin "$release_tag" @@ -39,7 +39,7 @@ prepare-release.yml은 소스/ref/버전/커밋 계보를 확인하고, 재현 해당 버전에 대해 소유자의 명시적 승인이 있을 때만 공개합니다. 이미 릴리스 완료를 지시했다면 이 런북의 승인 요건은 충족되므로, 런북에 적힌 절차만을 이유로 두 번째 확인을 요구하지 않습니다. 다만 이 지시는 필수적인 사람의 pypi 환경 검토를 승인하거나 대체하지 않습니다. 공개하면 태그와 릴리스 파일이 고정되고 publish.yml이 시작됩니다. ```bash -gh release edit v1.0.4 --repo abruption/session-peer \ +gh release edit v1.1.0 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` @@ -54,9 +54,9 @@ publish.yml은 소유자, 정확한 태그/소스/main 계보를 확인한 뒤 ## 공개 검증 또는 복구 -정확한 태그/커밋에 대해 publish.yml과 PyPI 검증이 성공했는지 확인합니다. PyPI 파일 두 개를 내려받아 파일 목록과 해시가 고정된 후보/출처 증명과 일치하는지 확인하고, 깨끗한 환경에서 각각 설치합니다. 격리 환경에서 버전, 초기화된 홈의 JSON list, extras와 pip check를 다시 확인합니다. 안정판/Latest 설정과 일반 업데이트가 v1.0.4를 선택하는지도 확인합니다. 마일스톤을 닫기 전에 증거를 기록하고, #161은 모니터링 이슈로 계속 열어 둡니다. +정확한 태그/커밋에 대해 publish.yml과 PyPI 검증이 성공했는지 확인합니다. PyPI 파일 두 개를 내려받아 파일 목록과 해시가 고정된 후보/출처 증명과 일치하는지 확인하고, 깨끗한 환경에서 각각 설치합니다. 격리 환경에서 버전, 초기화된 홈의 JSON list, extras와 pip check를 다시 확인합니다. 안정판/Latest 설정과 일반 업데이트가 v1.1.0를 선택하는지도 확인합니다. 마일스톤을 닫기 전에 증거를 기록하고, #161은 모니터링 이슈로 계속 열어 둡니다. -GitHub와 PyPI 공개는 서로 별개이며 되돌릴 수 없습니다. GitHub 릴리스 공개 후 감사에 실패하면 PyPI 파일이 없는 고정 릴리스가 남을 수 있습니다. 두 실행 기록과 해당 릴리스 파일을 보존합니다. 감사를 우회하거나, 수정된 파일로 업로드를 다시 실행하거나, 이미 존재하는 파일을 건너뛰거나, 버전을 재사용하지 않습니다. 1.0.4 파일 일부만 업로드되거나 파일이 일치하지 않으면 승격을 중단합니다. 처음 실패한 게이트의 원인을 진단하고 검토된 수정 사항을 새 버전(일반적으로 1.0.5)에 반영해 진행합니다. PyPI에서 yank(일반 의존성 해결에서 해당 버전을 제외하는 표시)해도 버전을 재사용할 수 없습니다. +GitHub와 PyPI 공개는 서로 별개이며 되돌릴 수 없습니다. GitHub 릴리스 공개 후 감사에 실패하면 PyPI 파일이 없는 고정 릴리스가 남을 수 있습니다. 두 실행 기록과 해당 릴리스 파일을 보존합니다. 감사를 우회하거나, 수정된 파일로 업로드를 다시 실행하거나, 이미 존재하는 파일을 건너뛰거나, 버전을 재사용하지 않습니다. 1.1.0 파일 일부만 업로드되거나 파일이 일치하지 않으면 승격을 중단합니다. 처음 실패한 게이트의 원인을 진단하고 검토된 수정 사항을 새 버전(일반적으로 1.1.1)에 반영해 진행합니다. PyPI에서 yank(일반 의존성 해결에서 해당 버전을 제외하는 표시)해도 버전을 재사용할 수 없습니다. ## 검증된 독립 실행 파일 설치 diff --git a/RELEASING.md b/RELEASING.md index 7d52d9e6..11e5aa9b 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,18 +1,18 @@ # Releasing session-peer -Version 1.0.4 is the maintenance release after 1.0.3, dated 2026-10-07. Preparation-only authorization stops before tags, drafts, workflow dispatch or publication; an explicit instruction to complete this release authorizes those publication steps, not the required human PyPI environment review or operational deployment. Keep preparation, immutable GitHub publication, the human PyPI environment review and post-publication verification distinct. Protected main requires reviewed, up-to-date PRs and the aggregate release gate, including Python platform matrices, documentation, shell, package/standalone/MCP/Relay/Control tests, integrations and Python/Node dependency audits. +Version 1.1.0 is an unpublished candidate prepared on 2026-10-09; the current published stable release remains 1.0.4. Preparation-only authorization stops before tags, drafts, workflow dispatch or publication; an explicit instruction to complete this release authorizes those publication steps, not the required human PyPI environment review or operational deployment. Keep preparation, immutable GitHub publication, the human PyPI environment review and post-publication verification distinct. Protected main requires reviewed, up-to-date PRs and the aggregate release gate, including Python platform matrices, documentation, shell, package/standalone/MCP/Relay/Control tests, integrations and Python/Node dependency audits. ## Historical evidence and current boundaries -The five-host v1.0.0 RC4 rc4-rerun-02 campaign ran for 14,436.65 seconds: complete record, public health 241/241, probes 147/147, submissions 21/21 and Relay restart recovery in 3.182 seconds. Independent ACKs were 20/21. T120 Windows native Claude had no confirmed original ACK because its TUI closed; a distinct one-shot check later received an exact ACK. The owner accepted this exception in #164. Keep 20/21 unchanged; this historical evidence does not validate v1.0.4. #161 remains open with the external stall root cause unconfirmed. +The five-host v1.0.0 RC4 rc4-rerun-02 campaign ran for 14,436.65 seconds: complete record, public health 241/241, probes 147/147, submissions 21/21 and Relay restart recovery in 3.182 seconds. Independent ACKs were 20/21. T120 Windows native Claude had no confirmed original ACK because its TUI closed; a distinct one-shot check later received an exact ACK. The owner accepted this exception in #164. Keep 20/21 unchanged; this historical evidence does not validate v1.0.4 or v1.1.0. #161 remains open with the external stall root cause unconfirmed. -The Python/PyPI version is 1.0.4; the corresponding tag and GitHub release are v1.0.4. Make it stable and Latest only after authorized publication. The plugin version remains independent. Core requires Python 3.9+, MCP 3.10+, Relay receiver/server Unix or WSL and Python 3.11+. Service receivers need Codex on their service PATH or an operator-owned codexBin binding. Package publication does not establish hosted remediation, fleet installation, production restarts, live OAuth health or agent ACKs. Unknown outcomes never authorize automatic resend. +The Python/PyPI candidate version is 1.1.0; the planned tag and GitHub release are v1.1.0, neither created by preparation. Make it stable and Latest only after authorized publication. The plugin version remains independent. Core requires Python 3.9+, MCP 3.10+, Relay receiver/server Unix or WSL and Python 3.11+. Service receivers need Codex on their service PATH or an operator-owned codexBin binding. Package publication does not establish hosted remediation, fleet installation, production restarts, live OAuth health or agent ACKs. Unknown outcomes never authorize automatic resend. ## Source and configuration gates -1. Review the v1.0.4 changes against 1.0.3 and all four release notes. Require the six maintenance fixes #262, #263, #264, #265, #266 and #267 on integrated main. Preserve the published v1.0.3 security history and the independent skill version/minimum/full-coverage contract. Confirm package/generated version, four README stable-release notices and archive notes; keep legacy cc_peer.py frozen and excluded from distributions. Exclude credentials, keys, databases, replay state, browser profiles, local evidence and chats. +1. Review the v1.1.0 candidate against published 1.0.4 and all four release notes. PR #261 and feature PRs #283–#290 are merged through normal protections at integrated base `3b328799b73b69e3640534ce229ec5ba565ca894`. Require exact preparation-head and final integrated-main checks; preserve both parser protections and frozen contract bytes, and reassess #180/#181/#268 unsupported gates and companion skill PR #30. Preserve published v1.0.3 security history and skill 0.3.2/minimum 0.9.1/full 1.0.1. Check package/generated versions, four README published/candidate distinctions and archives; keep legacy cc_peer.py frozen and excluded. Exclude credentials, keys, databases, replay state, browser profiles, local evidence and chats. 2. Run the complete local suite and PR release gate. Require successful CI on exact integrated public main after merge; private advisory fork checks are not a substitute for that public release gate. Validate clean wheel/sdist installs, isolated installed imports, exact CLI version, initialized-home JSON list, extras and pip check. An explicit empty Codex home must fail closed with state_db_missing. Do not submit live messages for this gate. -3. Verify PyPI has no 1.0.4 files. The 2026-10-07 preparation check returned HTTP 404 for its version JSON. Verify GitHub Immutable Releases and the v* tag ruleset: creation allowed, tag update/deletion blocked with no bypass. The owner enabled these on 2026-10-03 (ruleset 24408525); the 2026-10-05 check confirmed the strict main release gate. The 2026-10-07 GitHub API check reconfirmed Immutable Releases enabled and ruleset 24408525 active, covering refs/tags/v* with update/deletion blocked and no bypass. Historical v1.0.2 was nonimmutable with no assets and is not a verified standalone release; recheck current settings before publication. +3. Verify PyPI has no 1.1.0 files. The 2026-10-07 preparation check returned HTTP 404 for the historical 1.0.4 version JSON. Verify GitHub Immutable Releases and the v* tag ruleset: creation allowed, tag update/deletion blocked with no bypass. The owner enabled these on 2026-10-03 (ruleset 24408525); the 2026-10-05 check confirmed the strict main release gate. The 2026-10-07 GitHub API check reconfirmed Immutable Releases enabled and ruleset 24408525 active, covering refs/tags/v* with update/deletion blocked and no bypass. Historical v1.0.2 was nonimmutable with no assets and is not a verified standalone release; recheck current settings before publication. 4. Verify the Trusted Publisher maps session-peer to abruption/session-peer, publish.yml and pypi. A signed-in PyPI browser inspection on 2026-10-05 verified that mapping; it is historical evidence, not a new PyPI browser verification. The 2026-10-07 GitHub API check reconfirmed required reviewer `abruption`, self-review allowed (`prevent_self_review: false`) and `v*` tags accepted. Administrator bypass was enabled at the 2026-10-05 check (`can_admins_bypass: true`); do not treat that historical observation as a new bypass-policy check. The owner's earlier [2026-09-29 mapping check](https://github.com/abruption/session-peer/issues/235#issuecomment-5882178667) is historical evidence too. Recheck settings, use normal human review and never silently bypass it. ## Prepare the immutable draft @@ -21,7 +21,7 @@ After the preparation PR is merged, record the exact main commit and create a li ```bash git fetch origin main --tags -release_tag=v1.0.4 +release_tag=v1.1.0 release_commit=$(git rev-parse origin/main) git tag "$release_tag" "$release_commit" git push origin "$release_tag" @@ -39,7 +39,7 @@ prepare-release.yml verifies source/ref/version/ancestry, builds twice reproduci Publish only with the owner's explicit authorization for this version. An existing instruction to complete this release satisfies the procedural approval requirement; do not demand a second confirmation solely because of this runbook. It does not replace the required human pypi environment review. Publishing locks the tag and assets and starts publish.yml. ```bash -gh release edit v1.0.4 --repo abruption/session-peer \ +gh release edit v1.1.0 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` @@ -54,9 +54,9 @@ publish.yml requires the repository owner, verifies exact tag/source/main ancest ## Verify publication or recover -Verify publish.yml and its PyPI verification succeeded for the exact tag/commit. Download both PyPI files, compare the exact file set and hashes with locked candidates/provenance, and install each independently in fresh environments. Recheck isolated version, JSON list on an initialized home, extras and pip check. Confirm stable/Latest and normal update selection of v1.0.4. Record evidence before closing the milestone; retain #161 as monitoring. +Verify publish.yml and its PyPI verification succeeded for the exact tag/commit. Download both PyPI files, compare the exact file set and hashes with locked candidates/provenance, and install each independently in fresh environments. Recheck isolated version, JSON list on an initialized home, extras and pip check. Confirm stable/Latest and normal update selection of v1.1.0. Record evidence before closing the milestone; retain #161 as monitoring. -GitHub and PyPI publication are separate irreversible steps. An audit failure after GitHub publication can leave a locked release without PyPI files; preserve both runs and exact assets. Do not bypass audits, rerun uploads with modified artifacts, skip existing files or reuse versions. A partial 1.0.4 upload or mismatch stops promotion. Diagnose the first failed gate and fix forward through reviewed changes and a new version, normally 1.0.5. Yanking does not permit reuse. +GitHub and PyPI publication are separate irreversible steps. An audit failure after GitHub publication can leave a locked release without PyPI files; preserve both runs and exact assets. Do not bypass audits, rerun uploads with modified artifacts, skip existing files or reuse versions. A partial 1.1.0 upload or mismatch stops promotion. Diagnose the first failed gate and fix forward through reviewed changes and a new version, normally 1.1.1. Yanking does not permit reuse. ## Verified standalone installation diff --git a/RELEASING.zh-CN.md b/RELEASING.zh-CN.md index 260b4846..285df55c 100644 --- a/RELEASING.zh-CN.md +++ b/RELEASING.zh-CN.md @@ -1,18 +1,18 @@ # 发布session-peer -1.0.4是继1.0.3之后、日期为2026-10-07的维护版本。仅获得准备授权时,必须在创建标签、草稿、调度工作流或发布前停止。明确要求完成此版本发布,即表示授权执行这些发布步骤;但不能替代必需的人工PyPI环境审核或生产环境部署。请区分准备、不可变的GitHub发布、人工PyPI环境审核和发布后验证。受保护的main要求PR经过审核并与main保持最新,同时通过汇总发布门禁;门禁涵盖Python平台测试矩阵、文档、shell、包/单文件/MCP/Relay/Control、集成测试以及Python/Node依赖审计。 +1.1.0是2026-10-09准备的未发布候选,当前已公开稳定版仍为1.0.4。 仅获得准备授权时,必须在创建标签、草稿、调度工作流或发布前停止。明确要求完成此版本发布,即表示授权执行这些发布步骤;但不能替代必需的人工PyPI环境审核或生产环境部署。请区分准备、不可变的GitHub发布、人工PyPI环境审核和发布后验证。受保护的main要求PR经过审核并与main保持最新,同时通过汇总发布门禁;门禁涵盖Python平台测试矩阵、文档、shell、包/单文件/MCP/Relay/Control、集成测试以及Python/Node依赖审计。 ## 历史证据与当前边界 -在5台主机上进行的v1.0.0 RC4 rc4-rerun-02测试持续了14,436.65秒。记录状态为complete,公开健康检查为241/241,探测为147/147,提交为21/21,Relay重启后的恢复时间为3.182秒。独立确认的ACK为20/21。在Windows原生Claude的T120测试中,TUI已关闭,因此无法确认原始ACK;之后另一次单独测试收到了准确的ACK。所有者在#164中接受了这一例外。请保留20/21这一结果;这段历史记录不能证明v1.0.4已通过验证。#161仍未解决,外部停滞的根本原因也尚未确认。 +在5台主机上进行的v1.0.0 RC4 rc4-rerun-02测试持续了14,436.65秒。记录状态为complete,公开健康检查为241/241,探测为147/147,提交为21/21,Relay重启后的恢复时间为3.182秒。独立确认的ACK为20/21。在Windows原生Claude的T120测试中,TUI已关闭,因此无法确认原始ACK;之后另一次单独测试收到了准确的ACK。所有者在#164中接受了这一例外。请保留20/21这一结果;这段历史记录不能证明v1.0.4或v1.1.0已通过验证。#161仍未解决,外部停滞的根本原因也尚未确认。 -Python/PyPI版本为1.0.4,对应标签和GitHub发布为v1.0.4。只有在获得发布授权后,才能将其设为稳定版和Latest。插件版本独立管理。核心CLI需要Python 3.9+,MCP需要3.10+,Relay接收端/服务器需要Unix或WSL及Python 3.11+。由服务管理器启动的接收端需要在服务PATH中找到Codex,或使用由运维人员管理的codexBin绑定。软件包发布不能证明托管服务的修复已部署、已安装到所有设备、生产服务已重启、线上OAuth运行正常或代理已发送ACK。未知结果不能作为自动重发的依据。 +Python/PyPI候选版本为1.1.0,计划标签与GitHub版本为v1.1.0;准备阶段不创建二者。只有在获得发布授权后,才能将其设为稳定版和Latest。插件版本独立管理。核心CLI需要Python 3.9+,MCP需要3.10+,Relay接收端/服务器需要Unix或WSL及Python 3.11+。由服务管理器启动的接收端需要在服务PATH中找到Codex,或使用由运维人员管理的codexBin绑定。软件包发布不能证明托管服务的修复已部署、已安装到所有设备、生产服务已重启、线上OAuth运行正常或代理已发送ACK。未知结果不能作为自动重发的依据。 ## 源码与配置门禁 -1. 将v1.0.4的变更与v1.0.3及四种语言的发布说明对照。确保合并后的main包含#262、#263、#264、#265、#266、#267这6项维护修复。保留已发布的v1.0.3安全历史,以及独立技能的版本、最低运行时版本和完整功能覆盖版本契约。确认软件包和生成文件中的版本、四种语言README中的稳定版提示,以及归档内的发布说明。冻结cc_peer.py并将其排除在发行包之外;同时排除凭据、密钥、数据库、重放状态、浏览器配置文件、本地证据和聊天记录。 +1. 对照已发布1.0.4与四语言说明审核v1.1.0候选。PR #261与功能PR #283–#290已通过正常保护流程合并至集成基准 `3b328799b73b69e3640534ce229ec5ba565ca894`。必须检查准备PR的准确提交与最终集成main,保留两种parser保护与固定契约字节,并复查#180/#181/#268未支持条件和独立技能PR #30。保留已公开v1.0.3安全历史和技能0.3.2/最低0.9.1/完整1.0.1。检查软件包/生成版本、四语言README的公开版/候选区分与归档。冻结cc_peer.py并排除发布;同样排除凭据、密钥、DB、重放状态、浏览器配置、本地证据与聊天。 2. 运行完整的本地测试和PR发布门禁。合并后,必须确认合并后的公开main在准确提交上通过CI。私有安全公告修复分支上的检查不能替代公开发布门禁。验证在干净环境中安装wheel/sdist、在隔离环境中导入已安装的软件包、CLI版本准确、在已初始化主目录中执行JSON list、extras以及pip check。显式指定的空Codex主目录必须因state_db_missing而安全失败(fail closed)。执行此门禁期间不要提交真实消息。 -3. 确认PyPI上尚无1.0.4文件。2026-10-07的准备检查中,该版本JSON返回了HTTP 404。检查GitHub Immutable Releases和v*标签规则:允许创建标签;禁止更新或删除标签,且不设置绕过权限。所有者于2026-10-03启用了该规则(规则编号24408525),2026-10-05的检查确认严格的main发布门禁。2026-10-07的GitHub API检查再次确认Immutable Releases已启用、规则24408525有效、适用于refs/tags/v*,并且禁止更新/删除且没有绕过权限。历史版本v1.0.2并非不可变,也没有发布资产,因此不是经过验证的单文件发布版本。发布前请重新检查当前设置。 +3. 确认PyPI上尚无1.1.0文件。2026-10-07的准备检查中,历史1.0.4版本JSON返回了HTTP 404。检查GitHub Immutable Releases和v*标签规则:允许创建标签;禁止更新或删除标签,且不设置绕过权限。所有者于2026-10-03启用了该规则(规则编号24408525),2026-10-05的检查确认严格的main发布门禁。2026-10-07的GitHub API检查再次确认Immutable Releases已启用、规则24408525有效、适用于refs/tags/v*,并且禁止更新/删除且没有绕过权限。历史版本v1.0.2并非不可变,也没有发布资产,因此不是经过验证的单文件发布版本。发布前请重新检查当前设置。 4. 确认Trusted Publisher将session-peer映射到abruption/session-peer、publish.yml和pypi。2026-10-05通过已登录的PyPI浏览器确认过该映射;这属于历史证据,并非新的PyPI浏览器复核。2026-10-07的GitHub API检查再次确认必须由审核者`abruption`审核、允许自审 (`prevent_self_review: false`),并允许`v*`标签。2026-10-05检查时,管理员绕过权限已启用 (`can_admins_bypass: true`);不要将这项历史观察当作对当前绕过策略的确认。所有者此前的[2026-09-29映射检查](https://github.com/abruption/session-peer/issues/235#issuecomment-5882178667)同样属于历史证据。请重新检查设置并按正常流程进行人工审核,不得擅自绕过。 ## 准备不可变草稿 @@ -21,7 +21,7 @@ Python/PyPI版本为1.0.4,对应标签和GitHub发布为v1.0.4。只有在获 ```bash git fetch origin main --tags -release_tag=v1.0.4 +release_tag=v1.1.0 release_commit=$(git rev-parse origin/main) git tag "$release_tag" "$release_commit" git push origin "$release_tag" @@ -39,7 +39,7 @@ prepare-release.yml会验证源码/ref/版本/提交祖先关系,执行两次 只有获得所有者对该版本的明确授权后才能发布。若已有明确指令要求完成此次发布,该指令已满足流程审批要求,不要仅因本手册再次要求确认。但这不能替代必需的人工pypi环境审核。发布会锁定标签和资产,并启动publish.yml。 ```bash -gh release edit v1.0.4 --repo abruption/session-peer \ +gh release edit v1.1.0 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` @@ -54,9 +54,9 @@ publish.yml要求仓库所有者,验证准确标签/源码/main祖先关系, ## 验证发布或恢复 -确认publish.yml及PyPI验证在准确的标签/提交上成功。下载PyPI上的两个文件,比较文件清单及哈希与锁定候选/来源证明,并分别在干净环境中安装。再次检查隔离环境中的版本、已初始化主目录上的JSON list、extras和pip check。确认该版本已设为稳定版/Latest,且常规更新会选择v1.0.4。关闭里程碑前记录证据;将#161保留为监控事项。 +确认publish.yml及PyPI验证在准确的标签/提交上成功。下载PyPI上的两个文件,比较文件清单及哈希与锁定候选/来源证明,并分别在干净环境中安装。再次检查隔离环境中的版本、已初始化主目录上的JSON list、extras和pip check。确认该版本已设为稳定版/Latest,且常规更新会选择v1.1.0。关闭里程碑前记录证据;将#161保留为监控事项。 -GitHub发布和PyPI发布是两个彼此独立且不可逆的步骤。GitHub发布后若审计失败,可能留下一个已锁定但没有PyPI文件的版本;请保留两次运行记录和准确的资产。不得绕过审计、修改资产后重新上传、跳过已存在的文件或重用版本。若1.0.4只上传了部分文件或文件不匹配,应停止发布升级。诊断第一个失败的门禁,并通过经过审核的变更和新版本(通常为1.0.5)进行前向修复(fix forward)。撤回(yank)也不能让版本重新用于发布。 +GitHub发布和PyPI发布是两个彼此独立且不可逆的步骤。GitHub发布后若审计失败,可能留下一个已锁定但没有PyPI文件的版本;请保留两次运行记录和准确的资产。不得绕过审计、修改资产后重新上传、跳过已存在的文件或重用版本。若1.1.0只上传了部分文件或文件不匹配,应停止发布升级。诊断第一个失败的门禁,并通过经过审核的变更和新版本(通常为1.1.1)进行前向修复(fix forward)。撤回(yank)也不能让版本重新用于发布。 ## 已验证单文件安装 diff --git a/docs/README.md b/docs/README.md index ad792dbe..ff943a31 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,5 +27,6 @@ installation paths. - [Handoff runtime candidate](handoff-runtime.md) describes unreleased private receipts, supported routes and remaining acceptance gates. - [v1 compatibility contract](compatibility-v1.md) classifies stable, versioned, migrated, internal and experimental surfaces. - [Agent transport architecture](architecture/agent-transports.md) and the [relay development plan](relay-development-plan.md) explain implementation boundaries. +- [v1.1.0 candidate notes](releases/v1.1.0.md) describe the unpublished preparation, dependency order and partial support boundaries; current published stable remains 1.0.4. - [v1.0.4 notes](releases/v1.0.4.md) describe the current maintenance release dated 2026-10-07; [v1.0.3 notes](releases/v1.0.3.md) preserve the prior security release history; [validation records](validation/69-rc.md) preserve scoped evidence and limitations. - The completed relay69 prototype source was removed after its unique regressions moved to the product relay suite. Git history remains the source for obsolete prototype code. diff --git a/docs/i18n-manifest.json b/docs/i18n-manifest.json index 2d5813c0..e70e3770 100644 --- a/docs/i18n-manifest.json +++ b/docs/i18n-manifest.json @@ -7,10 +7,10 @@ "zh-CN" ], "sources": { - "README.md": "bcaf0aeedb55ba1b07bdf2b6c42b37aeec7d844d82a3052c1a24b88f91ec7ba6", - "RELEASING.md": "bee4a16ddbdb9c1db30781b5310bce2808fafc1966e57083b7e4c6681225921d", + "README.md": "308f1bc9c1d707ff9a09e28abe744497ec33699ddf11bd19bcc767daf81263bc", + "RELEASING.md": "f4c4f92682087c23d274c420dc11db35e01d8aeed1c0dec05be0f0d15a32ad6e", "SECURITY.md": "8f018f6f98002312e143609b9734aeb971ca5217e146597c06b57b5645031046", - "docs/README.md": "d08c0f55ae687a6bb29a951dddd7431b0e9d1b267169e7e774b6a06f819154ed", + "docs/README.md": "65937e28c9a0329d166106570af4b86535590a7d5cb22d2b096d23406d70af54", "docs/agent-adapters.md": "bf185d3121c94829bb412071a25c4d943302e10a6b2e713111e653b8f8c3ea91", "docs/ai-assistant-guide.md": "9624ec96b92fb688fae3be3c94cb3564c77985091be451fbf1f056a1af9b9d9c", "docs/antigravity.md": "f2b5122a0ce6e6fb5bd4d8ed50ce2c8bd2dc9c98ec8ce328405cf7c2cd24229d", @@ -47,6 +47,7 @@ "docs/releases/v1.0.2.md": "4bfec1a160e07a834b557d15119f04969500e2262193a4043adf1ab6aa4a631b", "docs/releases/v1.0.3.md": "3643d17793f0b2273d124d89d13b27309e325c7b7ab7db3b101a68d13de391ea", "docs/releases/v1.0.4.md": "5185d9ff93a98077621ec017e54f73138dcf05fe9de121b073f9a097240b40b4", + "docs/releases/v1.1.0.md": "24246f35c4bd859c6c2c8b781e411d24fb824836b4faf54e379b4f33e2bd6b03", "docs/validation/69-rc.md": "e490c6a9ad0fec9108b91c74922cedac7ddf214ed405f8f5523da22f48a4b222", "docs/validation/85-antigravity.md": "468ba1702a60c57079730ab5b7545b0b1968f11cc6832f0ac88460664ba87723", "docs/wake.md": "cde135da2ea7be21c815bb265e694f737dbe467d8e76bb82eb118e3b86e29d22", diff --git a/docs/ja/README.md b/docs/ja/README.md index f99ca6ad..08569efe 100644 --- a/docs/ja/README.md +++ b/docs/ja/README.md @@ -26,5 +26,6 @@ - [Handoff ランタイム候補](handoff-runtime.md)は、未公開の非公開受領確認実装、対応経路、残る受け入れ条件を説明します。 - [v1互換性契約](compatibility-v1.md)はstable、versioned、migrated、internal、experimentalなsurfaceを分類します。 - [エージェント転送アーキテクチャ](architecture/agent-transports.md)と[リレー開発計画](relay-development-plan.md)は実装境界を説明します。 +- [v1.1.0候補ノート](releases/v1.1.0.md)は未公開の準備・依存順序・部分対応の境界を説明します。現在の公開安定版は1.0.4です。 - [v1.0.4ノート](releases/v1.0.4.md)は2026-10-07付の現在のメンテナンス版を説明し、[v1.0.3ノート](releases/v1.0.3.md)は以前のセキュリティ版の履歴を、[検証記録](validation/69-rc.md)は範囲付きの証拠と制限を保存します。 - 完了したrelay69プロトタイプのソースは、固有の回帰テストを製品リレースイートへ移した後に削除しました。旧プロトタイプコードはGit履歴に残ります。 diff --git a/docs/ja/releases/v1.1.0.md b/docs/ja/releases/v1.1.0.md new file mode 100644 index 00000000..eb2415cb --- /dev/null +++ b/docs/ja/releases/v1.1.0.md @@ -0,0 +1,32 @@ +# v1.1.0 リリース候補 + +## 状態と前提条件 + +2026-10-09に準備した未公開候補で、現在の公開安定版は1.0.4です。PR #261と機能PR #283–#290は通常の保護手順でマージ済みです。機能の統合基準は `3b328799b73b69e3640534ce229ec5ba565ca894` です。この準備はバージョン・文書の変更であり公開ではありません。準備PRの正確なコミットでCIが成功し、リリース作成前に承認済みの最終mainを再確認する必要があります。 + +## 予定される変更 + +- #242 / #283: Bash/zshとPowerShell 5.1の任意の `sp` シェルエイリアスは、正式な `session-peer` を通じて引数、標準入力、終了コードを保持します。wheel/sdistには手動で有効化するファイルが含まれます。PowerShellの既定エイリアスを含む既存のエイリアス・関数・実行ファイルとの衝突は拒否します。プロファイル/PATH変更、自動有効化、Python/TypeScript選択器はありません。単独ファイルの導入には別途レビューしたファイルが必要です。 +- #268 / #284: 継承された `CODEX_SQLITE_HOME` または検査した設定のルート `sqlite_home` がある場合、探索・キュー送信・wakeの前に安全側で停止します。限定された保存先保護であり、移動したDBの対応やCodexの全実効設定の証明ではありません。 +- #232 / #285: 外部メッセージ本文を引用し、送信元と返信先の主張を未検証として示します。ペアリング受信側の認証済み識別はデバイス鍵であり、人やモデルではありません。本文の区分は万能なプロンプト注入対策ではありません。追加文も容量制限に含まれ、`chars` は処理後の本文を示します。 +- #180 / #286: 任意のClaude `targetGeneration` 探索と `--target-generation` は元のプロセス・接続先を固定し、書き込み前に接続済みの相手を再確認します。古い対象は実行前に拒否します。Codex、Antigravity、ペアリングデバイスの世代保証は未対応で、writer再起動によって未対応状態が対応済みになることはありません。 +- #183 / #287: 任意の `--ssh-identity` は接続のホスト鍵証拠を示し、`--require-ssh-host-key` は認証・リモート実行前に実際の接続の鍵を固定します。POSIXの通常のEd25519/RSA/ECDSA鍵に対応し、ホスト証明書とセキュリティ鍵の種類には対応しません。ホスト鍵はエージェント識別・セッション世代・ACKではありません。 +- #238 / #288: 協調的なwake深度・送信元識別子の伝播と対象別呼び出し制限が既存の保護を補います。環境変数が削除されると新しい送信元で開始でき、共有MCPの起動環境は呼び出しごとの文脈ではありません。ネイティブwakeは以前に検証したCodex 0.154.0の経路に限定されます。 +- #211 / #289: `session-peer setup` はローカル/SSH/Relayの読み取り専用点検と明示的に承認した操作を提供します。既定の点検では鍵やDBを作成せず、管理ツールの案内は自動インストールしません。既存ポリシーを拡張せず、元の登録要求を永続的に保持し、準備確認ではメッセージを送りません。前景受信側の設定はサービス導入ではありません。 +- #181 / #290: 実験的な任意機能handoffは、送信側の永続的な再送防止、時間と容量を制限した標準入力/プロセス処理、受領確認専用の状態・待機・ACK操作を追加します。ローカルPOSIX Claudeは検証済みの元の世代の受領経路に対応します。ローカルCodexと単一宛先POSIXソースストリーミングSSHは相関IDによる送信のみ対応し、観察・ACKは未対応です。必須のdelivered/acknowledged待機は未対応経路で実行前に拒否します。リモート受領、Windows、ペアリングhandoff、複数ホストの任意機能、本文を読まないCodex観察、完全な復元検証は別条件として残ります。 + +## 互換性と安全上の境界 + +コアはPython 3.9以上、MCPは3.10以上、Unix/WSL Relayは3.11以上が必要です。任意機能を無効にした通常の結果はネイティブの省略可能フィールドを保持します。`posted`、`queued`、`submitted` は消費の証明ではなく、不明な結果は自動再送を許可しません。実験的な待機は宛先ごとに既定30秒、整数1–60秒の総時間と整理用5秒を使用します。状態・受領操作はネイティブメッセージを送信しません。受領権限はトークン保持を示すものでモデル識別ではなく、受信側のネイティブ履歴に委譲された権限が残る場合があります。 + +本文区分後の全体にはCodex/ペアリング32 KiB、ペアリングアプリケーションJSON 64 KiB(JSONエスケープを含む)、worker 256 KiB、キューレコード1 MiBの制限が適用されます。通常のSSHは90,000文字とコマンド131,071バイトの制限を維持します。完全で有効なネイティブ応答は通信障害後も保持できますが、不完全またはプロトコル上限を超えた出力は不確実です。 + +同梱スキルは0.3.2で、最低/全機能ランタイム互換性は0.9.1/1.0.1です。別のスキルPR #30は未公開で、新しい案内にはマージ・公開・正確なスナップショット同期が必要です。この候補には含まれません。#180、#181、#268の明示的な未対応検証条件は維持し、この草案で終了しません。 + +## 検証と公開のゲート + +ローカル統合候補の検証は所有するfixtureと隔離した導入を対象とし、新たな実エージェント/SSH/Relay検証ではありません。バージョン変更後、正確な統合mainの新しいCI、単独ファイルの再生成、4言語の文書検査、隔離wheel/sdist導入、手動有効化ファイルの検査、最新の依存関係監査が必要です。過去の20/21 ACK証拠と未解決の#161は変更せず、1.1.0の検証にはなりません。残るプラットフォーム・機能条件を明示してください。 + +パッケージ公開には本番配備を含みません。タグ、不変アセット、GitHub/PyPI公開、人手のPyPI環境レビュー、フリート導入、Control/Relay配備は既存の承認を必要とする別段階です。この文書は公開、サービス再起動、新しい可用性を証明しません。 + +既知のLowレベルDependabot警告GHSA-r374-rxx8-8654は、SSHテスト要件の開発専用Paramiko依存に関するもので、修正済みバージョンは登録されていません。配布ランタイム依存ではなく、ランタイム監査の成功はリポジトリ全体に脆弱性がないことを意味しません。 diff --git a/docs/ko/README.md b/docs/ko/README.md index c3716249..3b25ebb0 100644 --- a/docs/ko/README.md +++ b/docs/ko/README.md @@ -26,5 +26,6 @@ - [Handoff 런타임 후보](handoff-runtime.md)는 미발행 비공개 수신 확인 구현, 지원 경로와 남은 수락 조건을 설명합니다. - [v1 호환성 계약](compatibility-v1.md)은 안정적, 버전형, 마이그레이션형, 내부형, 실험적 표면을 분류합니다. - [에이전트 전송 아키텍처](architecture/agent-transports.md)와 [릴레이 개발 계획](relay-development-plan.md)은 구현 경계를 설명합니다. +- [v1.1.0 후보 노트](releases/v1.1.0.md)는 미발행 준비·선행 병합·부분 지원 경계를 설명합니다. 현재 공개 안정판은 1.0.4입니다. - [v1.0.4 노트](releases/v1.0.4.md)는 2026-10-07 현재 유지보수 릴리스를 설명하고, [v1.0.3 노트](releases/v1.0.3.md)는 이전 보안 릴리스 이력을, [검증 기록](validation/69-rc.md)은 범위가 명시된 증거와 한계를 보존합니다. - 완료된 relay69 프로토타입 소스는 고유 회귀 검사를 제품 릴레이 테스트로 옮긴 뒤 제거했습니다. 폐기된 프로토타입 코드는 Git 이력에 남아 있습니다. diff --git a/docs/ko/releases/v1.1.0.md b/docs/ko/releases/v1.1.0.md new file mode 100644 index 00000000..9875c1fb --- /dev/null +++ b/docs/ko/releases/v1.1.0.md @@ -0,0 +1,32 @@ +# v1.1.0 릴리스 후보 + +## 상태와 선행 조건 + +2026-10-09에 준비한 미발행 후보이며 현재 공개 안정판은 1.0.4입니다. PR #261과 기능 PR #283–#290은 정상 보호 절차에 따라 병합됐습니다. 통합 기능의 기준 커밋은 `3b328799b73b69e3640534ce229ec5ba565ca894`입니다. 이번 준비는 버전·문서 변경이며 발행이 아닙니다. 준비 PR의 정확한 커밋에서 CI가 성공해야 하고 릴리스 생성 전에 승인된 최종 main을 다시 확인해야 합니다. + +## 예정된 변경 + +- #242 / #283: Bash/zsh와 PowerShell 5.1의 선택적 `sp` 셸 별칭은 정식 `session-peer` 명령을 통해 인자, 표준 입력과 종료 코드를 보존합니다. wheel/sdist에는 수동 활성화용 파일이 포함됩니다. PowerShell 기본 별칭을 포함하여 기존 별칭·함수·실행 파일과 충돌하면 거부합니다. 프로필/PATH 수정, 자동 활성화, Python/TypeScript 선택기는 없습니다. 독립형 설치에는 별도로 검토한 파일이 필요합니다. +- #268 / #284: 상속된 `CODEX_SQLITE_HOME`이나 검사한 설정의 최상위 `sqlite_home`이 있으면 검색·큐 제출·wake 전에 차단합니다. 제한된 저장 경로 보호이며 이동된 DB를 지원하거나 Codex의 모든 실효 설정을 증명하지 않습니다. +- #232 / #285: 외부 메시지 본문을 인용하고 발신·회신 경로 주장을 미검증으로 표시합니다. 페어링 수신기의 인증된 신원은 기기 키이지 사람이나 모델이 아닙니다. 본문 구분은 모든 프롬프트 주입을 막는 방어가 아닙니다. 추가된 문구도 용량 제한에 포함되며 `chars`는 구분 처리를 마친 텍스트를 나타냅니다. +- #180 / #286: 선택적 Claude `targetGeneration` 검색과 `--target-generation`은 원래 프로세스·접속 지점을 고정하고 쓰기 전에 연결된 상대를 재확인합니다. 오래된 대상은 실행 전에 거부합니다. Codex, Antigravity와 페어링 기기의 세대 보장은 미지원이며 writer 재시작으로 미지원 상태가 지원 상태로 바뀌지 않습니다. +- #183 / #287: 선택적 `--ssh-identity`는 연결의 호스트 키 증거를 보고하며 `--require-ssh-host-key`는 인증·원격 실행 전에 실제 연결의 키를 고정합니다. POSIX의 일반 Ed25519/RSA/ECDSA 키를 지원하지만 호스트 인증서와 보안 키 유형은 지원하지 않습니다. 호스트 키는 에이전트 신원·세션 세대·ACK를 증명하지 않습니다. +- #238 / #288: 협력적 wake 깊이·발신 식별자 전달과 대상별 호출 제한이 기존 보호를 보완합니다. 환경 변수가 걸러지거나 사라지면 새 발신 식별자로 시작할 수 있으며 공유 MCP의 시작 환경은 호출별 문맥이 아닙니다. 네이티브 wake는 이전에 검증한 Codex 0.154.0 경로로 제한됩니다. +- #211 / #289: `session-peer setup`은 로컬/SSH/Relay 읽기 전용 점검과 명시적으로 승인한 작업을 제공합니다. 기본 점검은 키나 DB를 생성하지 않고 설치 관리자 안내는 자동 설치하지 않습니다. 기존 정책을 확대하지 않으며 원래 등록 요청을 영속적으로 보존하고 준비 점검에서는 메시지를 보내지 않습니다. 전경 수신기 설정은 서비스 설치가 아닙니다. +- #181 / #290: 실험적 선택 기능인 handoff는 송신자의 영속 전송 제한, 시간·용량이 제한된 표준 입력/프로세스 처리와 수신 확인 전용 상태·대기·ACK 작업을 추가합니다. 로컬 POSIX Claude는 검증한 원래 세대의 수신 확인 경로를 지원합니다. 로컬 Codex와 단일 대상 POSIX 소스 스트리밍 SSH는 상관관계 식별자 기반 제출만 지원하며 관찰·ACK는 미지원입니다. 필수 delivered/acknowledged 대기는 미지원 경로에서 실행 전에 거부됩니다. 원격 수신 확인, Windows, 페어링 handoff, 다중 호스트 선택 기능, 본문을 읽지 않는 Codex 관찰과 전체 복원 검증은 별도 조건으로 남습니다. + +## 호환성과 안전 경계 + +코어에는 Python 3.9 이상, MCP에는 3.10 이상, Unix/WSL Relay에는 3.11 이상이 필요합니다. 선택 기능을 끈 일반 결과는 네이티브 선택 필드를 유지합니다. `posted`, `queued`, `submitted`는 소비를 증명하지 않으며 불확실한 결과는 자동 재전송을 허가하지 않습니다. 실험적 대기는 대상별 기본 30초, 정수 1–60초의 총 시간과 정리용 5초를 사용합니다. 상태·수신 확인 작업은 네이티브 메시지를 제출하지 않습니다. 수신 확인 권한은 토큰 보유를 증명할 뿐 모델 신원을 증명하지 않습니다. 수신자의 네이티브 기록에 위임 권한이 남을 수 있습니다. + +본문 구분을 마친 전체 내용에 Codex/페어링 32 KiB, 페어링 애플리케이션 JSON 64 KiB(JSON 이스케이프 포함), worker 256 KiB, 큐 레코드 1 MiB 제한을 적용합니다. 일반 SSH에는 90,000자와 명령 131,071바이트 제한이 유지됩니다. 완전하고 유효한 네이티브 응답은 전송 오류 뒤에도 보존할 수 있지만 불완전하거나 프로토콜 용량을 초과한 출력은 불확실합니다. + +포함된 스킬은 0.3.2이며 최소/전체 런타임 호환성은 0.9.1/1.0.1입니다. 별도의 스킬 PR #30은 미발행 상태입니다. 새 안내에는 해당 PR 병합·발행·정확한 스냅샷 동기화가 선행되어야 하며 이번 후보에 포함되지 않습니다. #180, #181과 #268의 명시적 미지원 검증 조건은 유지되고 이 초안으로 이슈를 종료하지 않습니다. + +## 검증과 공개 조건 + +로컬 통합 후보 검증은 격리된 테스트와 설치를 대상으로 하며 새로운 실제 에이전트/SSH/Relay 검증이 아닙니다. 버전 변경 뒤 정확한 통합 main의 새 CI, 독립 실행 파일 재생성, 네 언어 문서 검사, 격리 wheel/sdist 설치, 수동 활성화 파일 검사와 최신 의존성 감사가 필요합니다. 과거 20/21 ACK 기록과 열린 #161은 그대로이며 1.1.0 검증으로 간주하지 않습니다. 남은 플랫폼·기능 검증 조건을 명시합니다. + +패키지 공개에는 운영 배포가 포함되지 않습니다. 태그, 불변 릴리스 파일, GitHub/PyPI 공개, 사람의 PyPI 환경 검토, 전체 기기 설치와 Control/Relay 배포는 기존 승인이 필요한 별도 단계입니다. 이 문서는 발행·서비스 재시작·새 가용성을 증명하지 않습니다. + +알려진 낮음 등급 Dependabot 경고 GHSA-r374-rxx8-8654는 SSH 테스트 요구사항의 개발 전용 Paramiko 의존성에 관한 것이며 수정 버전이 등록되지 않았습니다. 배포 런타임 의존성이 아니며 런타임 감사 성공이 저장소 전체의 취약점 부재를 의미하지 않습니다. diff --git a/docs/releases/v1.1.0.md b/docs/releases/v1.1.0.md new file mode 100644 index 00000000..89478c82 --- /dev/null +++ b/docs/releases/v1.1.0.md @@ -0,0 +1,32 @@ +# v1.1.0 release candidate + +## Status and prerequisites + +Prepared on 2026-10-09; not published. The current published stable release remains 1.0.4. PR #261 and feature PRs #283–#290 are merged through normal protections. The integrated feature base is `3b328799b73b69e3640534ce229ec5ba565ca894`; this preparation adds version/documentation changes, not publication. Require exact preparation-head CI and recheck the final approved main before creating any release. + +## Planned changes + +- #242 / #283: opt-in `sp` shell aliases for Bash/zsh and PowerShell 5.1 preserve arguments, stdin and exit codes through the canonical `session-peer` command. Passive assets ship in wheel/sdist; existing aliases, functions and executables are refused, including PowerShell's default alias. No profile/PATH edits, automatic activation or Python/TypeScript dispatcher. Standalone installations require separately reviewed assets. +- #268 / #284: fail closed on inherited `CODEX_SQLITE_HOME` or inspected root `sqlite_home` before discovery, queue submission or wake. This is a bounded storage-layout guard, not relocated-database support or proof of every effective Codex configuration. +- #232 / #285: external message bodies are quoted and origin/reply claims marked unverified. Paired receiver identity means the authenticated device key, not a person or model. Framing is not a universal prompt-injection defense; its overhead counts toward limits and `chars` reports the framed text. +- #180 / #286: optional Claude `targetGeneration` discovery and `--target-generation` bind an original process/endpoint and recheck the connected peer before writing. Stale targets refuse before effect. Codex, Antigravity and paired-device generation guarantees remain unsupported; unsupported mode never upgrades on writer restart. +- #183 / #287: optional `--ssh-identity` reports connection host-key evidence; `--require-ssh-host-key` pins that actual connection before authentication or remote execution. POSIX ordinary Ed25519/RSA/ECDSA keys are supported; host certificates and security-key types are not. A host key is not agent identity, session generation or ACK. +- #238 / #288: cooperative wake depth/origin propagation and bounded per-target activation rates supplement existing wake guards. Filtered/lost environment can start a new origin, and shared MCP startup environment is not per-call context. Native wake remains restricted to the previously validated Codex 0.154.0 path. +- #211 / #289: `session-peer setup` offers read-only local/SSH/Relay inventory and explicitly approved actions. Default inspection creates no keys/database; manager guidance never auto-installs. Existing policy is not broadened, original enrollment intent is durable, and readiness probes send no messages. Foreground receiver setup does not install a service. +- #181 / #290: experimental opt-in handoff adds durable sender fencing, bounded stdin/process handling and receipt-only status/wait/ACK operations. Local POSIX Claude supports the validated original-generation receipt path; local Codex and one-destination POSIX source-streamed SSH support correlation-only submission with observation/ACK unsupported. Required delivered/acknowledged waits refuse before effect on unsupported channels. Remote receipts, Windows, paired handoff, multi-host opt-in, body-free Codex observation and full restore acceptance remain separate gates. + +## Compatibility and safety boundaries + +Core requires Python 3.9+, MCP 3.10+, and Unix/WSL Relay 3.11+. Ordinary opt-out results retain their native optional fields; `posted`, `queued` and `submitted` do not prove consumption. Unknown results never authorize automatic resend. Experimental waits use a per-destination 30-second default, integer 1–60-second budget and 5-second cleanup reserve; status and receipt operations submit no native message. Receipt authority proves token possession, not model identity; the recipient's native history may retain delegated authority. + +Final framing counts toward Codex/paired 32 KiB, paired application JSON 64 KiB (including JSON escaping), worker 256 KiB and queued-record 1 MiB bounds. Ordinary SSH retains the 90,000-character and 131,071-byte command guards. A valid complete native response may survive transport failure; incomplete or oversized protocol output remains uncertain. + +The bundled skill stays 0.3.2, with minimum/full runtime compatibility 0.9.1/1.0.1. Companion skill PR #30 is separate and unreleased: merge, release and exact snapshot synchronization are prerequisites for its updated guidance, not part of this candidate. #180, #181 and #268 retain their explicitly unsupported acceptance gates; this draft does not close them. + +## Validation and publication gates + +Local combined candidate validation covered owned fixtures and isolated installations, not new live agent/SSH/Relay acceptance. Require fresh exact integrated-main CI, standalone regeneration, four-locale documentation checks, wheel/sdist isolated installs, passive-asset inspection and current dependency audits after version changes. Historical 20/21 ACK evidence and open #161 are unchanged; they do not validate 1.1.0. Keep remaining platform/capability gaps visible. + +Package publication does not include operational deployment. Tags, immutable assets, GitHub/PyPI publication, human PyPI environment review, fleet installation and Control/Relay deployment are separate steps requiring their existing approvals. No release, service restart or new availability claim is established by this document. + +One known Low-severity Dependabot alert, GHSA-r374-rxx8-8654, concerns the development-only Paramiko dependency in the SSH test requirements and has no listed patched version. It is not a shipped runtime dependency; successful runtime audits are not a claim of zero repository vulnerabilities. diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index 01d5151e..7e1e872b 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -25,5 +25,6 @@ - [Handoff 运行时候选实现](handoff-runtime.md)说明未发布的私有收据、支持路径及剩余验收条件。 - [v1兼容性契约](compatibility-v1.md)对stable、versioned、migrated、internal和experimental surface分类。 - [代理传输架构](architecture/agent-transports.md)和[中继开发计划](relay-development-plan.md)介绍实现边界。 +- [v1.1.0候选说明](releases/v1.1.0.md)介绍未发布准备、依赖顺序与部分支持边界;当前公开稳定版仍为1.0.4。 - [v1.0.4说明](releases/v1.0.4.md)描述2026-10-07的当前维护版本;[v1.0.3说明](releases/v1.0.3.md)保留先前安全版本历史;[验证记录](validation/69-rc.md)保留范围明确的证据及限制。 - relay69原型完成后,其独有回归测试已迁移到产品中继测试套件,原型源代码已删除。废弃的原型代码仍保留在Git历史中。 diff --git a/docs/zh-CN/releases/v1.1.0.md b/docs/zh-CN/releases/v1.1.0.md new file mode 100644 index 00000000..11f91bf3 --- /dev/null +++ b/docs/zh-CN/releases/v1.1.0.md @@ -0,0 +1,32 @@ +# v1.1.0 发布候选 + +## 状态与前提条件 + +这是2026-10-09准备的未发布候选,当前已公开稳定版仍为1.0.4。PR #261与功能PR #283–#290已通过正常保护流程合并。功能集成基准为 `3b328799b73b69e3640534ce229ec5ba565ca894`;此次准备仅增加版本与文档变更,并非发布。准备PR的准确提交须通过CI,创建版本前还须复核已批准的最终main。 + +## 计划变更 + +- #242 / #283:Bash/zsh和PowerShell 5.1的可选 `sp` shell别名通过正式的 `session-peer` 保留参数、标准输入和退出码。wheel/sdist包含手动启用文件;与现有别名、函数或可执行文件冲突时拒绝,包括PowerShell默认别名。不修改配置文件/PATH,不自动启用,不提供Python/TypeScript选择器。独立文件安装需要另行审查的文件。 +- #268 / #284:继承的 `CODEX_SQLITE_HOME` 或已检查配置中的顶层 `sqlite_home` 会在发现、队列提交或wake之前触发安全拒绝。这是有界的存储布局保护,并非迁移数据库支持或对Codex所有有效配置的证明。 +- #232 / #285:外部消息正文以引用形式呈现,来源与回复路径声明标记为未经验证。配对接收端的认证身份指设备密钥,不是人员或模型。正文分隔并非通用提示注入防御;额外文本计入容量限制,`chars` 表示处理后的完整文本。 +- #180 / #286:可选Claude `targetGeneration` 发现与 `--target-generation` 固定原进程/端点,并在写入前复核已连接的对端。过期目标在执行前被拒绝。Codex、Antigravity和配对设备的代际保证仍不支持;writer重启不会将不支持状态提升为支持。 +- #183 / #287:可选 `--ssh-identity` 报告连接主机密钥证据,`--require-ssh-host-key` 在认证或远程执行前固定实际连接的密钥。支持POSIX普通Ed25519/RSA/ECDSA密钥,不支持主机证书与安全密钥类型。主机密钥不代表代理身份、会话代际或ACK。 +- #238 / #288:协作式wake深度/来源传递和有界的目标调用频率限制补充现有保护。环境变量被过滤或丢失后可能建立新来源,共享MCP启动环境不是每次调用的上下文。原生wake仍限于先前验证的Codex 0.154.0路径。 +- #211 / #289:`session-peer setup` 提供本地/SSH/Relay只读检查与明确批准的操作。默认检查不创建密钥或数据库,安装管理器指导不会自动安装。不扩大现有策略,持久保存原注册请求,准备检查不发送消息。前台接收端设置不安装服务。 +- #181 / #290:实验性可选handoff增加发送端持久提交约束、有时间与容量限制的标准输入/进程处理,以及仅用于收据的状态、等待、ACK操作。本地POSIX Claude支持已验证的原代际收据路径;本地Codex与单目标POSIX源码流式SSH仅支持关联标识提交,观察与ACK不支持。必需的delivered/acknowledged等待在不支持路径上于执行前拒绝。远程收据、Windows、配对handoff、多主机可选模式、不读取正文的Codex观察及完整恢复验收仍为独立条件。 + +## 兼容性与安全边界 + +核心需要Python 3.9以上,MCP需要3.10以上,Unix/WSL Relay需要3.11以上。关闭可选功能时,普通结果保留原生可选字段。`posted`、`queued`、`submitted` 不证明消费;未知结果不允许自动重发。实验性等待按目标默认30秒,使用整数1–60秒总预算与5秒清理预留。状态与收据操作不提交原生消息。收据权限证明持有令牌,而非模型身份;接收端原生历史可能保留委托权限。 + +分隔后的完整正文适用Codex/配对32 KiB、配对应用JSON 64 KiB(包含JSON转义)、worker 256 KiB和队列记录1 MiB限制。普通SSH保留90,000字符和命令131,071字节限制。完整有效的原生响应可在传输失败后保留;不完整或超过协议容量的输出仍属不确定。 + +随附技能仍为0.3.2,最低/完整运行时兼容性为0.9.1/1.0.1。独立技能PR #30尚未发布;新说明须先完成合并、发布与准确快照同步,不属于此候选。#180、#181和#268明确不支持的验收条件继续保留,此草案不关闭这些问题。 + +## 验证与发布条件 + +本地集成候选验证覆盖受控测试与隔离安装,不是新的实际代理/SSH/Relay验收。版本变更后必须重新验证准确集成main的CI、独立文件再生成、四语言文档检查、隔离wheel/sdist安装、手动启用文件检查及当前依赖审计。历史20/21 ACK证据与未关闭#161不变,不验证1.1.0。剩余平台与能力条件须保持明确。 + +软件包发布不包括生产部署。标签、不可变资源、GitHub/PyPI发布、人工PyPI环境审核、所有设备安装及Control/Relay部署是须按现有权限批准的独立步骤。本文档不证明已发布、服务已重启或新的可用性。 + +已知Low级别Dependabot警告GHSA-r374-rxx8-8654涉及SSH测试要求中的开发专用Paramiko依赖,尚无列出的修复版本。它不是随包发布的运行时依赖;运行时审计成功不代表整个仓库没有漏洞。 diff --git a/session_peer.py b/session_peer.py index 9d50c3b2..c414d585 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.0.4" +__version__ = "1.1.0" 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 81c0d220..e1ab27f5 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.0.4" +__version__ = "1.1.0" 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 60bf0181..5dd29229 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(44, len(sources), "Update the translation manifest for new canonical docs") + self.assertEqual(45, 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_release_commands.py b/tests/docs/test_release_commands.py index 25198b47..23f4f06a 100644 --- a/tests/docs/test_release_commands.py +++ b/tests/docs/test_release_commands.py @@ -65,17 +65,17 @@ def test_release_preparation_commands_preserve_argument_boundaries(self): self.assertEqual(calls, [ ["git", "fetch", "origin", "main", "--tags"], ["git", "rev-parse", "origin/main"], - ["git", "tag", "v1.0.4", COMMIT], - ["git", "push", "origin", "v1.0.4"], - ["gh", "release", "create", "v1.0.4", "--repo", "abruption/session-peer", - "--target", COMMIT, "--title", "session-peer v1.0.4", - "--notes-file", "docs/releases/v1.0.4.md", "--draft", "--latest"], + ["git", "tag", "v1.1.0", COMMIT], + ["git", "push", "origin", "v1.1.0"], + ["gh", "release", "create", "v1.1.0", "--repo", "abruption/session-peer", + "--target", COMMIT, "--title", "session-peer v1.1.0", + "--notes-file", "docs/releases/v1.1.0.md", "--draft", "--latest"], ["gh", "workflow", "run", "prepare-release.yml", "--repo", "abruption/session-peer", - "--ref", "main", "-f", "tag=v1.0.4"], + "--ref", "main", "-f", "tag=v1.1.0"], ]) publication_calls, _ = self.shell_calls(blocks[1]) self.assertEqual(publication_calls, [ - ["gh", "release", "edit", "v1.0.4", "--repo", "abruption/session-peer", + ["gh", "release", "edit", "v1.1.0", "--repo", "abruption/session-peer", "--draft=false", "--prerelease=false", "--latest"], ]) diff --git a/tests/docs/test_stable_candidate.py b/tests/docs/test_stable_candidate.py index faec8036..bdad1fb4 100644 --- a/tests/docs/test_stable_candidate.py +++ b/tests/docs/test_stable_candidate.py @@ -10,9 +10,28 @@ class StableCandidate(unittest.TestCase): + def test_candidate_is_not_advertised_as_published_or_fully_supported(self): + for suffix in ("", ".ko", ".ja", ".zh-CN"): + text = (ROOT / ("README" + suffix + ".md")).read_text(encoding="utf-8") + self.assertIn("**1.0.4**", text) + self.assertIn("**1.1.0**", text) + self.assertIn('
', text) + for locale in ("", "ko/", "ja/", "zh-CN/"): + text = (ROOT / ("docs/" + locale + "releases/v1.1.0.md")).read_text(encoding="utf-8") + for marker in ("#261", "#283–#290", "#242", "#268", "#232", "#180", "#183", + "#238", "#211", "#181", "#30", "1.0.4", "1.1.0", "0.154.0", + "0.3.2", "0.9.1", "1.0.1", "32 KiB", "64 KiB", "256 KiB", + "1 MiB", "131,071", "90,000", "20/21", "#161"): + with self.subTest(locale=locale, marker=marker): + self.assertIn(marker, text) + english = (ROOT / "docs/releases/v1.1.0.md").read_text(encoding="utf-8") + for marker in ("not published", "correlation-only", "unsupported", "receipt", + "Package publication does not include operational deployment"): + self.assertIn(marker, english) + def test_package_and_generated_core_version_agree(self): - self.assertEqual(session_peer.__version__, "1.0.4") - self.assertIn('__version__ = "1.0.4"', + self.assertEqual(session_peer.__version__, "1.1.0") + self.assertIn('__version__ = "1.1.0"', (ROOT / "session_peer_core/common.py").read_text(encoding="utf-8")) def test_all_current_readmes_and_runbooks_use_stable_version(self):