diff --git a/README.ja.md b/README.ja.md index 74da6cb8..f038bff4 100644 --- a/README.ja.md +++ b/README.ja.md @@ -34,11 +34,11 @@ session-peer 1.0.2による実際のローカル通信です。CodexがClaude Co ### インストール Python 3.9以上が必要です。基本のローカル・SSH CLIに外部Python依存パッケージはありません。 -このREADMEが説明するバージョン:**1.1.1**。 +ソースバージョン:**1.2.0**。2026-10-16の公開状況の確認時点で、最後に確認した公開済み安定版は**1.1.2**でした。 -2026-10-12に準備したメンテナンス版の[リリースノート](docs/ja/releases/v1.1.1.md)を参照してください。このパッチはドキュメントと開発用テストを改善し、ランタイムの動作は変更しません。パッケージ公開と本番環境への配備は別です。 +公開済みメンテナンス版1.1.2は#298を修正します。[過去の準備記録](docs/ja/releases/v1.1.2.md)を参照してください。パッケージ公開と本番環境への配備は別です。 -開発候補1.1.2は未公開です。[リリースノート](docs/ja/releases/v1.1.2.md)は#298のClaude登録情報と対象選択の修正を説明します。公開を個別に確認するまで、上記の公開バージョンは1.1.1です。 +入手できるバージョンは[GitHub Releases](https://github.com/abruption/session-peer/releases)と[PyPI](https://pypi.org/project/session-peer/)で確認してください。[準備記録](docs/ja/releases/v1.2.0.md)は記載日時点の範囲と残る条件を説明します。ソースのバージョンだけではパッケージの公開状況は確認できません。 実験的なhandoffは明示的に選択する機能です。ローカルPOSIX Claudeは受領ACKに対応し、CodexとSSHは相関IDによる送信のみ対応してACKの観察には対応しません。公開済みの範囲と残る検証条件は[handoffガイド](docs/ja/handoff-runtime.md)を参照してください。 diff --git a/README.ko.md b/README.ko.md index e2decd6a..ef120266 100644 --- a/README.ko.md +++ b/README.ko.md @@ -34,11 +34,11 @@ session-peer 1.0.2를 사용해 실제 로컬 요청과 회신을 주고받았 ### 설치 Python 3.9 이상이 필요합니다. 기본 로컬·SSH CLI는 외부 Python 패키지에 의존하지 않습니다. -이 README가 설명하는 버전: **1.1.1**. +소스 버전: **1.2.0**. 2026-10-16 공개 상태 확인 시점의 마지막 확인 공개 안정판은 **1.1.2**였습니다. -2026-10-12에 준비한 유지보수 버전의 [릴리스 노트](docs/ko/releases/v1.1.1.md)를 참고하십시오. 이번 패치는 문서와 개발용 테스트를 보완하며 런타임 동작은 바꾸지 않습니다. 패키지 공개와 운영 배포는 별개입니다. +공개된 유지보수 버전 1.1.2는 #298을 수정합니다. [과거 준비 기록](docs/ko/releases/v1.1.2.md)을 참고하십시오. 패키지 공개와 운영 배포는 별개입니다. -개발 후보 1.1.2는 아직 공개되지 않았습니다. [릴리스 노트](docs/ko/releases/v1.1.2.md)는 #298의 Claude 등록 기록 및 대상 선택 수정을 설명합니다. 공개 여부를 별도로 확인하기 전까지 위 공개 버전은 1.1.1입니다. +설치할 수 있는 버전은 [GitHub Releases](https://github.com/abruption/session-peer/releases)와 [PyPI](https://pypi.org/project/session-peer/)에서 확인하십시오. [준비 기록](docs/ko/releases/v1.2.0.md)은 해당 날짜의 범위와 남은 조건을 설명하며, 소스 버전만으로 패키지 공개 여부가 확인되는 것은 아닙니다. 실험적 handoff는 명시적으로 선택해야 합니다. 로컬 POSIX Claude는 영수증 ACK를 지원하지만, Codex와 SSH는 상관 ID를 이용한 제출만 지원하며 ACK 관찰은 지원하지 않습니다. 공개된 범위와 남은 검증 조건은 [handoff 가이드](docs/ko/handoff-runtime.md)를 참고하십시오. diff --git a/README.md b/README.md index 94aed0f6..cc78339e 100644 --- a/README.md +++ b/README.md @@ -34,11 +34,11 @@ 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. -Version covered by this README: **1.1.1**. +Source version: **1.2.0**. At the 2026-10-16 publication checkpoint, the last verified published stable release was **1.1.2**. -Maintenance release prepared on 2026-10-12; see the [release notes](docs/releases/v1.1.1.md). This patch updates documentation and development-only tests, not runtime behavior. Package publication and operational deployment are separate. +Published maintenance version 1.1.2 addresses #298; see the [historical preparation notes](docs/releases/v1.1.2.md). Package publication and operational deployment are separate. -Development candidate 1.1.2 is unpublished; its [release notes](docs/releases/v1.1.2.md) describe the #298 Claude registry and target-resolution fix. The published version above remains 1.1.1 until publication is independently verified. +Check [GitHub Releases](https://github.com/abruption/session-peer/releases) and [PyPI](https://pypi.org/project/session-peer/) for available versions. The [preparation notes](docs/releases/v1.2.0.md) record the dated scope and remaining gates; a source version alone does not establish package availability. Experimental handoff is opt-in: local POSIX Claude supports receipt ACKs; Codex and SSH support correlation-only submission, not ACK observation. See the [handoff guide](docs/handoff-runtime.md) for the shipped scope and remaining acceptance gates. diff --git a/README.zh-CN.md b/README.zh-CN.md index 8c53b8d0..4c2365eb 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -34,11 +34,11 @@ session-peer使用各智能体自身的收件箱和队列;接收方智能体 ### 安装 需要Python 3.9或更高版本。核心本地与SSH CLI没有第三方Python依赖。 -本README说明的版本:**1.1.1**。 +源码版本:**1.2.0**。在2026-10-16的发布状态检查时,最后确认的已发布稳定版本为**1.1.2**。 -请参阅2026-10-12准备的维护版本的[发布说明](docs/zh-CN/releases/v1.1.1.md)。此补丁改进文档和开发用测试,不改变运行时行为。软件包发布与生产环境部署是两项独立操作。 +已发布的维护版本1.1.2修复#298;请参阅[历史准备记录](docs/zh-CN/releases/v1.1.2.md)。软件包发布与生产环境部署是两项独立操作。 -开发候选版本1.1.2尚未发布。[发布说明](docs/zh-CN/releases/v1.1.2.md)介绍#298的Claude登记记录和目标选择修复。在单独确认发布之前,上述已发布版本仍为1.1.1。 +可用版本请查看[GitHub Releases](https://github.com/abruption/session-peer/releases)和[PyPI](https://pypi.org/project/session-peer/)。[准备记录](docs/zh-CN/releases/v1.2.0.md)说明记录日期时的范围与剩余门禁;仅凭源码版本不能确认软件包是否已发布。 实验性handoff需要明确选择启用:本地POSIX Claude支持收据ACK;Codex与SSH仅支持关联标识提交,不支持ACK观察。已发布范围与剩余验收条件请参阅[handoff指南](docs/zh-CN/handoff-runtime.md)。 diff --git a/RELEASING.ja.md b/RELEASING.ja.md index 3d217f31..c8c2d1ea 100644 --- a/RELEASING.ja.md +++ b/RELEASING.ja.md @@ -4,13 +4,12 @@ 以下のソース・設定の確認から公開検証・復旧までは、2026-10-09のリリース手順の過去の記録であり、再実行の依頼ではありません。v1.1.0を再作成、移動、再利用せず、公開例を再実行しないでください。将来の版では、新しくレビューしたバージョン、最新の証拠、明示的な承認で各条件を再確認します。準備、不変のGitHub公開、必須の人手によるPyPI環境レビュー、本番環境への配備は別です。保護されたmainでは、レビュー済みで最新のPRと、Pythonのプラットフォーム別テストマトリクス、ドキュメント、シェル、パッケージ/単独ファイル/MCP/Relay/Control、統合テスト、Python/Nodeの依存関係監査を含む統合リリースゲートへの合格が必要です。 -## v1.1.2パッチ候補 — 未公開 +## 公開済みv1.1.2 — 過去の準備記録 -公開済み1.1.1を基に2026-10-13に準備しました。候補は#298を修正し、不正なClaude PID記録が正常なセッションの検出を妨げないようにし、非十進Unicodeのセッション名を名前として解決します。準備はマージ、タグ作成、公開、配備の承認ではありません。正確な最新コミットのCI、全ローカルテスト、単独ファイルの再生成、隔離したwheel/sdistのインストール、最新の依存関係監査が必要です。v1.1.2とPyPI 1.1.2が未使用であることを再確認し、タグやバージョンを移動・再利用しないでください。現在のTrusted Publisherと必須の人手によるpypiレビューを確認します。別途のマージ・公開承認、正確なmain CIの成功、不変ドラフト資産7個のレビューを完了した後にのみ下記コマンドを使います。GitHubとPyPIの公開、人手による環境承認、Control/Relayや各端末の配備は別です。 - -次のコマンドはv1.1.2用です。以下のv1.1.0手順は過去の記録として残します。 +GitHubはf3993bf8988dd301b7e14402e63e8ac04e5e2300のv1.1.2を2026-10-13 06:39:11 UTCに公開しました。以前の未公開候補という説明は過去の記録です。v1.1.2を再作成、移動、再利用しないでください。下記のv1.1.0コマンドも過去の例です。 ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. git fetch origin main --tags release_tag=v1.1.2 release_commit=$(git rev-parse origin/main) @@ -26,10 +25,28 @@ gh workflow run prepare-release.yml --repo abruption/session-peer \ 実行要求の後で停止してください。`gh workflow run`は準備の完了前に戻ります。正確なリリースコミットに対応するv1.1.2の実行を特定し、`gh run watch --repo abruption/session-peer --exit-status`で完了を待ちます。`attach-draft`を含む実行が成功するまで、下の公開コマンドを実行しないでください。リリースを下書きのまま保ち、添付資産が正確に7個あること、SHA256SUMS、release-provenance.jsonと認証済み証明がタグ・コミットに一致することを確認します。失敗、欠落または未検証の証拠があれば、公開せず停止します。この独立した検証の完了後にのみ、下のコマンドを実行してください。 ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. gh release edit v1.1.2 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` +## v1.2.0候補 — 未公開 + +公開版1.1.2を基に2026-10-15に準備しました。マイルストーン目標は2026-10-18で、公開の約束ではありません。PR #305、#311、#310、#308、#313、#314をこの順にマージし、正確なマージコミットを[候補ノート](docs/ja/releases/v1.2.0.md)に記録しました。このバージョン・文書のみの準備にはmainの対象変更が含まれます。Issue #180、#181、#268、#304、#306、#307は未完了のままです。 + +統合ソースの基準`21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`を反映し、2026-10-16に更新しました。PR #315は最終コミットのローカル検証・CI・レビューのためオープンのままです。この基準は最終リリース準備・公開コミットではなく、v1.2.0は未公開です。 + +#311のmacOS検出はメタデータのみの方針を維持します。単独listはCodexの実行やバージョン照会を行わず、通常値と強制値の両方を保守的に検査します。通常値を無視する新しいnative環境も拒否する場合があります。send/dry-runは制限されたnativeバージョン証拠を使い、正確にレビューした0.162.1のみ強制値専用検査を選択します。旧版・確認不能・未レビュー版では通常値も検査します。物理child cwdと消費側の別名経路検査は既知の設定の曖昧さを減らすだけで、起動時の保存先や原子的な識別の不確実性は解消しません。 + +send/dry-runのバージョン照会は3秒でタイムアウトし、別途最大2秒の後処理時間を認めます。メタデータのみのlistにはこの照会を含みません。 + +原因不明のRelay exit139と別のローカルtransport生成・終了診断は#316で監視します。再実行成功は原因・関連性・修正の証拠ではありません。テスト・監査・保護規則を迂回しません。 + +PR #315のマージ・公開前に最終コミットをレビューし、単独CLI再生成と文書ハッシュを検査して全テスト、パッケージのインストール、最新の依存関係監査を再実行します。別途承認された準備PRのマージ後、正確なmainコミットのCI成功が必要です。v1.2.0/PyPI 1.2.0の未使用と不変リリース・タグ規則を再確認します。所有者が現在の非公開Trusted Publisher設定の再確認を省略したため、検証済みとは記録しません。PR #315のマージ、タグ・ドラフト作成、ワークフロー実行、公開には引き続き明示的承認が必要で、必須の人手によるpypi環境レビューは省略しません。承認後の準備実行依頼では、attach-draft成功とSHA256SUMSとrelease-provenance.jsonを含む7資産とその証明が正確なコミットと一致するまで停止します。この準備には実行用リリースコマンドを示しません。本番配備は別です。 + +リリース準備PRは対象6件のPRをすべてマージした後、最後にマージします。統合mainを反映した準備PRの最終コミットを更新・レビューし、過去の承認をv1.2.0の承認とみなしません。準備ブランチのCIとローカル統合成果物は予行検証の証拠であり、公開用リリース資産ではありません。最終リリースビルド前に、4言語READMEの状態案内を公開の前後によらず正確な表現で固定します。保護された最終mainのCI成功後、承認済み準備ワークフローでその正確なmainコミットから資産を再ビルド・検証し、公開前にSHA256SUMSとrelease-provenance.jsonを含む不変資産7個とその証明をすべて確認します。公開時は実際の公開証拠に基づく別の文書記録を追加します。固定済みメタデータを変えるために不変資産を再ビルド・置換せず、公開完了を先に宣言しません。 + + ## 過去の証拠と現在の境界 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は未解決のままで、外部で発生した停滞の根本原因も未確認です。 diff --git a/RELEASING.ko.md b/RELEASING.ko.md index 206e80df..e22ed125 100644 --- a/RELEASING.ko.md +++ b/RELEASING.ko.md @@ -4,13 +4,12 @@ 아래 소스·설정 검사부터 공개 검증·복구까지는 2026-10-09 릴리스 절차의 역사 기록이며 재실행 요청이 아닙니다. v1.1.0을 다시 생성하거나 이동·재사용하지 말고 공개 예제를 다시 실행하지 마십시오. 후속 버전에서는 새로 검토한 버전, 새로운 검증 자료와 명시적 승인으로 각 조건을 다시 확인합니다. 준비, 불변 GitHub 공개, 사람이 수행하는 필수 PyPI 환경 검토와 운영 배포는 별개입니다. 보호된 main에 반영하려면 검토를 마치고 최신 main을 반영한 PR과, Python 플랫폼 매트릭스·문서·셸·패키지/독립 실행 파일/MCP/Relay/Control 테스트·통합 테스트·Python/Node 의존성 감사를 포함한 릴리스 게이트가 필요합니다. -## v1.1.2 패치 후보 — 미공개 +## 공개된 v1.1.2 — 과거 준비 기록 -공개된 1.1.1을 기준으로 2026-10-13에 준비했습니다. 후보는 #298을 수정합니다. 잘못된 Claude PID 기록이 정상 세션 검색을 방해하지 않도록 하고, 비십진 유니코드 세션 이름을 이름으로 선택합니다. 준비 작업은 병합·태그 생성·공개·운영 배포 승인이 아닙니다. 정확한 최신 커밋의 CI, 전체 로컬 테스트, 독립 실행 파일 재생성, 격리된 wheel/sdist 설치와 최신 의존성 감사를 수행합니다. v1.1.2와 PyPI 1.1.2가 사용되지 않았는지 재확인하고 태그·버전을 이동하거나 재사용하지 않습니다. 현재 Trusted Publisher와 필수 사람 pypi 검토를 확인합니다. 별도의 병합·공개 승인, 정확한 main CI 성공 및 불변 초안 자산 7개 검토를 완료한 후에만 아래 명령을 사용합니다. GitHub·PyPI 공개, 사람의 환경 승인과 Control/Relay 또는 장비 배포는 별개입니다. - -다음 명령은 v1.1.2용입니다. 아래 v1.1.0 절차는 과거 기록으로 유지합니다. +GitHub는 f3993bf8988dd301b7e14402e63e8ac04e5e2300의 v1.1.2를 2026-10-13 06:39:11 UTC에 공개했습니다. 이전의 미공개 후보 설명은 과거 기록입니다. v1.1.2를 다시 생성하거나 이동·재사용하지 마십시오. 아래 v1.1.0 명령도 과거 예제입니다. ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. git fetch origin main --tags release_tag=v1.1.2 release_commit=$(git rev-parse origin/main) @@ -26,10 +25,28 @@ gh workflow run prepare-release.yml --repo abruption/session-peer \ 실행 요청 후 중단: `gh workflow run`은 준비가 끝나기 전에 반환합니다. 정확한 릴리스 커밋의 v1.1.2 실행을 확인하고 `gh run watch --repo abruption/session-peer --exit-status`로 완료를 기다립니다. `attach-draft`를 포함한 해당 실행이 성공하기 전에는 아래 게시 명령을 실행하지 않습니다. 릴리스를 초안으로 유지한 채 첨부 자산이 정확히 7개인지 확인하고, SHA256SUMS, release-provenance.json 및 인증된 증명을 태그·커밋과 대조합니다. 실패, 누락 또는 미검증 자료가 있으면 게시하지 않고 중단합니다. 이 별도 검증을 완료한 후에만 아래 명령을 실행합니다. ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. gh release edit v1.1.2 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` +## v1.2.0 후보 — 미공개 + +공개 버전 1.1.2를 기준으로 2026-10-15에 준비했습니다. 마일스톤 목표는 2026-10-18이며 공개 약속이 아닙니다. PR #305, #311, #310, #308, #313, #314를 이 순서로 병합했으며 정확한 병합 커밋은 [후보 노트](docs/ko/releases/v1.2.0.md)에 기록했습니다. 이 버전·문서 전용 준비는 main의 해당 변경을 포함합니다. 이슈 #180, #181, #268, #304, #306, #307은 열린 상태로 유지합니다. + +통합 소스 기준 `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`를 반영해 2026-10-16에 갱신했습니다. PR #315는 최종 커밋의 로컬 검증·CI·검토를 위해 열린 상태로 유지합니다. 이 소스 기준은 최종 릴리스 준비·공개 커밋이 아니며 v1.2.0은 미공개입니다. + +#311의 macOS 검색은 메타데이터 전용 정책을 유지합니다. 독립 list는 Codex를 실행하거나 버전을 조회하지 않고 일반·강제 환경설정을 보수적으로 검사합니다. 따라서 일반 값을 무시하는 최신 native 환경도 거부할 수 있습니다. send/dry-run은 제한된 native 버전 증거를 사용하며 검토한 정확한 0.162.1만 강제 값 전용 검사를 선택합니다. 이전·확인 불가·미검토 버전은 일반 값도 검사합니다. 물리 child cwd와 소비자 경로 별칭 검사는 알려진 설정 모호성을 줄일 뿐 기동 시 저장소나 원자적 신원 불확실성을 해소하지 않습니다. + +send/dry-run 버전 조회의 시간 제한은 3초이며 별도로 최대 2초의 정리 시간을 허용합니다. 메타데이터 전용 list에는 이 조회가 포함되지 않습니다. + +원인 미확정 Relay exit139와 별도의 로컬 transport 생성·종료 진단은 #316에서 모니터링합니다. 재실행 성공은 원인·상호관계·수정의 증거가 아닙니다. 테스트·감사·보호 규칙을 우회하지 않습니다. + +PR #315 병합·공개 전에 최종 커밋을 검토하고 독립 실행 CLI 재생성과 문서 해시를 검사하며 전체 테스트, 패키지 설치와 최신 의존성 감사를 수행합니다. 별도 승인에 따른 준비 PR 병합 후 정확한 main 커밋의 CI 성공이 필수입니다. v1.2.0/PyPI 1.2.0 미사용과 불변 릴리스·태그 규칙을 재확인합니다. 소유자가 현재 비공개 Trusted Publisher 연결 재확인을 생략했으므로 검증 완료로 기록하지 않습니다. PR #315 병합, 태그·초안 생성, 워크플로 실행 요청과 공개에는 여전히 명시적 승인이 필요하며 필수 사람 pypi 환경 검토도 생략하지 않습니다. 승인된 준비를 실행 요청한 뒤에는 attach-draft 성공과 SHA256SUMS와 release-provenance.json을 포함한 자산 7개와 해당 증명의 정확한 커밋 일치를 확인할 때까지 중단합니다. 이 준비에는 실행할 릴리스 명령을 제공하지 않습니다. 운영 배포는 별개입니다. + +릴리스 준비 PR은 범위 내 PR 6개를 모두 병합한 뒤 마지막으로 병합합니다. 병합된 main을 반영한 최종 준비 커밋을 갱신·검토하며 과거 승인은 v1.2.0 승인이 아닙니다. 준비 브랜치 CI와 로컬 통합 산출물은 예행 검증 자료이며 게시할 릴리스 자산이 아닙니다. 최종 릴리스 빌드 전에 README 4개 언어의 상태 안내를 공개 여부와 무관하게 정확한 문구로 고정합니다. 보호된 최종 main의 CI 성공 후 승인된 준비 워크플로로 정확한 main 커밋에서 자산을 다시 빌드·검증하고, 공개 전에 SHA256SUMS와 release-provenance.json을 포함한 불변 자산 7개와 해당 증명을 모두 검토합니다. 공개 시 실제 공개 증거에 따른 별도 문서 기록을 추가합니다. 고정된 메타데이터를 바꾸려고 불변 자산을 다시 빌드하거나 교체하지 않으며 미리 공개 완료를 선언하지 않습니다. + + ## 과거 증거와 현재 경계 다섯 호스트에서 진행한 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은 계속 열려 있으며 외부 경로 정체의 근본 원인은 확인되지 않았습니다. diff --git a/RELEASING.md b/RELEASING.md index a1a8c14d..264c5087 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -4,13 +4,12 @@ Version 1.1.0 is published. GitHub published v1.1.0 on 2026-10-09 at 06:46:41 UT The sections from source/configuration gates through publication recovery below preserve the historical 2026-10-09 release procedure, not a request to run it again. Do not recreate, move or reuse v1.1.0 or rerun its publication examples. For a future version, use a new reviewed version and repeat the gates with fresh evidence and explicit authorization. Preparation, immutable GitHub publication, required human PyPI environment review and operational deployment remain separate. 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. -## v1.1.2 patch candidate — unpublished +## Published v1.1.2 — historical preparation -Prepared on 2026-10-13 against published 1.1.1. The candidate addresses #298: invalid Claude PID records must not disrupt healthy discovery, and nondecimal Unicode session names must resolve as names. This is preparation only, not approval to merge, create a tag, publish or deploy. Require exact-head CI, full local tests, standalone regeneration, isolated wheel/sdist installations and current dependency audits. Recheck that v1.1.2 and PyPI 1.1.2 are unused; never move or reuse a tag/version. Verify the current Trusted Publisher and required human pypi review. Only after separate merge and publication authorization, green exact-main CI and review of all seven immutable draft assets may the commands below be used. GitHub and PyPI publication, the human environment gate and Control/Relay or fleet deployment remain separate. - -The following commands are for v1.1.2. The v1.1.0 procedure below remains historical. +GitHub published v1.1.2 on 2026-10-13 at 06:39:11 UTC from f3993bf8988dd301b7e14402e63e8ac04e5e2300. The earlier unpublished-candidate wording is historical. Never recreate, move or reuse v1.1.2; the v1.1.0 commands below are historical examples only. ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. git fetch origin main --tags release_tag=v1.1.2 release_commit=$(git rev-parse origin/main) @@ -26,10 +25,28 @@ gh workflow run prepare-release.yml --repo abruption/session-peer \ STOP after dispatch: `gh workflow run` returns before preparation finishes. Identify the run for v1.1.2 at the exact release commit and wait with `gh run watch --repo abruption/session-peer --exit-status`. Do not execute the publication block unless that run succeeds, including `attach-draft`. Keep the release a draft while reviewing exactly seven attached assets, SHA256SUMS, release-provenance.json and their authenticated attestations against the tag and commit. Failure, missing assets or unverified evidence means stop without publishing. Only after this separate verification may the following publication command be executed. ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. gh release edit v1.1.2 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` +## v1.2.0 candidate — unpublished + +Prepared on 2026-10-15 against published 1.1.2. The milestone target is 2026-10-18, not a publication promise. PR #305, #311, #310, #308, #313 and #314 are now merged in that order; their exact merge commits are recorded in the [candidate notes](docs/releases/v1.2.0.md). This version/docs-only preparation incorporates those changes from main. Issues #180, #181, #268, #304, #306 and #307 remain open. + +Updated on 2026-10-16 against integrated source base `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`. PR #315 remains open for final-head local validation, CI and review. This source base is not the final release-preparation or publication commit, and v1.2.0 remains unpublished. + +The #311 macOS discovery policy remains metadata-only: standalone list never executes Codex or queries its version, and conservatively checks ordinary as well as forced preferences. This may refuse newer environments whose native loader ignores ordinary values. Send/dry-run uses bounded native-version evidence: only the exact reviewed 0.162.1 selects forced-only checks; older, unavailable or unreviewed evidence includes ordinary values. Physical child cwd and consumer alias checks reduce known configuration ambiguity, not startup-storage or atomic identity uncertainty. + +The send/dry-run version probe has a 3-second timeout and a separate cleanup allowance of up to 2 seconds; it is not part of metadata-only list. + +The unexplained Relay exit139 and separate local transport-creation and shutdown diagnostics remain monitored in #316. Passing reruns do not establish a cause, relationship or fix. No test, audit or protection is bypassed. + +Before merging PR #315 or publication, review its final head, check standalone regeneration and document hashes, and rerun complete tests, package installations and current dependency audits. Require green CI on the exact main commit after the separately authorized preparation-PR merge. Recheck unused v1.2.0/PyPI 1.2.0 and immutable-release/tag rules. The owner omitted the current private Trusted Publisher binding recheck; it is not recorded as verified. Explicit authorization is still required for merging PR #315, tag creation, draft creation, workflow dispatch and publication; the required human pypi environment review is not waived. After authorized preparation, stop after dispatch until attach-draft succeeds and all seven assets (including SHA256SUMS and release-provenance.json) and their attestations match the exact commit. No release commands are supplied for execution by this preparation. Operational deployment remains separate. + +Merge the release-preparation PR last, after all six scoped PRs. Update and review its final head against merged main; historical approvals do not authorize v1.2.0. Prep-only CI and local integration artifacts are rehearsal evidence, not publishable release assets. Before the final release build, freeze all four README status notices in publication-neutral wording. After final protected-main CI succeeds, rebuild and verify release assets through the authorized preparation workflow at that exact main commit, then review all seven immutable assets (including SHA256SUMS and release-provenance.json) and their attestations before publication. At publication time, add a separate documentation record from actual publication evidence; never rebuild or replace immutable assets to change their frozen metadata, and do not announce publication in advance. + + ## 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 or v1.1.0. #161 remains open with the external stall root cause unconfirmed. diff --git a/RELEASING.zh-CN.md b/RELEASING.zh-CN.md index 3bfe8b55..4cdfdd1a 100644 --- a/RELEASING.zh-CN.md +++ b/RELEASING.zh-CN.md @@ -4,13 +4,12 @@ 以下从源码/配置门禁到发布验证/恢复的部分保留2026-10-09发布流程的历史记录,并非重新执行的请求。不要重新创建、移动或重用v1.1.0,也不要再次执行其发布示例。后续版本需采用新审核的版本、最新证据和明确授权,重新检查各项门禁。准备、不可变GitHub发布、必需的人工PyPI环境审核与生产环境部署相互独立。受保护的main要求PR经过审核并与main保持最新,同时通过汇总发布门禁;门禁涵盖Python平台测试矩阵、文档、shell、包/单文件/MCP/Relay/Control、集成测试以及Python/Node依赖审计。 -## v1.1.2补丁候选版本 — 尚未发布 +## 已发布v1.1.2 — 历史准备记录 -于2026-10-13基于已发布的1.1.1准备。候选版本修复#298:无效的Claude PID记录不应妨碍正常会话发现,非十进制Unicode会话名称应按名称匹配。准备不代表批准合并、创建标签、发布或部署。必须完成准确最新提交的CI、完整本地测试、独立文件再生成、隔离的wheel/sdist安装和最新依赖审计。重新确认v1.1.2及PyPI 1.1.2未被使用,不得移动或重用标签与版本。确认当前Trusted Publisher和必要的人工pypi审核。只有另行获得合并和发布批准、准确main CI通过且审查全部7项不可变草稿资产后,才能使用下列命令。GitHub与PyPI发布、人工环境审批以及Control/Relay或各设备部署是独立步骤。 - -以下命令用于v1.1.2。下方v1.1.0流程仍保留为历史记录。 +GitHub于2026-10-13 06:39:11 UTC发布了提交f3993bf8988dd301b7e14402e63e8ac04e5e2300的v1.1.2。此前的未发布候选描述属于历史记录。不得重新创建、移动或重用v1.1.2;下方v1.1.0命令也仅为历史示例。 ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. git fetch origin main --tags release_tag=v1.1.2 release_commit=$(git rev-parse origin/main) @@ -26,10 +25,28 @@ gh workflow run prepare-release.yml --repo abruption/session-peer \ 提交执行请求后先停止:`gh workflow run`会在准备完成前返回。确认对应准确发布提交的v1.1.2运行,并使用`gh run watch --repo abruption/session-peer --exit-status`等待完成。在包括`attach-draft`的运行成功前,不要执行下方发布命令。保持发布为草稿,检查附件恰好为7个,并对照标签和提交验证SHA256SUMS、release-provenance.json及其经过认证的证明。运行失败、资产缺失或证据未验证时,应停止且不发布。只有完成这项独立验证后,才能执行下方命令。 ```bash +# Historical v1.1.2 example: do not rerun or reuse this version. gh release edit v1.1.2 --repo abruption/session-peer \ --draft=false --prerelease=false --latest ``` +## v1.2.0候选版本 — 尚未发布 + +于2026-10-15基于已发布的1.1.2准备。里程碑目标为2026-10-18,并非发布承诺。PR #305、#311、#310、#308、#313、#314已按此顺序合并,准确合并提交记录于[候选说明](docs/zh-CN/releases/v1.2.0.md)。本次仅版本和文档的准备包含main中这些变更。议题#180、#181、#268、#304、#306、#307仍保持开放。 + +于2026-10-16更新,集成源代码基准为`21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`。PR #315仍保持开放,等待最终提交的本地验证、CI和审核。此基准不是最终发布准备或发布提交,v1.2.0仍未发布。 + +#311的macOS发现策略仍仅检查元数据:独立list不执行Codex或查询版本,而是保守检查普通及强制偏好设置,因此也可能拒绝native加载器会忽略普通值的新环境。send/dry-run使用有界native版本证据,仅准确审核的0.162.1选择仅强制值检查;旧版、无法确认或未审核版本也检查普通值。物理child cwd和消费端路径别名检查只能减少已知配置歧义,不能消除启动存储或原子身份的不确定性。 + +send/dry-run版本查询的超时为3秒,另允许最多2秒的清理时间;仅检查元数据的list不执行此查询。 + +原因不明的Relay exit139与单独的本地transport创建及关闭诊断仍在#316监测。重跑成功不能证明原因、关联或已修复。不得绕过测试、审计或保护规则。 + +合并PR #315或发布前须审核最终提交,检查独立CLI再生成及文档哈希,并重跑完整测试、软件包安装和最新依赖审计。经另行批准合并准备PR后,必须通过准确main提交的CI。重新检查v1.2.0/PyPI 1.2.0未使用及不可变发布/标签规则。所有者已省略当前私有Trusted Publisher绑定复核,不将其记录为已验证。合并PR #315、创建标签和草稿、派发工作流、发布仍需明确授权;必需的人工pypi环境审核不可省略。获批准备并派发后,必须等待attach-draft成功,核对包括SHA256SUMS和release-provenance.json在内的全部7项资产及其证明与准确提交一致。本准备不提供可执行的发布命令。生产部署是独立步骤。 + +发布准备PR必须在范围内全部6项PR合并后最后合并。更新准备PR以反映已合并main,并审核最终提交;历史批准不授权v1.2.0。准备分支CI和本地集成产物仅为演练证据,不是可发布的版本资产。最终发布构建前,须将四种语言README的状态提示固定为发布前后均准确的表述。受保护最终main的CI成功后,通过获批的准备工作流从该准确main提交重新构建并验证资产,发布前审核包括SHA256SUMS和release-provenance.json在内的全部7项不可变资产及其证明。发布时应依据实际发布证据添加独立文档记录;不得为了修改已固定的元数据而重新构建或替换不可变资产,也不得提前宣称已发布。 + + ## 历史证据与当前边界 在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仍未解决,外部停滞的根本原因也尚未确认。 diff --git a/docs/README.md b/docs/README.md index 91f33d28..a20eb6c0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,7 +24,9 @@ installation paths. ## Development and history -- [v1.1.2 candidate notes](releases/v1.1.2.md) describe the unpublished #298 Claude PID-record and nondecimal Unicode-name fix prepared on 2026-10-13; CI and publication gates remain separate. +- [v1.2.0 candidate notes](releases/v1.2.0.md) record the unpublished preparation started on 2026-10-15 and updated on 2026-10-16, the merged six-PR scope and remaining acceptance gates. + +- [v1.1.2 historical preparation notes](releases/v1.1.2.md) describe #298 and the 2026-10-13 preparation; v1.1.2 was subsequently published. Do not reuse its version or commands. - [v1.1.1 maintenance notes](releases/v1.1.1.md) cover the documentation/test maintenance target prepared on 2026-10-12; runtime behavior is unchanged from 1.1.0. Verify package publication separately. diff --git a/docs/i18n-manifest.json b/docs/i18n-manifest.json index f844b79b..6d78726c 100644 --- a/docs/i18n-manifest.json +++ b/docs/i18n-manifest.json @@ -7,10 +7,10 @@ "zh-CN" ], "sources": { - "README.md": "c8c0188cc763a96567aa1198fe17c3bd5a284fe6fae913ddca18d2e0fa643792", - "RELEASING.md": "36e8f1b9afd057b56767bfb6fb5c18e8acca3e7c16d39b0b8f8d05dc22522e3e", + "README.md": "38d513c6938fafb790d378c0981836adf1e77d0cee969e99a370930b4ed04299", + "RELEASING.md": "952730a3eb6dfcb1a456b50d6e4918221a07d8fe90b744fc7705c809ea4918d3", "SECURITY.md": "8f018f6f98002312e143609b9734aeb971ca5217e146597c06b57b5645031046", - "docs/README.md": "67353922611866276190c06ba0a4dcf35725057d61c5ceaf3369db175f82fa96", + "docs/README.md": "e843d78ac9258645e2b4b9251328880b8a645514a66ca3b2a5f1fff99ba37dbc", "docs/agent-adapters.md": "bf185d3121c94829bb412071a25c4d943302e10a6b2e713111e653b8f8c3ea91", "docs/ai-assistant-guide.md": "9624ec96b92fb688fae3be3c94cb3564c77985091be451fbf1f056a1af9b9d9c", "docs/antigravity.md": "f2b5122a0ce6e6fb5bd4d8ed50ce2c8bd2dc9c98ec8ce328405cf7c2cd24229d", @@ -50,6 +50,7 @@ "docs/releases/v1.1.0.md": "66e66c4ca2d18b4da03c169885443ce26af49885fae474e95476b9078e50252f", "docs/releases/v1.1.1.md": "e7d5b6060098be0d4db06a7c2845955ea46084cdecd3fe8e5dc6c44324c09cc0", "docs/releases/v1.1.2.md": "3ffe3d6daa8e403e9f3c5e83ec81c3afa9f10750627b31362990ec5b92326f3a", + "docs/releases/v1.2.0.md": "e91d7b6ec7468a3b1e7186bdbfb4802a898485a1f1fb2e198f831ea0863b2163", "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 be6ab8a5..eb8d8c3f 100644 --- a/docs/ja/README.md +++ b/docs/ja/README.md @@ -23,7 +23,9 @@ ## 開発と履歴 -- [v1.1.2候補ノート](releases/v1.1.2.md)は2026-10-13に準備した未公開の#298 Claude PID記録と非十進Unicode名の修正を説明します。CIと公開の承認手順は別です。 +- [v1.2.0候補ノート](releases/v1.2.0.md)は2026-10-15に開始し2026-10-16に更新した未公開準備、マージ済み6件のPRの範囲と残る受け入れ条件を記録します。 + +- [v1.1.2の過去の準備記録](releases/v1.1.2.md)は#298と2026-10-13の準備を説明します。その後v1.1.2は公開済みです。バージョンやコマンドを再利用しないでください。 - [v1.1.1メンテナンスノート](releases/v1.1.1.md)は2026-10-12に準備したドキュメント・テストのメンテナンス版を説明し、ランタイムの動作は1.1.0と同じです。パッケージ公開は別途確認してください。 diff --git a/docs/ja/releases/v1.2.0.md b/docs/ja/releases/v1.2.0.md new file mode 100644 index 00000000..0d76bbd2 --- /dev/null +++ b/docs/ja/releases/v1.2.0.md @@ -0,0 +1,41 @@ +# v1.2.0リリース候補 + +## 範囲 + +公開版1.1.2を基に2026-10-15に準備しました。候補は未公開で、2026-10-18のマイルストーン目標は公開の約束ではありません。準備PRは対象6件のPRを統合したmain上でバージョンと文書のみを変更します。 + +以下の順で順次統合した後、2026-10-16に更新しました。統合ソースの基準は`21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`で、最終リリース準備・公開コミットではありません。PR #315は最終コミットのローカル検証・CI・レビューのためオープンのままです。 + +| PR | mainへのマージコミット | +| --- | --- | +| #305 | `3392c561e8b8b3221c8c5fcad6077cad8f7becd8` | +| #311 | `57c42d4a97b351de41a6180b7a05a0ec018d0c4c` | +| #310 | `10a6da72b8b94f08b6b3b2ff70f581aadf548279` | +| #308 | `b04e46c4e641fd0defab72b96c26d0612d0d6a5e` | +| #313 | `9c625bebb21dec2519214889fc60cc3f362142c1` | +| #314 | `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a` | + +#311のmacOS検出はメタデータのみの方針を維持します。単独listはCodexの実行やバージョン照会を行わず、通常値と強制値の両方を保守的に検査します。通常値を無視する新しいnative環境も拒否する場合があります。send/dry-runは制限されたnativeバージョン証拠を使い、正確にレビューした0.162.1のみ強制値専用検査を選択します。旧版・確認不能・未レビュー版では通常値も検査します。物理child cwdと消費側の別名経路検査は既知の設定の曖昧さを減らすだけで、起動時の保存先や原子的な識別の不確実性は解消しません。 + +send/dry-runのバージョン照会は3秒でタイムアウトし、別途最大2秒の後処理時間を認めます。メタデータのみのlistにはこの照会を含みません。 + +原因不明のRelay exit139と別のローカルtransport生成・終了診断は#316で監視します。再実行成功は原因・関連性・修正の証拠ではありません。テスト・監査・保護規則を迂回しません。 + +## マージ済みの候補範囲 + +- PR #311:追加の設定レイヤーにある既知のCodex保存先変更を拒否し、作用前にqueue実行計画を検査します。共有daemonの経路選択はnativeに任せ、検査成功を実効保存先の証明としません。 +- PR #310:Codexの対象世代は未対応のままとし、否定的な証拠のテストを追加します。writerロック、queue ID、turn IDは元の世代の原子的な一致を証明しません。 +- PR #314:危険・古いチャネル、保持期間、復元が確認された履歴の明示的な隔離、collector再起動時の確定済みACK分類保持をオフラインでテストします。新しいランタイム対応は追加しません。 +- PR #305:macOS/Linux Antigravity 1.3.3の登録後の限定的検証を保存します。Antigravityは安定版対応ではなく実験的機能のままです。 +- PR #313:2026-10-13のmacOS起動・受信側bridgeの過去の証拠を保存し、ownerの受信と呼び出し側実行、出所の限界を区別します。 +- PR #308:隔離したCodex初回入力probeを強化します。サーバー履歴を確認できない場合は安全側に拒否するため、未保存の空TUIは拒否される場合があります。26件の回帰テストには未対応API例を含み、一般的な初回入力対応の証拠ではありません。 + +## 検証と残る条件 + +対象6件のPRはマージ済みですが、PR #315には最終コミットのレビュー・CI、単独ファイル再生成の検査、翻訳ハッシュ、全プラットフォームテスト、隔離wheel/sdistインストールと最新の依存関係監査が必要です。各ブランチの成功は最終準備ツリーの証拠ではありません。別途の承認による準備PRのマージ後、正確なmain CI成功、SHA256SUMSとrelease-provenance.jsonを含む不変ドラフト資産7個と証明の確認、必須の人手によるpypi環境承認が必要です。この準備はPR #315のマージ、タグ・ドラフト作成、ワークフロー実行、公開、配備の承認ではありません。 + +リリース準備PRは対象6件のPRをすべてマージした後、最後にマージします。統合mainを反映した準備PRの最終コミットを更新・レビューし、過去の承認をv1.2.0の承認とみなしません。準備ブランチのCIとローカル統合成果物は予行検証の証拠であり、公開用リリース資産ではありません。最終リリースビルド前に、4言語READMEの状態案内を公開の前後によらず正確な表現で固定します。保護された最終mainのCI成功後、承認済み準備ワークフローでその正確なmainコミットから資産を再ビルド・検証し、公開前にSHA256SUMSとrelease-provenance.jsonを含む不変資産7個とその証明をすべて確認します。公開時は実際の公開証拠に基づく別の文書記録を追加します。固定済みメタデータを変えるために不変資産を再ビルド・置換せず、公開完了を先に宣言しません。 + +Issue #180、#181、#268、#304、#306、#307は未完了のままです。native Codex世代・ACK、完全な保存先検証、一般的な空TUI入力、Antigravity安定版対応、残るnative・プラットフォーム受け入れ条件は提供しません。固定handoff契約とfixtureは変更しません。submitted/queuedは消費やACKではなく、unknownは自動再送を許可しません。 + +プラグインと別管理スキルのバージョンは独立し変更しません。新しい実SSH、Relay、MCP、OAuth、フリート、nativeエージェントの受け入れ証拠は主張しません。過去のRC4 ACK証拠は20/21のままで、#161は原因未確定の監視項目です。パッケージ公開に本番配備は含まず、Control/Relay配備と各端末の更新には別途の承認・検証が必要です。 diff --git a/docs/ko/README.md b/docs/ko/README.md index 1fe59dc0..69c9ad20 100644 --- a/docs/ko/README.md +++ b/docs/ko/README.md @@ -23,7 +23,9 @@ ## 개발과 이력 -- [v1.1.2 후보 노트](releases/v1.1.2.md)는 2026-10-13에 준비한 미공개 #298 Claude PID 기록 및 비십진 유니코드 이름 수정을 설명합니다. CI와 공개 승인 절차는 별개입니다. +- [v1.2.0 후보 노트](releases/v1.2.0.md)는 2026-10-15에 시작해 2026-10-16에 갱신한 미공개 준비, 병합된 PR 6개 범위와 남은 수락 조건을 기록합니다. + +- [v1.1.2 과거 준비 기록](releases/v1.1.2.md)은 #298과 2026-10-13 준비를 설명하며, 이후 v1.1.2가 공개됐습니다. 버전이나 명령을 재사용하지 마십시오. - [v1.1.1 유지보수 노트](releases/v1.1.1.md)는 2026-10-12에 준비한 문서·테스트 유지보수 버전을 설명하며 런타임 동작은 1.1.0과 같습니다. 패키지 공개는 별도로 확인하십시오. diff --git a/docs/ko/releases/v1.2.0.md b/docs/ko/releases/v1.2.0.md new file mode 100644 index 00000000..f0d72607 --- /dev/null +++ b/docs/ko/releases/v1.2.0.md @@ -0,0 +1,41 @@ +# v1.2.0 릴리스 후보 + +## 범위 + +공개 버전 1.1.2를 기준으로 2026-10-15에 준비했습니다. 후보는 미공개이며 2026-10-18 마일스톤 목표는 공개 약속이 아닙니다. 준비 PR은 범위 내 PR 6개가 병합된 main 위에서 버전·문서만 바꿉니다. + +아래 순서로 순차 통합한 뒤 2026-10-16에 갱신했습니다. 통합 소스 기준은 `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`이며 최종 릴리스 준비·공개 커밋은 아닙니다. PR #315는 최종 커밋의 로컬 검증·CI·검토를 위해 열린 상태로 유지합니다. + +| PR | main 병합 커밋 | +| --- | --- | +| #305 | `3392c561e8b8b3221c8c5fcad6077cad8f7becd8` | +| #311 | `57c42d4a97b351de41a6180b7a05a0ec018d0c4c` | +| #310 | `10a6da72b8b94f08b6b3b2ff70f581aadf548279` | +| #308 | `b04e46c4e641fd0defab72b96c26d0612d0d6a5e` | +| #313 | `9c625bebb21dec2519214889fc60cc3f362142c1` | +| #314 | `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a` | + +#311의 macOS 검색은 메타데이터 전용 정책을 유지합니다. 독립 list는 Codex를 실행하거나 버전을 조회하지 않고 일반·강제 환경설정을 보수적으로 검사합니다. 따라서 일반 값을 무시하는 최신 native 환경도 거부할 수 있습니다. send/dry-run은 제한된 native 버전 증거를 사용하며 검토한 정확한 0.162.1만 강제 값 전용 검사를 선택합니다. 이전·확인 불가·미검토 버전은 일반 값도 검사합니다. 물리 child cwd와 소비자 경로 별칭 검사는 알려진 설정 모호성을 줄일 뿐 기동 시 저장소나 원자적 신원 불확실성을 해소하지 않습니다. + +send/dry-run 버전 조회의 시간 제한은 3초이며 별도로 최대 2초의 정리 시간을 허용합니다. 메타데이터 전용 list에는 이 조회가 포함되지 않습니다. + +원인 미확정 Relay exit139와 별도의 로컬 transport 생성·종료 진단은 #316에서 모니터링합니다. 재실행 성공은 원인·상호관계·수정의 증거가 아닙니다. 테스트·감사·보호 규칙을 우회하지 않습니다. + +## 병합된 후보 범위 + +- PR #311: 추가 설정 계층의 알려진 Codex 저장소 재지정을 거부하고 효과 전에 queue 실행 계획을 검사합니다. 공유 daemon 경로는 native에 맡기며 검사 통과가 유효 저장소 증명은 아닙니다. +- PR #310: Codex 대상 세대 미지원 동작을 유지하고 반례 테스트를 추가합니다. writer 잠금, queue ID와 turn ID는 원래 세대의 원자적 일치를 증명하지 않습니다. +- PR #314: 안전하지 않거나 오래된 채널, 보존 기간, 복원 사실이 확인된 이력의 명시적 격리와 collector 재시작 시 커밋된 ACK 분류 보존을 오프라인으로 검사합니다. 새 런타임 지원은 추가하지 않습니다. +- PR #305: macOS/Linux Antigravity 1.3.3 등록 후의 제한된 검증을 기록합니다. Antigravity는 정식 지원이 아닌 실험적 기능으로 유지합니다. +- PR #313: 2026-10-13 macOS 시작·수신측 bridge의 과거 증거를 기록하고 owner 수신과 호출자측 실행, 출처 한계를 구분합니다. +- PR #308: 격리된 Codex 첫 입력 probe를 강화합니다. 서버 이력을 확인하지 못하면 안전하게 거부하므로 저장되지 않은 빈 TUI는 거부될 수 있습니다. 회귀 테스트 26개에는 미지원 API 사례가 포함되며 일반적인 첫 입력 지원 증거가 아닙니다. + +## 검증과 남은 조건 + +범위 내 PR 6개는 병합됐지만 PR #315에는 최종 커밋 검토·CI, 독립 실행 파일 재생성 검사, 번역 해시, 전체 플랫폼 테스트, 격리된 wheel/sdist 설치와 최신 의존성 감사가 필요합니다. 개별 브랜치 성공은 최종 준비본의 증거가 아닙니다. 별도 승인에 따라 준비 PR을 병합한 뒤 정확한 main CI 성공, SHA256SUMS와 release-provenance.json을 포함한 불변 초안 자산 7개·증명 검토와 필수 사람 pypi 환경 승인을 요구합니다. 이 준비는 PR #315 병합, 태그·초안 생성, 워크플로 실행 요청, 공개나 운영 배포 승인이 아닙니다. + +릴리스 준비 PR은 범위 내 PR 6개를 모두 병합한 뒤 마지막으로 병합합니다. 병합된 main을 반영한 최종 준비 커밋을 갱신·검토하며 과거 승인은 v1.2.0 승인이 아닙니다. 준비 브랜치 CI와 로컬 통합 산출물은 예행 검증 자료이며 게시할 릴리스 자산이 아닙니다. 최종 릴리스 빌드 전에 README 4개 언어의 상태 안내를 공개 여부와 무관하게 정확한 문구로 고정합니다. 보호된 최종 main의 CI 성공 후 승인된 준비 워크플로로 정확한 main 커밋에서 자산을 다시 빌드·검증하고, 공개 전에 SHA256SUMS와 release-provenance.json을 포함한 불변 자산 7개와 해당 증명을 모두 검토합니다. 공개 시 실제 공개 증거에 따른 별도 문서 기록을 추가합니다. 고정된 메타데이터를 바꾸려고 불변 자산을 다시 빌드하거나 교체하지 않으며 미리 공개 완료를 선언하지 않습니다. + +이슈 #180, #181, #268, #304, #306, #307은 열린 상태입니다. native Codex 세대·ACK, 완전한 저장소 검증, 일반 빈 TUI 입력, Antigravity 정식 지원과 남은 native·플랫폼 수락 조건은 이 후보가 제공하지 않습니다. 고정된 handoff 계약과 fixture는 변하지 않습니다. submitted/queued는 소비·ACK가 아니며 unknown은 자동 재전송을 허용하지 않습니다. + +플러그인·별도 스킬 버전은 독립적이며 바꾸지 않습니다. 새로운 실제 SSH, Relay, MCP, OAuth, 장비 전체 또는 native 에이전트 수락 증거를 주장하지 않습니다. 과거 RC4 ACK 증거는 20/21로 유지하고 #161은 원인 미확정 모니터링으로 남깁니다. 패키지 공개에는 운영 배포가 포함되지 않으며 Control/Relay 배포와 설치 장비 갱신에는 별도 승인·검증이 필요합니다. diff --git a/docs/releases/v1.2.0.md b/docs/releases/v1.2.0.md new file mode 100644 index 00000000..b2090bd5 --- /dev/null +++ b/docs/releases/v1.2.0.md @@ -0,0 +1,41 @@ +# v1.2.0 release candidate + +## Scope + +Prepared on 2026-10-15 against published 1.1.2. This candidate is unpublished; the 2026-10-18 milestone target is not a publication promise. The preparation PR changes version/documents only, on top of the six scoped PRs now merged into main. + +Updated on 2026-10-16 after sequential integration in this order. The integrated source base is `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`; this is not the final release-preparation or publication commit. PR #315 remains open for final-head local validation, CI and review. + +| PR | Main merge commit | +| --- | --- | +| #305 | `3392c561e8b8b3221c8c5fcad6077cad8f7becd8` | +| #311 | `57c42d4a97b351de41a6180b7a05a0ec018d0c4c` | +| #310 | `10a6da72b8b94f08b6b3b2ff70f581aadf548279` | +| #308 | `b04e46c4e641fd0defab72b96c26d0612d0d6a5e` | +| #313 | `9c625bebb21dec2519214889fc60cc3f362142c1` | +| #314 | `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a` | + +The #311 macOS discovery policy remains metadata-only: standalone list never executes Codex or queries its version, and conservatively checks ordinary as well as forced preferences. This may refuse newer environments whose native loader ignores ordinary values. Send/dry-run uses bounded native-version evidence: only the exact reviewed 0.162.1 selects forced-only checks; older, unavailable or unreviewed evidence includes ordinary values. Physical child cwd and consumer alias checks reduce known configuration ambiguity, not startup-storage or atomic identity uncertainty. + +The send/dry-run version probe has a 3-second timeout and a separate cleanup allowance of up to 2 seconds; it is not part of metadata-only list. + +The unexplained Relay exit139 and separate local transport-creation and shutdown diagnostics remain monitored in #316. Passing reruns do not establish a cause, relationship or fix. No test, audit or protection is bypassed. + +## Merged candidate scope + +- PR #311: reject known Codex storage relocation in additional configuration layers and check the queue execution plan before effects. Shared-daemon routing remains native; passing checks is not effective-storage attestation. +- PR #310: preserve Codex target-generation unsupported behavior and add negative evidence tests; writer locks, queue IDs and turn IDs do not prove an atomic original generation. +- PR #314: add offline handoff lifecycle tests for unsafe/stale channels, retention, explicit known-restore quarantine and preservation of committed ACK classification across collector restart. This adds no new runtime support. +- PR #305: archive scoped macOS/Linux Antigravity 1.3.3 post-registration validation. Antigravity remains experimental, not stable support. +- PR #313: archive historical 2026-10-13 macOS startup and receiver-bridge evidence, distinguishing owner receipt from caller-side execution and recording provenance limits. +- PR #308: harden the isolated Codex first-input probe. The current server-history guard fails closed when it cannot establish history; unmaterialized empty TUIs may be refused. The 26 regression tests include unsupported API cases, not proof of general first-input support. + +## Validation and remaining gates + +The six scoped PRs are merged, but PR #315 still requires final-head reviews/CI, standalone regeneration checks, translation hashes, complete platform tests, isolated wheel/sdist installations and current dependency audits. Passing checks on separate branches is not evidence for the final preparation tree. After its separately authorized merge, require green exact-main CI, review the seven immutable draft assets (including SHA256SUMS and release-provenance.json) and their attestations, and obtain the required human pypi environment approval. This preparation does not authorize merging PR #315, tag/draft creation, workflow dispatch, publication or deployment. + +Merge the release-preparation PR last, after all six scoped PRs. Update and review its final head against merged main; historical approvals do not authorize v1.2.0. Prep-only CI and local integration artifacts are rehearsal evidence, not publishable release assets. Before the final release build, freeze all four README status notices in publication-neutral wording. After final protected-main CI succeeds, rebuild and verify release assets through the authorized preparation workflow at that exact main commit, then review all seven immutable assets (including SHA256SUMS and release-provenance.json) and their attestations before publication. At publication time, add a separate documentation record from actual publication evidence; never rebuild or replace immutable assets to change their frozen metadata, and do not announce publication in advance. + +Issues #180, #181, #268, #304, #306 and #307 remain open. Native Codex generation/ACK, complete storage verification, general empty-TUI input, Antigravity stable promotion and remaining native/platform acceptance are not delivered by this candidate. The frozen handoff contract and fixture are unchanged; submitted/queued is not consumption or ACK, and unknown never authorizes automatic resend. + +Plugin and companion skill versions remain independent and unchanged. No new live SSH, Relay, MCP, OAuth, fleet or native-agent acceptance is claimed. Historical RC4 ACK evidence remains 20/21; #161 remains monitoring with its root cause unconfirmed. Package publication does not include operational deployment; Control/Relay deployment and installed-device updates require separate authorization and verification. diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index f44e13c9..fdc05253 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -22,7 +22,9 @@ ## 开发与历史 -- [v1.1.2候选说明](releases/v1.1.2.md)介绍2026-10-13准备的未发布#298 Claude PID记录和非十进制Unicode名称修复。CI与发布审批是独立步骤。 +- [v1.2.0候选说明](releases/v1.2.0.md)记录于2026-10-15开始、2026-10-16更新的未发布准备、已合并的6项PR范围和剩余验收条件。 + +- [v1.1.2历史准备记录](releases/v1.1.2.md)介绍#298和2026-10-13的准备;此后v1.1.2已发布。不得重用该版本或命令。 - [v1.1.1维护说明](releases/v1.1.1.md)介绍2026-10-12准备的文档与测试维护版本;运行时行为与1.1.0相同。软件包发布需单独确认。 diff --git a/docs/zh-CN/releases/v1.2.0.md b/docs/zh-CN/releases/v1.2.0.md new file mode 100644 index 00000000..4dc5d65d --- /dev/null +++ b/docs/zh-CN/releases/v1.2.0.md @@ -0,0 +1,41 @@ +# v1.2.0发布候选版本 + +## 范围 + +于2026-10-15基于已发布1.1.2准备。候选版本尚未发布,2026-10-18里程碑目标并非发布承诺。准备PR在已合并范围内6项PR的main之上仅修改版本和文档。 + +按以下顺序完成集成后,于2026-10-16更新。集成源代码基准为`21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`,并非最终发布准备或发布提交。PR #315仍保持开放,等待最终提交的本地验证、CI和审核。 + +| PR | main合并提交 | +| --- | --- | +| #305 | `3392c561e8b8b3221c8c5fcad6077cad8f7becd8` | +| #311 | `57c42d4a97b351de41a6180b7a05a0ec018d0c4c` | +| #310 | `10a6da72b8b94f08b6b3b2ff70f581aadf548279` | +| #308 | `b04e46c4e641fd0defab72b96c26d0612d0d6a5e` | +| #313 | `9c625bebb21dec2519214889fc60cc3f362142c1` | +| #314 | `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a` | + +#311的macOS发现策略仍仅检查元数据:独立list不执行Codex或查询版本,而是保守检查普通及强制偏好设置,因此也可能拒绝native加载器会忽略普通值的新环境。send/dry-run使用有界native版本证据,仅准确审核的0.162.1选择仅强制值检查;旧版、无法确认或未审核版本也检查普通值。物理child cwd和消费端路径别名检查只能减少已知配置歧义,不能消除启动存储或原子身份的不确定性。 + +send/dry-run版本查询的超时为3秒,另允许最多2秒的清理时间;仅检查元数据的list不执行此查询。 + +原因不明的Relay exit139与单独的本地transport创建及关闭诊断仍在#316监测。重跑成功不能证明原因、关联或已修复。不得绕过测试、审计或保护规则。 + +## 已合并的候选范围 + +- PR #311:拒绝额外配置层中的已知Codex存储重定向,并在产生效果前检查queue执行计划。共享daemon路由仍由native选择;检查通过不等于实际存储身份认证。 +- PR #310:保持Codex目标世代不支持状态,增加反例测试;writer锁、queue ID和turn ID均不能证明原始世代的原子一致性。 +- PR #314:离线测试不安全/失效通道、保留期、明确已知恢复的隔离,以及collector重启后已提交ACK分类保持不变。不增加运行时支持。 +- PR #305:保存macOS/Linux Antigravity 1.3.3注册后的有限验证。Antigravity仍为实验性功能,并非稳定支持。 +- PR #313:保存2026-10-13 macOS启动和接收端bridge的历史证据,区分owner接收与调用方执行,并说明来源限制。 +- PR #308:强化隔离Codex首次输入probe。无法确认服务器历史时安全拒绝,因此未持久化的空TUI可能被拒绝。26项回归测试包括不支持API的情况,并非一般首次输入支持的证据。 + +## 验证与剩余门禁 + +范围内6项PR已合并,但PR #315仍需最终提交审核/CI、独立文件再生成检查、翻译哈希、完整平台测试、隔离wheel/sdist安装和最新依赖审计。单独分支通过不代表最终准备树已验证。经另行批准合并准备PR后,须通过准确main CI,审核包括SHA256SUMS和release-provenance.json在内的7项不可变草稿资产及证明,并获得必需的人工pypi环境批准。本次准备不授权合并PR #315、创建标签/草稿、派发工作流、发布或部署。 + +发布准备PR必须在范围内全部6项PR合并后最后合并。更新准备PR以反映已合并main,并审核最终提交;历史批准不授权v1.2.0。准备分支CI和本地集成产物仅为演练证据,不是可发布的版本资产。最终发布构建前,须将四种语言README的状态提示固定为发布前后均准确的表述。受保护最终main的CI成功后,通过获批的准备工作流从该准确main提交重新构建并验证资产,发布前审核包括SHA256SUMS和release-provenance.json在内的全部7项不可变资产及其证明。发布时应依据实际发布证据添加独立文档记录;不得为了修改已固定的元数据而重新构建或替换不可变资产,也不得提前宣称已发布。 + +议题#180、#181、#268、#304、#306、#307仍保持开放。本候选不提供native Codex世代/ACK、完整存储验证、一般空TUI输入、Antigravity稳定支持及剩余native/平台验收。固定handoff契约和fixture不变;submitted/queued不等于消费或ACK,unknown永不授权自动重发。 + +插件和独立技能版本分别管理且不变。不宣称新增实际SSH、Relay、MCP、OAuth、设备群或native代理验收证据。历史RC4 ACK证据保持20/21;#161仍为根因未确认的监测项。软件包发布不包含生产部署;Control/Relay部署和已安装设备更新需另行批准与验证。 diff --git a/session_peer.py b/session_peer.py index d789f287..89a4ba6f 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.1.2" +__version__ = "1.2.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 f99d0669..0fcadade 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.1.2" +__version__ = "1.2.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 a297b6b5..273532bb 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(47, len(sources), "Update the translation manifest for new canonical docs") + self.assertEqual(48, 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 299ac211..dc84fa32 100644 --- a/tests/docs/test_release_commands.py +++ b/tests/docs/test_release_commands.py @@ -15,7 +15,7 @@ class ReleaseCommands(unittest.TestCase): - def test_current_publication_requires_completed_preparation_and_asset_review(self): + def test_historical_publication_requires_completed_preparation_and_asset_review(self): for name in ("RELEASING.md", "RELEASING.ko.md", "RELEASING.ja.md", "RELEASING.zh-CN.md"): with self.subTest(document=name): text = (ROOT / name).read_text(encoding="utf-8") @@ -25,6 +25,19 @@ def test_current_publication_requires_completed_preparation_and_asset_review(sel for marker in ("gh run watch ", "--exit-status", "attach-draft", "SHA256SUMS", "release-provenance.json"): self.assertIn(marker, gate) + self.assertEqual( + text.count("# Historical v1.1.2 example: do not rerun or reuse this version."), + 2, + ) + candidate = text[text.index("## v1.2.0"):text.index("## ", text.index("## v1.2.0") + 4)] + self.assertNotIn("```", candidate) + self.assertNotRegex(candidate, r"(?m)^\s*(?:git\s+(?:tag|push)\b|gh\s+(?:release\b|workflow\s+run\b)|release_tag=)") + self.assertNotIn("gh release ", candidate) + self.assertNotIn("gh workflow run", candidate) + for marker in ("2026-10-15", "2026-10-18", "pypi", "attach-draft", + "SHA256SUMS", "release-provenance.json", + "#180", "#181", "#268", "#304", "#306", "#307"): + self.assertIn(marker, candidate) def shell_calls(self, block): with tempfile.TemporaryDirectory() as temporary: diff --git a/tests/docs/test_stable_candidate.py b/tests/docs/test_stable_candidate.py index d858fe8a..e6e33494 100644 --- a/tests/docs/test_stable_candidate.py +++ b/tests/docs/test_stable_candidate.py @@ -10,7 +10,77 @@ class StableCandidate(unittest.TestCase): - def test_pid_patch_candidate_remains_unpublished_and_narrow(self): + def test_v120_candidate_records_merged_scope_and_open_gates(self): + source_base = "21a0be0c0c5bcb8bca214d90a873b7479d7ba97a" + merged_prs = ( + (305, "3392c561e8b8b3221c8c5fcad6077cad8f7becd8"), + (311, "57c42d4a97b351de41a6180b7a05a0ec018d0c4c"), + (310, "10a6da72b8b94f08b6b3b2ff70f581aadf548279"), + (308, "b04e46c4e641fd0defab72b96c26d0612d0d6a5e"), + (313, "9c625bebb21dec2519214889fc60cc3f362142c1"), + (314, source_base), + ) + profiles = ( + ("", "The 26 regression tests include unsupported API cases", + "Merge the release-preparation PR last", "not publishable release assets"), + ("ko/", "회귀 테스트 26개에는 미지원 API 사례", + "릴리스 준비 PR은 범위 내 PR 6개를 모두 병합한 뒤 마지막으로 병합", + "게시할 릴리스 자산이 아닙니다"), + ("ja/", "26件の回帰テストには未対応API例", + "リリース準備PRは対象6件のPRをすべてマージした後、最後にマージ", + "公開用リリース資産ではありません"), + ("zh-CN/", "26项回归测试包括不支持API的情况", + "发布准备PR必须在范围内全部6项PR合并后最后合并", + "不是可发布的版本资产"), + ) + for locale, regression_scope, merge_order, artifact_boundary in profiles: + text = (ROOT / ("docs/" + locale + "releases/v1.2.0.md")).read_text(encoding="utf-8") + for marker in ("1.1.2", "1.2.0", "2026-10-15", "2026-10-16", "2026-10-18", + "#305", "#308", "#310", "#311", "#313", "#314", "#315", source_base, + "#180", "#181", "#268", "#304", "#306", "#307", + regression_scope, merge_order, artifact_boundary, + "20/21", "#161", "#316", "pypi", "Control/Relay"): + self.assertIn(marker, text) + merge_rows = ["| #%d | `%s` |" % pair for pair in merged_prs] + positions = [text.index(row) for row in merge_rows] + self.assertEqual(positions, sorted(positions)) + suffix = "." + locale.rstrip("/") if locale else "" + runbook = (ROOT / ("RELEASING" + suffix + ".md")).read_text(encoding="utf-8") + self.assertIn(merge_order, runbook) + self.assertIn(artifact_boundary, runbook) + self.assertIn(source_base, runbook) + self.assertIn("#315", runbook) + neutral_freeze, immutable_metadata, diagnostic = { + "": ("publication-neutral wording", "never rebuild or replace immutable assets", + "transport-creation and shutdown diagnostics"), + "ko/": ("공개 여부와 무관하게 정확한 문구", "불변 자산을 다시 빌드하거나 교체하지", + "transport 생성·종료 진단"), + "ja/": ("公開の前後によらず正確な表現", "不変資産を再ビルド・置換せず", + "transport生成・終了診断"), + "zh-CN/": ("发布前后均准确的表述", "重新构建或替换不可变资产", + "transport创建及关闭诊断"), + }[locale] + for marker in (neutral_freeze, immutable_metadata, diagnostic, + "SHA256SUMS", "release-provenance.json"): + self.assertIn(marker, text) + self.assertIn(marker, runbook) + english = (ROOT / "docs/releases/v1.2.0.md").read_text(encoding="utf-8") + for marker in ("candidate is unpublished", "The six scoped PRs are merged", + "PR #315 remains open", "not the final release-preparation or publication commit", + "3-second timeout", "up to 2 seconds", "not effective-storage attestation", + "unmaterialized empty TUIs may be refused", "remain open", + "not proof of general first-input support", + "required human pypi environment approval", + "review its final head", "historical approvals do not authorize v1.2.0", + "final protected-main CI", "rebuild and verify release assets", + "At publication time", "actual publication evidence"): + self.assertIn(marker, english) + self.assertNotIn("## Proposed changes", english) + runbook = (ROOT / "RELEASING.md").read_text(encoding="utf-8") + self.assertIn("not recorded as verified", runbook) + self.assertNotIn("six unmerged feature branches", runbook) + + def test_historical_pid_patch_preparation_remains_narrow(self): for locale in ("", "ko/", "ja/", "zh-CN/"): note = (ROOT / ("docs/" + locale + "releases/v1.1.2.md")).read_text(encoding="utf-8") for marker in ("#298", "1.1.1", "1.1.2", "2026-10-13", "²", @@ -98,8 +168,8 @@ def test_completed_release_examples_are_explicitly_historical(self): def test_published_release_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.1.1**", text) - self.assertIn("releases/v1.1.1.md", text) + self.assertIn("**1.1.2**", text) + self.assertIn("releases/v1.1.2.md", text) self.assertIn("handoff-runtime.md", text) self.assertIn("POSIX", text) self.assertNotIn("**1.0.4**", text) @@ -118,8 +188,8 @@ def test_published_release_keeps_experimental_acceptance_gates(self): self.assertIn(marker, english) def test_package_and_generated_core_version_agree(self): - self.assertEqual(session_peer.__version__, "1.1.2") - self.assertIn('__version__ = "1.1.2"', + self.assertEqual(session_peer.__version__, "1.2.0") + self.assertIn('__version__ = "1.2.0"', (ROOT / "session_peer_core/common.py").read_text(encoding="utf-8")) def test_all_current_readmes_and_runbooks_use_stable_version(self): @@ -127,7 +197,7 @@ def test_all_current_readmes_and_runbooks_use_stable_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.1.1", text) + self.assertIn("1.1.2", text) self.assertNotIn("1.0.0rc4", text) if stem == "RELEASING": self.assertIn("--draft=false --prerelease=false --latest", text) @@ -149,17 +219,39 @@ def test_release_notes_keep_scope_and_limits_visible(self): self.assertIn(marker, text) def test_stable_release_keeps_operational_deployment_separate(self): - self.assertIn("Version covered by this README: **1.1.1**.", - (ROOT / "README.md").read_text(encoding="utf-8")) - for suffix in ("", ".ko", ".ja", ".zh-CN"): + profiles = ( + ("", "Source version: **1.2.0**.", + "At the 2026-10-16 publication checkpoint, the last verified published stable release was **1.1.2**.", + "Development candidate 1.2.0 is unpublished"), + (".ko", "소스 버전: **1.2.0**.", + "2026-10-16 공개 상태 확인 시점의 마지막 확인 공개 안정판은 **1.1.2**였습니다.", + "개발 후보 1.2.0은 미공개입니다"), + (".ja", "ソースバージョン:**1.2.0**。", + "2026-10-16の公開状況の確認時点で、最後に確認した公開済み安定版は**1.1.2**でした。", + "開発候補1.2.0は未公開です"), + (".zh-CN", "源码版本:**1.2.0**。", + "在2026-10-16的发布状态检查时,最后确认的已发布稳定版本为**1.1.2**。", + "开发候选版本1.2.0尚未发布"), + ) + for suffix, source_version, dated_checkpoint, stale_unpublished in profiles: text = (ROOT / ("README" + suffix + ".md")).read_text(encoding="utf-8") - self.assertIn("**1.1.1**", text) + self.assertIn(source_version, text) + self.assertIn(dated_checkpoint, text) + self.assertNotIn(stale_unpublished, text) + self.assertIn("https://github.com/abruption/session-peer/releases", text) + self.assertIn("https://pypi.org/project/session-peer/", text) self.assertNotIn("**1.0.3**", text) - self.assertIn("2026-10-12", text) - for locale in ("", "ko/", "ja/", "zh-CN/"): + for locale, merged_scope, stale_scope in ( + ("", "the merged six-PR scope", "the proposed six-PR scope"), + ("ko/", "병합된 PR 6개 범위", "제안한 PR 6개 범위"), + ("ja/", "マージ済み6件のPRの範囲", "提案する6件のPRの範囲"), + ("zh-CN/", "已合并的6项PR范围", "拟议的6项PR范围")): text = (ROOT / ("docs/" + locale + "README.md")).read_text(encoding="utf-8") self.assertIn("releases/v1.0.3.md", text) self.assertIn("releases/v1.0.4.md", text) + self.assertIn(merged_scope, text) + self.assertNotIn(stale_scope, text) + self.assertIn("2026-10-16", text) self.assertIn("Package publication and operational deployment are separate.", (ROOT / "README.md").read_text(encoding="utf-8")) self.assertIn("Package publication does not include operational deployment",