From fa4d31ddd3e6771f7f42d161fc74b5356ae6e38b Mon Sep 17 00:00:00 2001 From: YEONGUK LEE Date: Fri, 23 Oct 2026 14:43:00 +0900 Subject: [PATCH 1/4] chore(release): prepare v1.3.0 --- README.ja.md | 6 ++--- README.ko.md | 6 ++--- README.md | 6 ++--- README.zh-CN.md | 6 ++--- RELEASING.ja.md | 6 +++++ RELEASING.ko.md | 6 +++++ RELEASING.md | 6 +++++ RELEASING.zh-CN.md | 6 +++++ docs/cli-reference.md | 36 +++++++++++++++++++---------- docs/handoff-runtime.md | 2 +- docs/i18n-manifest.json | 17 +++++++------- docs/ja/cli-reference.md | 36 +++++++++++++++++++---------- docs/ja/handoff-runtime.md | 2 +- docs/ja/paired-devices.md | 6 +++-- docs/ja/releases/v1.3.0.md | 34 +++++++++++++++++++++++++++ docs/ko/cli-reference.md | 36 +++++++++++++++++++---------- docs/ko/handoff-runtime.md | 2 +- docs/ko/paired-devices.md | 6 +++-- docs/ko/releases/v1.3.0.md | 34 +++++++++++++++++++++++++++ docs/paired-devices.md | 6 +++-- docs/releases/v1.3.0.md | 34 +++++++++++++++++++++++++++ docs/zh-CN/cli-reference.md | 36 +++++++++++++++++++---------- docs/zh-CN/handoff-runtime.md | 2 +- docs/zh-CN/paired-devices.md | 6 +++-- docs/zh-CN/releases/v1.3.0.md | 34 +++++++++++++++++++++++++++ session_peer.py | 2 +- session_peer_core/common.py | 2 +- tests/docs/test_docs_i18n.py | 2 +- tests/docs/test_stable_candidate.py | 28 +++++++++++----------- 29 files changed, 314 insertions(+), 97 deletions(-) create mode 100644 docs/ja/releases/v1.3.0.md create mode 100644 docs/ko/releases/v1.3.0.md create mode 100644 docs/releases/v1.3.0.md create mode 100644 docs/zh-CN/releases/v1.3.0.md diff --git a/README.ja.md b/README.ja.md index 7055ba2..5daece8 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依存パッケージはありません。 -ソースバージョン:**1.2.1**。2026-10-19の公開状況の確認時点で、最後に確認した公開済み安定版は**1.2.0**でした。 +ソースバージョン:**1.3.0**。2026-10-23の準備時点で、最後に確認した公開済み安定版は**1.2.1**でした。 -公開済み1.2.0の[公開記録・過去の準備](docs/ja/releases/v1.2.0.md)を参照してください。パッケージ公開と本番環境への配備は別です。 +1.3.0では配信説明、ローカル・SSH経路プリセットと受信者アドレス帳、時間制限付きhandoff観察、信頼したSSH設定、ペアリングリンク、バージョン別通知設定を追加します。対応する組み合わせと制限は[リリース範囲と検証条件](docs/ja/releases/v1.3.0.md)を参照してください。パッケージ公開と本番環境への配備は別です。 -入手できるバージョンは[GitHub Releases](https://github.com/abruption/session-peer/releases)と[PyPI](https://pypi.org/project/session-peer/)で確認してください。[準備記録](docs/ja/releases/v1.2.1.md)は記載日時点のパッチ範囲と残る条件を説明します。ソースのバージョンだけではパッケージの公開状況は確認できません。 +入手できるバージョンは[GitHub Releases](https://github.com/abruption/session-peer/releases)と[PyPI](https://pypi.org/project/session-peer/)で確認してください。ソースのバージョンだけではパッケージの公開状況は確認できません。 実験的な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 43a67f3..7b1f471 100644 --- a/README.ko.md +++ b/README.ko.md @@ -34,11 +34,11 @@ session-peer 1.0.2를 사용해 실제 로컬 요청과 회신을 주고받았 ### 설치 Python 3.9 이상이 필요합니다. 기본 로컬·SSH CLI는 외부 Python 패키지에 의존하지 않습니다. -소스 버전: **1.2.1**. 2026-10-19 공개 상태 확인 시점의 마지막 확인 공개 안정판은 **1.2.0**이었습니다. +소스 버전: **1.3.0**. 2026-10-23 준비 시점의 마지막 확인 공개 안정판은 **1.2.1**이었습니다. -공개 버전 1.2.0의 [공개 증거 및 과거 준비 기록](docs/ko/releases/v1.2.0.md)을 참고하십시오. 패키지 공개와 운영 배포는 별개입니다. +1.3.0에는 전달 설명, 로컬·SSH 경로 프리셋과 수신자 주소록, 유한 시간 handoff 관찰, 신뢰한 SSH 설정, 페어링 링크와 버전별 알림 설정이 추가됩니다. 지원 조합과 제한은 [릴리스 범위와 검증 조건](docs/ko/releases/v1.3.0.md)을 참고하십시오. 패키지 공개와 운영 배포는 별개입니다. -설치할 수 있는 버전은 [GitHub Releases](https://github.com/abruption/session-peer/releases)와 [PyPI](https://pypi.org/project/session-peer/)에서 확인하십시오. [준비 기록](docs/ko/releases/v1.2.1.md)은 해당 날짜의 패치 범위와 남은 조건을 설명하며, 소스 버전만으로 패키지 공개 여부가 확인되는 것은 아닙니다. +설치할 수 있는 버전은 [GitHub Releases](https://github.com/abruption/session-peer/releases)와 [PyPI](https://pypi.org/project/session-peer/)에서 확인하십시오. 소스 버전만으로 패키지 공개 여부가 확인되는 것은 아닙니다. 실험적 handoff는 명시적으로 선택해야 합니다. 로컬 POSIX Claude는 영수증 ACK를 지원하지만, Codex와 SSH는 상관 ID를 이용한 제출만 지원하며 ACK 관찰은 지원하지 않습니다. 공개된 범위와 남은 검증 조건은 [handoff 가이드](docs/ko/handoff-runtime.md)를 참고하십시오. diff --git a/README.md b/README.md index c7b09f1..49b56f3 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. -Source version: **1.2.1**. At the 2026-10-19 publication checkpoint, the last verified published stable release was **1.2.0**. +Source version: **1.3.0**. At the 2026-10-23 preparation checkpoint, the last verified published stable release was **1.2.1**. -See the [publication record and historical preparation](docs/releases/v1.2.0.md) for published version 1.2.0. Package publication and operational deployment are separate. +Version 1.3.0 adds delivery explanations, local/SSH route presets and recipient addresses, bounded handoff observation, trusted SSH configuration, pairing links and per-version notice preferences. See the [release scope and verification gates](docs/releases/v1.3.0.md) for supported combinations and limits. Package publication and operational deployment are separate. -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.1.md) record the dated patch scope and remaining gates; a source version alone does not establish package availability. +Check [GitHub Releases](https://github.com/abruption/session-peer/releases) and [PyPI](https://pypi.org/project/session-peer/) for available versions; 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 76c97ab..ebacd9d 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -34,11 +34,11 @@ session-peer使用各智能体自身的收件箱和队列;接收方智能体 ### 安装 需要Python 3.9或更高版本。核心本地与SSH CLI没有第三方Python依赖。 -源码版本:**1.2.1**。在2026-10-19的发布状态检查时,最后确认的已发布稳定版本为**1.2.0**。 +源码版本:**1.3.0**。在2026-10-23的准备检查时,最后确认的已发布稳定版本为**1.2.1**。 -已发布的1.2.0请参阅[发布记录与历史准备](docs/zh-CN/releases/v1.2.0.md)。软件包发布与生产环境部署是两项独立操作。 +1.3.0增加传递说明、本地与SSH路由预设及收件人地址簿、有时限的handoff观察、受信任SSH配置、配对链接和按版本设置的通知偏好。支持的组合与限制请参阅[发布范围与验证条件](docs/zh-CN/releases/v1.3.0.md)。软件包发布与生产环境部署是两项独立操作。 -可用版本请查看[GitHub Releases](https://github.com/abruption/session-peer/releases)和[PyPI](https://pypi.org/project/session-peer/)。[准备记录](docs/zh-CN/releases/v1.2.1.md)说明记录日期时的补丁范围与剩余门禁;仅凭源码版本不能确认软件包是否已发布。 +可用版本请查看[GitHub Releases](https://github.com/abruption/session-peer/releases)和[PyPI](https://pypi.org/project/session-peer/)。仅凭源码版本不能确认软件包是否已发布。 实验性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 d23e560..faf7272 100644 --- a/RELEASING.ja.md +++ b/RELEASING.ja.md @@ -1,5 +1,11 @@ # session-peerのリリース +## v1.3.0 準備 + +公開済み1.2.1を基準に2026-10-23に準備しました。[リリースノート](docs/ja/releases/v1.3.0.md)はマージ済み機能PR6件と残る制限を説明します。統合ソースの基準はバージョン準備コミットより前の `a0e7af032fd372334782cc3ac3d97b21c71dd797` です。そのCI・CodeQLは成功していますが、最終準備レビュー、保護されたmainの正確なコミットでのCI、依存関係監査、生成された単独ファイル、パッケージとインストールの検証は引き続き必要です。スキルとプラグインのバージョンは独立しています。 + +所有者はバージョン準備・タグ作成・公開を承認しましたが、リポジトリ保護や必須の人手によるPyPI環境承認は免除されません。ビルド前に公開状況を断定しないノートを固定します。preparation workflowの実行後、attach-draftの成功を待ち、不変の成果物7件、SHA256SUMS、release-provenance.json、認証済みattestationを正確なタグとコミットに照合します。実際の公開証拠は別途記録します。ローカルビルドは事前検証であり、パッケージ公開はサービス配備やインストール済み機器の更新を含みません。以下の節は過去の手順を保存するもので、古いタグの再利用を指示するものではありません。 + 1.1.0は公開済みです。GitHubはコミット8ca77cf31254c8287a2593fe484bb30a7dba2727のv1.1.0を2026-10-09 06:46:41 UTCに公開し、PyPIはwheelとsdistをそれぞれ08:04:35と08:04:37 UTCに公開しました。[GitHubリリース](https://github.com/abruption/session-peer/releases/tag/v1.1.0)と[PyPIバージョン記録](https://pypi.org/pypi/session-peer/1.1.0/json)を参照してください。公開は本番環境への配備や実験的handoffの全受け入れ条件の完了を意味しません。 以下のソース・設定の確認から公開検証・復旧までは、2026-10-09のリリース手順の過去の記録であり、再実行の依頼ではありません。v1.1.0を再作成、移動、再利用せず、公開例を再実行しないでください。将来の版では、新しくレビューしたバージョン、最新の証拠、明示的な承認で各条件を再確認します。準備、不変のGitHub公開、必須の人手によるPyPI環境レビュー、本番環境への配備は別です。保護されたmainでは、レビュー済みで最新のPRと、Pythonのプラットフォーム別テストマトリクス、ドキュメント、シェル、パッケージ/単独ファイル/MCP/Relay/Control、統合テスト、Python/Nodeの依存関係監査を含む統合リリースゲートへの合格が必要です。 diff --git a/RELEASING.ko.md b/RELEASING.ko.md index f62bb1f..bc9739f 100644 --- a/RELEASING.ko.md +++ b/RELEASING.ko.md @@ -1,5 +1,11 @@ # session-peer 릴리스 +## v1.3.0 준비 + +공개된 1.2.1을 기준으로 2026-10-23에 준비했습니다. [릴리스 기록](docs/ko/releases/v1.3.0.md)은 병합된 기능 PR 6개와 남은 제한을 설명합니다. 통합 소스 기준은 버전 준비 커밋 이전의 `a0e7af032fd372334782cc3ac3d97b21c71dd797`입니다. 해당 CI·CodeQL은 통과했으며, 최종 준비 리뷰·보호된 main의 정확한 커밋 CI·의존성 감사·생성된 독립 실행 파일·패키지와 설치 검증은 여전히 필요합니다. 스킬과 플러그인 버전은 독립적입니다. + +저장소 소유자는 버전 준비·태그·공개를 승인했으며, 저장소 보호 규칙이나 사람이 수행하는 필수 PyPI 환경 승인을 면제한 것은 아닙니다. 빌드 전에 공개 여부를 단정하지 않는 문구로 기록을 고정합니다. preparation workflow를 실행한 뒤 attach-draft 성공을 기다리고 불변 산출물 7개, SHA256SUMS, release-provenance.json과 인증된 attestation을 정확한 태그·커밋과 대조합니다. 실제 공개 증거는 별도로 기록합니다. 로컬 빌드는 사전 검증 자료이며 패키지 공개는 서비스 배포나 설치된 기기 업데이트를 포함하지 않습니다. 아래 절은 과거 절차를 보존하며 이전 태그를 재사용하라는 지시가 아닙니다. + 1.1.0은 공개됐습니다. GitHub는 커밋 8ca77cf31254c8287a2593fe484bb30a7dba2727의 v1.1.0을 2026-10-09 06:46:41 UTC에 공개했으며, PyPI는 wheel과 sdist를 각각 08:04:35와 08:04:37 UTC에 공개했습니다. [GitHub 릴리스](https://github.com/abruption/session-peer/releases/tag/v1.1.0)와 [PyPI 버전 기록](https://pypi.org/pypi/session-peer/1.1.0/json)을 참고하십시오. 공개는 운영 배포나 실험적 handoff의 모든 수락 조건 완료를 뜻하지 않습니다. 아래 소스·설정 검사부터 공개 검증·복구까지는 2026-10-09 릴리스 절차의 역사 기록이며 재실행 요청이 아닙니다. v1.1.0을 다시 생성하거나 이동·재사용하지 말고 공개 예제를 다시 실행하지 마십시오. 후속 버전에서는 새로 검토한 버전, 새로운 검증 자료와 명시적 승인으로 각 조건을 다시 확인합니다. 준비, 불변 GitHub 공개, 사람이 수행하는 필수 PyPI 환경 검토와 운영 배포는 별개입니다. 보호된 main에 반영하려면 검토를 마치고 최신 main을 반영한 PR과, Python 플랫폼 매트릭스·문서·셸·패키지/독립 실행 파일/MCP/Relay/Control 테스트·통합 테스트·Python/Node 의존성 감사를 포함한 릴리스 게이트가 필요합니다. diff --git a/RELEASING.md b/RELEASING.md index 743f7e3..c155fb8 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,5 +1,11 @@ # Releasing session-peer +## v1.3.0 preparation + +Prepared on 2026-10-23 against published 1.2.1. The [release notes](docs/releases/v1.3.0.md) describe the six merged feature PRs and remaining boundaries. Integrated source base: `a0e7af032fd372334782cc3ac3d97b21c71dd797`, before the version-preparation commit. Its CI and CodeQL passed; final preparation review, exact protected-main CI, dependency audits, generated standalone and package/install checks remain required. Skill and plugin versions remain independent. + +The owner authorized version preparation, tagging and publication; that authorization does not waive repository protections or the required human PyPI environment approval. Freeze publication-neutral notes before building. After preparation workflow dispatch, wait for attach-draft success and verify all seven immutable assets, SHA256SUMS, release-provenance.json and authenticated attestations against the exact tag and commit. Record actual publication evidence separately. Local builds are rehearsal evidence; package publication does not deploy services or update installed devices. The sections below preserve historical procedures and do not instruct reuse of old tags. + Version 1.1.0 is published. GitHub published v1.1.0 on 2026-10-09 at 06:46:41 UTC, from commit 8ca77cf31254c8287a2593fe484bb30a7dba2727; PyPI published the wheel and sdist at 08:04:35 and 08:04:37 UTC. See the [GitHub release](https://github.com/abruption/session-peer/releases/tag/v1.1.0) and [PyPI version record](https://pypi.org/pypi/session-peer/1.1.0/json). Publication is not operational deployment or completion of every experimental handoff gate. 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. diff --git a/RELEASING.zh-CN.md b/RELEASING.zh-CN.md index bdd6f8c..ea58dea 100644 --- a/RELEASING.zh-CN.md +++ b/RELEASING.zh-CN.md @@ -1,5 +1,11 @@ # 发布session-peer +## v1.3.0 准备 + +于2026-10-23以已发布的1.2.1为基准准备。[发布说明](docs/zh-CN/releases/v1.3.0.md)介绍六个已合并功能PR及剩余限制。集成源码基准为版本准备提交之前的 `a0e7af032fd372334782cc3ac3d97b21c71dd797`。该基准的CI与CodeQL已通过;仍需最终准备审核、受保护main准确提交的CI、依赖审计、生成的独立文件、软件包及安装检查。技能与插件版本保持独立。 + +所有者已授权版本准备、打标签和发布,但未免除仓库保护或必需的人工PyPI环境审批。构建前冻结不预先宣告发布的说明。触发preparation workflow后,等待attach-draft成功,将七个不可变产物、SHA256SUMS、release-provenance.json及经过认证的attestation与准确标签和提交核对。另行记录实际发布证据。本地构建是预演证据;软件包发布不包括服务部署或已安装设备更新。以下章节保留历史流程,不是重用旧标签的指示。 + 1.1.0已发布。GitHub于2026-10-09 06:46:41 UTC发布了提交8ca77cf31254c8287a2593fe484bb30a7dba2727的v1.1.0;PyPI分别于08:04:35和08:04:37 UTC发布wheel与sdist。请参阅[GitHub版本](https://github.com/abruption/session-peer/releases/tag/v1.1.0)和[PyPI版本记录](https://pypi.org/pypi/session-peer/1.1.0/json)。发布不表示已部署到生产环境,也不表示实验性handoff的所有验收条件已完成。 以下从源码/配置门禁到发布验证/恢复的部分保留2026-10-09发布流程的历史记录,并非重新执行的请求。不要重新创建、移动或重用v1.1.0,也不要再次执行其发布示例。后续版本需采用新审核的版本、最新证据和明确授权,重新检查各项门禁。准备、不可变GitHub发布、必需的人工PyPI环境审核与生产环境部署相互独立。受保护的main要求PR经过审核并与main保持最新,同时通过汇总发布门禁;门禁涵盖Python平台测试矩阵、文档、shell、包/单文件/MCP/Relay/Control、集成测试以及Python/Node依赖审计。 diff --git a/docs/cli-reference.md b/docs/cli-reference.md index 1bc5bc2..1f8a23c 100644 --- a/docs/cli-reference.md +++ b/docs/cli-reference.md @@ -62,9 +62,11 @@ is opt-in and does not confirm consumption or a reply. -### Delivery explanation (development) + -Development for #323, a v1.3 candidate; unavailable in published v1.2.1. Add `--explain` to `send --dry-run` for a human-readable summary of the selected local, SSH or paired-device destination, existing validation result, delivery method and observation limits. `doctor --explain` describes the existing diagnostic snapshot and declared capabilities, not per-target readiness. `handoff status --explain` describes an existing intent's stored evidence. Each processed SSH destination receives its own summary; an unexpected error can still stop the existing host loop before later destinations are processed. +### Delivery explanation (v1.3.0) + +Available in v1.3.0. Add `--explain` to `send --dry-run` for a human-readable summary of the selected local, SSH or paired-device destination, existing validation result, delivery method and observation limits. `doctor --explain` describes the existing diagnostic snapshot and declared capabilities, not per-target readiness. `handoff status --explain` describes an existing intent's stored evidence. Each processed SSH destination receives its own summary; an unexpected error can still stop the existing host loop before later destinations are processed. ```bash session-peer send --host worker --to 'codex:' --message "Review the patch" --dry-run --explain @@ -172,9 +174,11 @@ receipt; these flags introduce no structured JSON message-input protocol. -## Local route presets (development) + + +## Local route presets (v1.3.0) -Development for #324; unavailable in published v1.2.1. The opt-in `preset` commands remember routes, not recipients. Use `--preset` to select one saved local or SSH route for ordinary Claude Code or Codex listing/sending on Mac/Linux. Windows preset operations are refused; ordinary Windows commands remain unchanged. +Available in v1.3.0. The opt-in `preset` commands remember routes, not recipients. Use `--preset` to select one saved local or SSH route for ordinary Claude Code or Codex listing/sending on Mac/Linux. Windows preset operations are refused; ordinary Windows commands remain unchanged. ```bash session-peer preset add work-mac --host user@work-mac --agent codex --codex-home /Users/user/.codex @@ -209,9 +213,11 @@ Checked ancestors must be owned by root or the current user and not writable by On macOS, mounts that ignore ownership are refused with `preset_ownership_unenforced`; an unavailable or unverifiable mount query is refused with `preset_mount_unverifiable`. Mode bits alone are not treated as proof that ownership is enforced. On Linux, ACLs on ancestors are also refused, as are filesystems whose ACL state cannot be verified. After an interrupted management command, inspect the current configuration because the change may already be visible; directory-sync failures are not silently accepted. -### Recipient addressbook (development) + + +### Recipient addressbook (v1.3.0) -This additional #324 scope is a v1.3 candidate, not part of published v1.2.1. A route preset still stores only a route. The separate, opt-in addressbook binds a user-supplied label to an explicitly selected Claude Code or Codex recipient on a local or SSH Mac/Linux route. Labels do not authenticate people. Paired devices, Antigravity and Windows are refused. Commands without an explicit addressbook operation or `--address` do not read addressbook configuration; no automatic migration or fallback is added. +Available in v1.3.0. A route preset still stores only a route. The separate, opt-in addressbook binds a user-supplied label to an explicitly selected Claude Code or Codex recipient on a local or SSH Mac/Linux route. Labels do not authenticate people. Paired devices, Antigravity and Windows are refused. Commands without an explicit addressbook operation or `--address` do not read addressbook configuration; no automatic migration or fallback is added. ```bash session-peer address resolve --preset work-mac --to 'codex:' --json @@ -229,7 +235,7 @@ Replace placeholders with the exact reported values. Before `add`, inspect `addr Claude addresses retain the selected `tg1:` generation and use the existing connected-peer precondition before submission. Codex addresses retain a full thread UUID, exact home and `aw1:` writer observation, with existing checks repeated before the effect. Codex generation remains **unsupported**: writer observation and revalidation are not an atomic native incarnation guarantee. A changed or unavailable writer requires explicit reselection; no automatic retargeting or replay is attempted. SSH selection requires a host key verified on the actual connection and pins that same key for the actual send. This authenticates neither a person nor the identity of SSH configuration or SQLite storage. -An actual send requires both the current `--address-revision` and exact `--confirm-target`; dry-run may omit them. `--address` cannot be combined with `--to`, `--preset`, explicit host/native/SSH overrides, paired-device, wake, handoff or Reply-To URI routing. Normal message inputs and limits remain unchanged. Unknown outcomes never authorize automatic resend. These commands do not promise composition with the separate #323 delivery-explanation candidate. +An actual send requires both the current `--address-revision` and exact `--confirm-target`; dry-run may omit them. `--address` cannot be combined with `--to`, `--preset`, explicit host/native/SSH overrides, paired-device, wake, handoff or Reply-To URI routing. Normal message inputs and limits remain unchanged. Unknown outcomes never authorize automatic resend. Use `send --address NAME --dry-run --explain` with a normal message input for a text-only delivery preview. The JSON, wake and handoff restrictions above still apply. Storage is a separate `addresses.json` beside `destinations.json`, with `schemaVersion: 1`, a 64 KiB limit and at most 128 entries. It uses the same owner, permissions, ACL, mount and no-symlink-following checks as presets, without automatically repairing or migrating files. Address names follow the preset-name syntax; display labels are normalized to NFC and limited to 128 characters, rejecting control, bidirectional-control and format characters. An unconfirmed management commit may already be visible: inspect current configuration before retrying. Binding revisions do not add receiver deduplication, ACK or task-completion evidence. @@ -502,7 +508,9 @@ error, `2` CLI usage error or an unresolved target reported as no-target, and is an operational error (`1`); a missing saved thread during dry-run returns `2`. Exit `0` on send does not confirm consumption or a reply. -### Bounded handoff watch (v1.3 candidate) + + +### Bounded handoff watch (v1.3.0) ```sh session-peer handoff status --correlation-id PREPARED_UUID --json @@ -511,9 +519,11 @@ session-peer handoff watch --correlation-id PREPARED_UUID --watch-timeout 30 --i Use an existing prepared UUID in the local owner's POSIX ledger. Status remains one snapshot; watch polls for 1..60 seconds (default 30) at 1000..5000 millisecond intervals (default 1000), accepting ASCII integers only and taking at most 61 samples. Watch emits an initial snapshot only if the budget permits a valid public projection, then changed public metadata/historyPhase only; it may emit no snapshots. JSON watch output uses the common schemaVersion 1 NDJSON envelope with operation watch and event snapshot or end, nesting the unchanged handoff object in snapshots; status JSON is unchanged. Timeout completion is exit 0 for watch completion only, not ACK or wait success; SIGINT is 130, history/output failure 1, invalid arguments 2. Missing/corrupt history or ledgerEpoch change stops watching. historyPhase is prepared, attempted, terminal, tombstone or quarantined; attempted means a durable attempt fence, not active execution. -Watch is read-only: no intents, waits, receipts, ledger writes, submission or wake. It adds no host/device/Windows route or Codex ACK. Limits are 16 KiB per frame and 256 KiB total with a 2 KiB end reserve. Real-fd stdout uses one owned isolated output-only Python helper that sees only bounded public serialized bytes, never changes shared descriptor flags and reads no ledger/native data. The parent enforces the original total budget including IPC, checks it before new ledger read/validation stages, and reserves 100 ms within it for final output and cleanup, so sampling may end earlier. It terminates and reaps its helper on timeout, SIGINT or error; uninterruptible OS operations prevent a hard-real-time guarantee. Partial or unacknowledged writes prohibit subsequent/end frames; consumers must reject truncated final NDJSON lines. Helper completion means OS write completion, not recipient consumption. Snapshots are not a lossless event stream, and local UTC observations do not prove ACK arrival order. See the [handoff runtime guide](handoff-runtime.md) for privacy, retained submission/ACK/wait meanings, read-only collector queries and the existing quarantine gate. Watch launches no native message process or collector. This candidate is not a published release. No payload/capability digests are exposed; public targetGeneration keeps its existing contract. The read-only ledger releases its shared lock after reading immutable snapshot bytes, before parsing and validation. Interrupted final output and cleanup are capped at 100 ms within the remaining total budget. Overall success requires a complete successful end frame and exit 0: cleanup may fail after that frame. A nonzero exit means overall failure, without promoting ACK, discarding independently valid submission facts or permitting retry. +Watch is read-only: no intents, waits, receipts, ledger writes, submission or wake. It adds no host/device/Windows route or Codex ACK. Limits are 16 KiB per frame and 256 KiB total with a 2 KiB end reserve. Real-fd stdout uses one owned isolated output-only Python helper that sees only bounded public serialized bytes, never changes shared descriptor flags and reads no ledger/native data. The parent enforces the original total budget including IPC, checks it before new ledger read/validation stages, and reserves 100 ms within it for final output and cleanup, so sampling may end earlier. It terminates and reaps its helper on timeout, SIGINT or error; uninterruptible OS operations prevent a hard-real-time guarantee. Partial or unacknowledged writes prohibit subsequent/end frames; consumers must reject truncated final NDJSON lines. Helper completion means OS write completion, not recipient consumption. Snapshots are not a lossless event stream, and local UTC observations do not prove ACK arrival order. See the [handoff runtime guide](handoff-runtime.md) for privacy, retained submission/ACK/wait meanings, read-only collector queries and the existing quarantine gate. Watch launches no native message process or collector. No payload/capability digests are exposed; public targetGeneration keeps its existing contract. The read-only ledger releases its shared lock after reading immutable snapshot bytes, before parsing and validation. Interrupted final output and cleanup are capped at 100 ms within the remaining total budget. Overall success requires a complete successful end frame and exit 0: cleanup may fail after that frame. A nonzero exit means overall failure, without promoting ACK, discarding independently valid submission facts or permitting retry. + + -### Trusted local SSH configuration (v1.3 candidate, not published) +### Trusted local SSH configuration (v1.3.0) On Linux and macOS, an explicit local CLI invocation of `list`, `send`, `doctor`, or `update` with `--host` can select an existing OpenSSH configuration by pairing @@ -565,9 +575,11 @@ reply-URI destinations, and invocations without `--host` are rejected before reading the configuration or starting SSH. Omitting the pair preserves the existing default SSH behavior. -### One-time pairing links (v1.3 candidate) + + +### One-time pairing links (v1.3.0) -Both endpoints need `pairing-offer-v1` and the existing Unix Python 3.11+ relay extra. These are candidate commands, not published v1.3 support: +Both endpoints need `pairing-offer-v1` and the existing Unix Python 3.11+ relay extra. The following commands are available in v1.3.0: ```sh session-peer device rotation-status --state /private/client-state diff --git a/docs/handoff-runtime.md b/docs/handoff-runtime.md index 5142fbd..bdc7173 100644 --- a/docs/handoff-runtime.md +++ b/docs/handoff-runtime.md @@ -50,7 +50,7 @@ Status does not submit or wake, initialize or repair a ledger, mint receipt auth The collector clock query is also read-only. An older collector may reject that query, so `keep_waiting` may be absent from the available next actions; status does not fall back to a writing query or restart the collector. The ledger snapshot and optional collector clock observation are separate, not an atomic combined observation. After a wait fails with history_unavailable and the collector clock becomes available again, status now preserves known submission and that failed wait without offering keep_waiting. Other wait-creation semantics are unchanged. A tombstone's latest-wait detail is shown as unavailable due to expired history, not as evidence that no wait was requested. -Status remains a single local query. The v1.3 candidate adds bounded local watching below; Windows handoff and Codex ACK remain unsupported. [#296](https://github.com/abruption/session-peer/issues/296) remains open pending review and merge, and this candidate is not a published release. +Status remains a single local query. Version 1.3.0 adds bounded local watching below; Windows handoff and Codex ACK remain unsupported. See [#296](https://github.com/abruption/session-peer/issues/296) for the implementation history. ## Watch one request for a bounded period diff --git a/docs/i18n-manifest.json b/docs/i18n-manifest.json index 1dbb75a..da681c4 100644 --- a/docs/i18n-manifest.json +++ b/docs/i18n-manifest.json @@ -7,23 +7,20 @@ "zh-CN" ], "sources": { - "README.md": "9ccd334628d9bb03bba3a08d0fd67a46ab48124733e4cf0b6565f034680db441", - "RELEASING.md": "b2371ba9b2392e3b95394bb6bb3c2927b0c87ff3a8b307bc90defdad6f0ab8a6", - "SECURITY.md": "8f018f6f98002312e143609b9734aeb971ca5217e146597c06b57b5645031046", - "docs/README.md": "03a461054c1570741c2022685014a1b947f0234145b83f4c8297241d5edcf327", "docs/agent-adapters.md": "bf185d3121c94829bb412071a25c4d943302e10a6b2e713111e653b8f8c3ea91", "docs/ai-assistant-guide.md": "9624ec96b92fb688fae3be3c94cb3564c77985091be451fbf1f056a1af9b9d9c", "docs/antigravity.md": "f2b5122a0ce6e6fb5bd4d8ed50ce2c8bd2dc9c98ec8ce328405cf7c2cd24229d", "docs/architecture/agent-transports.md": "01a4e3942e87acb476595859f2e37f9653ea1e3bc19ebc68dced1adf20a6966f", - "docs/cli-reference.md": "7cfa6c096a6924068631730e0becb3127a8ab4e1bc41610fc5539f16638e67f6", + "docs/cli-reference.md": "1e192fd8e9975bd3cc50b67a417d320db349a33df771ef44362ae1ff1d9542dc", "docs/compatibility-v1.md": "7e551aad37a369faff7e370728376763efb54c2c9e9cfd8556a0c19aabc3d103", "docs/contracts/handoff-v1.md": "46a953010c49214bd8f969412f26713384fbe09a0ba78ebf0fef75da40d0d889", "docs/diagnostics.md": "0949e53612eeab2cd7c7bbda498e14d71e9cb1b1189aa7722030cb8702cd8481", "docs/download-metrics.md": "ded60e7b84d14ce779f8d639516b4e390358a06ef76b677dc9c1f997fb626a9f", - "docs/handoff-runtime.md": "80800abed85d4af1a2e2001448b39f6cf02ae12912cde0fde90c6863124e5220", + "docs/handoff-runtime.md": "a236e48392c91eca0f7c3734a6008a991955ae66d16fd71f97691aac5bf0091f", "docs/mcp.md": "a64010cdd63f2cde6a0052450bed2d05faa0f19c93c76143cb0d585d36f8ff62", "docs/multi-home-list.md": "f8d8e3adf727e4842ea7c4d45e8f6523b11d0513bf2509d4d1204645875e6489", - "docs/paired-devices.md": "fc174600f246292b3b877a2321e1a21861ce6e5fa5c586f56c89a0bd7181907b", + "docs/paired-devices.md": "08c2643d08f769deb725c6123193c1ea9593c775afde84a158a41fe6e7d1be82", + "docs/README.md": "03a461054c1570741c2022685014a1b947f0234145b83f4c8297241d5edcf327", "docs/relay-auth.md": "e6da5291ce6a9da31e79e66ceeff7e9fef7e95046359acbf04d708c96ffab62f", "docs/relay-development-plan.md": "0abf750b36275ea4e467a0020e560277f08689f2d574aed7674133705383b1ff", "docs/relay-edge-policy.md": "c1c7f7a1c4303943c78ca334dab4034f66c0c272e40c007d07c3da2a496155eb", @@ -52,9 +49,13 @@ "docs/releases/v1.1.2.md": "3ffe3d6daa8e403e9f3c5e83ec81c3afa9f10750627b31362990ec5b92326f3a", "docs/releases/v1.2.0.md": "9a153493fb3d25306306a05f6c1f5672d7d7becfe008f371770ce2d13d7e9b38", "docs/releases/v1.2.1.md": "70a3026c2d874a6fd7addcaef840ecfa84bf4f33a0165605217379acffa4fddb", + "docs/releases/v1.3.0.md": "2e468dcf868a59394b681a4bb73683683f08e2d2f51bbf6f76adb984b70d737b", "docs/validation/69-rc.md": "e490c6a9ad0fec9108b91c74922cedac7ddf214ed405f8f5523da22f48a4b222", "docs/validation/85-antigravity.md": "f89b175191cd98ab03d4029b487065133814b3c8dd8de8cd0a5cc367e2579e4f", "docs/wake.md": "cde135da2ea7be21c815bb265e694f737dbe467d8e76bb82eb118e3b86e29d22", - "plugins/session-peer/README.md": "a4eeae54caac9ad824d740f7f319561f060bc9c2bbbbf7def2bdd8e36dbcd1c6" + "plugins/session-peer/README.md": "a4eeae54caac9ad824d740f7f319561f060bc9c2bbbbf7def2bdd8e36dbcd1c6", + "README.md": "0141cec936141c2bb13283b29440ad5c398f38bbc27ddb20013ff5e46175dadc", + "RELEASING.md": "1cc2a3738078100de7c6c2600fb96bef58f00b1b8ce253509158d25068393c18", + "SECURITY.md": "8f018f6f98002312e143609b9734aeb971ca5217e146597c06b57b5645031046" } } diff --git a/docs/ja/cli-reference.md b/docs/ja/cli-reference.md index d776632..d608947 100644 --- a/docs/ja/cli-reference.md +++ b/docs/ja/cli-reference.md @@ -95,9 +95,11 @@ session-peer send --host worker --to 'codex:' --dry-run -m "me -### 配信説明(開発中) + -#323 の開発機能で、v1.3 の候補です。公開済み v1.2.1 には含まれません。`send --dry-run` に `--explain` を追加すると、選択したローカル・SSH・ペアリング済みデバイスの宛先、既存の検証結果、配信方法、観測上の制限を読みやすく表示します。`doctor --explain` は既存の診断スナップショットと宣言された対応機能を説明するもので、個々の宛先の送信準備状態を確認するものではありません。`handoff status --explain` は既存の intent に保存された証拠を説明します。処理した SSH の宛先ごとに説明を表示しますが、予期しないエラーが発生すると既存のホスト処理が中断され、後続の宛先が処理されない場合があります。 +### 配信説明(v1.3.0) + +v1.3.0 から利用できます。`send --dry-run` に `--explain` を追加すると、選択したローカル・SSH・ペアリング済みデバイスの宛先、既存の検証結果、配信方法、観測上の制限を読みやすく表示します。`doctor --explain` は既存の診断スナップショットと宣言された対応機能を説明するもので、個々の宛先の送信準備状態を確認するものではありません。`handoff status --explain` は既存の intent に保存された証拠を説明します。処理した SSH の宛先ごとに説明を表示しますが、予期しないエラーが発生すると既存のホスト処理が中断され、後続の宛先が処理されない場合があります。 ```bash session-peer send --host worker --to 'codex:' --message "Review the patch" --dry-run --explain @@ -162,9 +164,11 @@ session-peer list --output-format json -## ローカル経路プリセット(開発中) + + +## ローカル経路プリセット(v1.3.0) -#324 の開発機能であり、公開済み v1.2.1 には含まれません。任意の `preset` コマンドが保存するのは受信者ではなく接続経路です。Mac/Linux では `--preset` でローカルまたは SSH の経路を一つ選び、通常の Claude Code・Codex の一覧取得や送信に利用します。Windows のプリセット操作は拒否し、既存の Windows コマンドは変更しません。 +v1.3.0 から利用できます。任意の `preset` コマンドが保存するのは受信者ではなく接続経路です。Mac/Linux では `--preset` でローカルまたは SSH の経路を一つ選び、通常の Claude Code・Codex の一覧取得や送信に利用します。Windows のプリセット操作は拒否し、既存の Windows コマンドは変更しません。 ```bash session-peer preset add work-mac --host user@work-mac --agent codex --codex-home /Users/user/.codex @@ -199,9 +203,11 @@ UUID は現在の一覧で確認した値に、ハッシュは選択したプリ macOS で所有権を無視するマウントは `preset_ownership_unenforced`、マウント照会が利用できない、または検証できない場合は `preset_mount_unverifiable` で拒否します。モードビットだけを所有権が強制される証拠とは扱いません。Linux では上位経路の ACL も、ACL 状態を検証できないファイルシステムも拒否します。管理コマンドを中断した後は、変更が既に見えている可能性があるため現在の設定を確認してください。ディレクトリの同期失敗を黙って成功とは扱いません。 -### 受信先アドレス帳(開発中) + + +### 受信先アドレス帳(v1.3.0) -この #324 の追加範囲は v1.3 の候補で、公開済み v1.2.1 には含まれません。経路プリセットが保存するのは引き続き経路だけです。別途オプトインするアドレス帳は、ユーザーが付けた表示名を、ローカルまたは SSH の Mac/Linux 経路で明示的に選択した Claude Code・Codex の受信先に結び付けます。表示名は人物の身元を認証しません。ペアリング済みデバイス、Antigravity、Windows は拒否します。明示的なアドレス帳操作または `--address` がないコマンドはアドレス帳設定を読みません。自動移行や代替経路への切り替えは追加しません。 +v1.3.0 から利用できます。経路プリセットが保存するのは引き続き経路だけです。別途オプトインするアドレス帳は、ユーザーが付けた表示名を、ローカルまたは SSH の Mac/Linux 経路で明示的に選択した Claude Code・Codex の受信先に結び付けます。表示名は人物の身元を認証しません。ペアリング済みデバイス、Antigravity、Windows は拒否します。明示的なアドレス帳操作または `--address` がないコマンドはアドレス帳設定を読みません。自動移行や代替経路への切り替えは追加しません。 ```bash session-peer address resolve --preset work-mac --to 'codex:' --json @@ -219,7 +225,7 @@ session-peer address remove review --expect-revision 'ab1:' Claude アドレスは選択した `tg1:` 世代を保存し、投入前に既存の接続相手を検証する前提条件を適用します。Codex アドレスは完全なスレッド UUID、正確な home、`aw1:` writer 観測を保存し、副作用が発生する前に既存の検査を繰り返します。Codex の世代は引き続き**未対応**です。Writer の観測と再検証は、元の native インスタンス世代を原子的に検証する保証ではありません。Writer が変わった、または確認できない場合は明示的な再選択が必要で、自動的な宛先変更や再実行は行いません。SSH の選択には実際の接続で検証されたホスト鍵が必要で、実際の送信でも同じ鍵に固定します。これは人物を認証するものでも、SSH 設定や SQLite 保存先の同一性を証明するものでもありません。 -実際の送信には現在の `--address-revision` と正確な `--confirm-target` の両方が必要で、dry-run では省略できます。`--address` は `--to`、`--preset`、明示的なホスト・native・SSH の上書き、ペアリング済みデバイス、wake、handoff、Reply-To URI の経路指定とは併用できません。通常のメッセージ入力と上限は変わりません。不確実な結果でも自動再送は許可されません。これらのコマンドは、別途開発中の #323 配信説明機能との組み合わせを保証しません。 +実際の送信には現在の `--address-revision` と正確な `--confirm-target` の両方が必要で、dry-run では省略できます。`--address` は `--to`、`--preset`、明示的なホスト・native・SSH の上書き、ペアリング済みデバイス、wake、handoff、Reply-To URI の経路指定とは併用できません。通常のメッセージ入力と上限は変わりません。不確実な結果でも自動再送は許可されません。通常のメッセージ入力とともに `send --address NAME --dry-run --explain` を使うと、テキスト形式の配信プレビューを確認できます。上記の JSON・wake・handoff の制限は引き続き適用されます。 保存先は `destinations.json` の隣にある別の `addresses.json` です。`schemaVersion: 1`、64 KiB の上限、最大 128 件の項目を使用します。プリセットと同じ所有者・権限・ACL・マウントの検査と、シンボリックリンクをたどらない経路検査を適用し、ファイルの自動修復や移行は行いません。アドレス名はプリセット名の構文に従います。表示名は NFC に正規化して 128 文字に制限し、制御文字・双方向制御文字・書式文字を拒否します。管理操作の commit が未確認でも変更が既に見えている可能性があるため、再試行前に現在の設定を確認してください。結び付けの revision は、受信側の重複抑止、ACK、タスク完了の証拠を追加しません。 @@ -490,7 +496,9 @@ SSH `User` 設定に誘導し、再試行されることはありません。 dry-run 中の保存済みスレッドの欠落は `2` を返します。send における終了コード `0` は、 消費または返信を確認するものではありません。 -### 時間制限付き handoff 監視(v1.3 候補) + + +### 時間制限付き handoff 監視(v1.3.0) ```sh session-peer handoff status --correlation-id PREPARED_UUID --json @@ -499,9 +507,11 @@ session-peer handoff watch --correlation-id PREPARED_UUID --watch-timeout 30 --i ローカル所有者の POSIX 記録にある準備済み UUID を使用します。状態照会は単一スナップショットのままです。監視は 1..60 秒(既定 30)、1000..5000 ミリ秒間隔(既定 1000)で最大 61 回照会し、値は ASCII 整数のみ受け付けます。予算内に有効な公開結果を構成できる場合だけ最初のスナップショットを出力し、その後は公開メタデータ/historyPhase の変更だけを出力します。スナップショットが一つも出ない場合があります。JSON 監視出力は operation watch、event snapshot または end の共通 schemaVersion 1 NDJSON エンベロープを使い、スナップショットに従来の handoff オブジェクトを内包します。status JSON は変わりません。期限完了の終了コード 0 は監視の完了だけを表し、ACK や待機成功ではありません。SIGINT は 130、履歴・出力の失敗は 1、不正な引数は 2 です。履歴の欠落・破損や ledgerEpoch の変更で監視を終了します。 historyPhase は prepared、attempted、terminal、tombstone または quarantined です。attempted は永続的な試行フェンスを意味し、実行中を意味しません。 -監視は読み取り専用で、intent・待機・受領確認の作成、記録の書き込み、提出や起動を行いません。ホスト・機器・Windows 経路や Codex ACK は追加しません。フレームは 16 KiB、総量は 256 KiB に制限し、終了用に 2 KiB を予約します。実ファイル記述子の標準出力には専用の分離された Python 出力補助プロセスを一つ使用します。サイズ制限付きの直列化された公開バイトだけを受け取り、共有記述子フラグを変えず、記録やネイティブデータも読みません。親は IPC を含め元の総予算を適用し、新しい記録読み取り・検証段階の前にも期限を確認します。総時間内に最終出力と終了処理用の 100 ms を確保するため、照会は早めに終わる場合があります。タイムアウト、SIGINT、エラー時には補助プロセスを終了・回収しますが、中断不能な OS 操作の厳密リアルタイム保証ではありません。部分書き込みや完了応答がない場合は終了を含む後続フレームを禁止し、利用側は切れた最後の NDJSON 行を拒否する必要があります。補助プロセスの完了は OS 書き込み完了であり、受信者の消費ではありません。スナップショットは全イベントを欠落なく伝えるストリームではなく、ローカル UTC 観測は ACK 到着順序を証明しません。プライバシー、保持する提出・ACK・待機の意味、読み取り専用コレクター照会、従来の隔離の制約は [handoff ランタイムガイド](handoff-runtime.md)を参照してください。監視はネイティブメッセージプロセスやコレクターを起動しません。この候補は公開リリースではありません。 ペイロード・権限のダイジェストは公開せず、公開 targetGeneration の既存契約は維持します。 読み取り専用記録は不変のスナップショットバイトを読み終えた後、解析・検証の前に共有ロックを解放します。 中断時の最終出力と終了処理は、残りの総予算内で最大 100 ms に制限します。 全体の成功には完全な成功終了フレームと終了コード 0 の両方が必要です。そのフレームの後に終了処理が失敗する場合があります。非ゼロの終了は全体の失敗であり、ACK を格上げしたり、独立して有効な提出事実を捨てたり、再試行を許可したりするものではありません。 +監視は読み取り専用で、intent・待機・受領確認の作成、記録の書き込み、提出や起動を行いません。ホスト・機器・Windows 経路や Codex ACK は追加しません。フレームは 16 KiB、総量は 256 KiB に制限し、終了用に 2 KiB を予約します。実ファイル記述子の標準出力には専用の分離された Python 出力補助プロセスを一つ使用します。サイズ制限付きの直列化された公開バイトだけを受け取り、共有記述子フラグを変えず、記録やネイティブデータも読みません。親は IPC を含め元の総予算を適用し、新しい記録読み取り・検証段階の前にも期限を確認します。総時間内に最終出力と終了処理用の 100 ms を確保するため、照会は早めに終わる場合があります。タイムアウト、SIGINT、エラー時には補助プロセスを終了・回収しますが、中断不能な OS 操作の厳密リアルタイム保証ではありません。部分書き込みや完了応答がない場合は終了を含む後続フレームを禁止し、利用側は切れた最後の NDJSON 行を拒否する必要があります。補助プロセスの完了は OS 書き込み完了であり、受信者の消費ではありません。スナップショットは全イベントを欠落なく伝えるストリームではなく、ローカル UTC 観測は ACK 到着順序を証明しません。プライバシー、保持する提出・ACK・待機の意味、読み取り専用コレクター照会、従来の隔離の制約は [handoff ランタイムガイド](handoff-runtime.md)を参照してください。監視はネイティブメッセージプロセスやコレクターを起動しません。ペイロード・権限のダイジェストは公開せず、公開 targetGeneration の既存契約は維持します。 読み取り専用記録は不変のスナップショットバイトを読み終えた後、解析・検証の前に共有ロックを解放します。 中断時の最終出力と終了処理は、残りの総予算内で最大 100 ms に制限します。 全体の成功には完全な成功終了フレームと終了コード 0 の両方が必要です。そのフレームの後に終了処理が失敗する場合があります。非ゼロの終了は全体の失敗であり、ACK を格上げしたり、独立して有効な提出事実を捨てたり、再試行を許可したりするものではありません。 + + -### 信頼するローカル SSH 設定 (v1.3 候補、未公開) +### 信頼するローカル SSH 設定 (v1.3.0) Linux と macOS では、`--host` を指定したローカル CLI の `list`、`send`、`doctor`、`update` で、`--ssh-config ABSOLUTE_PATH` と `--trust-ssh-config` を併用して既存の OpenSSH 設定を選択できます。両方のフラグが必要です。次のパスは例であり、引用符で囲んだ空白も利用できます。 @@ -520,9 +530,11 @@ session-peer doctor --host worker --ssh-config '/home/alice/SSH Profiles/work.co 環境変数、MCP リクエスト、ReplyTo アドレス、保存済みプリセットからは選択できません。Windows、`setup`、ペアリング済みデバイス経路、プリセットとの併用、返信 URI 宛先、`--host` のない呼び出しは、設定を読む前および SSH 起動前に拒否します。両フラグを省略した場合は従来の既定 SSH 動作を維持します。 -### ワンタイムペアリングリンク(v1.3候補) + + +### ワンタイムペアリングリンク(v1.3.0) -両端で `pairing-offer-v1` と既存のUnix Python 3.11+ relay追加依存関係が必要です。以下は候補コマンドであり、公開済みのv1.3対応ではありません。 +両端で `pairing-offer-v1` と既存のUnix Python 3.11+ relay追加依存関係が必要です。以下のコマンドは v1.3.0 から利用できます。 ```sh session-peer device rotation-status --state /private/client-state diff --git a/docs/ja/handoff-runtime.md b/docs/ja/handoff-runtime.md index 5710e32..e1585e2 100644 --- a/docs/ja/handoff-runtime.md +++ b/docs/ja/handoff-runtime.md @@ -50,7 +50,7 @@ session-peer handoff status --correlation-id PREPARED_UUID コレクターの時計照会も読み取り専用です。古いコレクターはこの照会を拒否する場合があるため、次の操作に `keep_waiting` が含まれないことがあります。状態照会は書き込みを伴う照会へ切り替えたり、コレクターを再起動したりしません。記録のスナップショットと任意のコレクター時計の観測は別々であり、原子的にまとめて観測した証拠ではありません。待機が history_unavailable で失敗した後にコレクター時計を再び確認できる場合、状態照会は確認済みの提出と失敗した待機を保持し、keep_waiting を案内しません。ほかの待機作成の意味は変わりません。保持用記録の最新待機の詳細は、履歴の期限切れにより確認不可と表示し、待機が要求されなかった証拠とは扱いません。 -状態照会はローカルの単発照会のままです。v1.3 候補では以下の時間制限付きローカル監視を追加します。Windows handoff と Codex ACK は引き続き未対応です。[#296](https://github.com/abruption/session-peer/issues/296) はレビュー・マージまで未完了とし、この候補は公開リリースではありません。 +状態照会はローカルの単発照会のままです。v1.3.0 では以下の時間制限付きローカル監視を追加します。Windows handoff と Codex ACK は引き続き未対応です。実装の経緯は [#296](https://github.com/abruption/session-peer/issues/296) を参照してください。 ## 1 件の要求を一定時間監視する diff --git a/docs/ja/paired-devices.md b/docs/ja/paired-devices.md index 056da07..f7c7deb 100644 --- a/docs/ja/paired-devices.md +++ b/docs/ja/paired-devices.md @@ -50,9 +50,11 @@ session-peer setup --mode relay --interactive --role client --no-browser 受信側はデバイス認証前の直接接続を最大 16 本、Relay に attach された接続を最大 2 本まで許可し、認証済み接続 8 本とは別に管理します。TLS はネットワークとスケジューリングの遅延を含めて 2 秒以内に完了する必要があります。TLS 後、クライアント証明書のない初期ペアリング接続には、単一のペアリング要求と応答を完了するためにさらに 2 秒が与えられます。認証済み要求の期限は 45 秒のままです。この短い期限は正常な遅い接続も拒否する場合があります。アイドル状態または TLS が遅い直接ソケット 8 本があっても、ペアリング済みの直接接続と Relay 要求を受け付ける余地が残ります。ただし、認証前の直接接続枠 16 本がすべて埋まると、ペアリング済みの直接接続も拒否される可能性があり、予約された Relay 枠 2 本も飽和する場合があります。任意のフラッド攻撃に対する可用性は保証されません。超過ソケットや受信側のシャットダウン開始後のソケットには処理タスクを作成しません。集計した入場カウンターは ID を含めずに拒否とクリーンアップ失敗を保持します。明示的に有効化した `receiver_admission` イベントは、固定カウンターと許可リスト内の理由を 1 分に最大 1 回報告します。アプリケーションの自動再試行は有効になりません。 -## ワンタイムペアリングリンク(v1.3候補) + -以下は開発候補であり、公開済みのv1.3機能ではありません。両端で新しい `pairing-offer-v1` プロトコルが必要です。従来の非公開招待ファイルも引き続き使えます。既存のUnix Python 3.11+とrelay追加依存関係を使用し、Windows対応、仲介サービス、Webページ、公開待受ポートやホステッドサービスは追加しません。 +## ワンタイムペアリングリンク(v1.3.0) + +以下のリンク方式は v1.3.0 から利用できます。両端で新しい `pairing-offer-v1` プロトコルが必要です。従来の非公開招待ファイルも引き続き使えます。既存のUnix Python 3.11+とrelay追加依存関係を使用し、Windows対応、仲介サービス、Webページ、公開待受ポートやホステッドサービスは追加しません。 各端末を初期化し、信頼できる経路で公開IDを確認します。`device rotation-status` は安定した端末IDと現在の鍵のフィンガープリントを表示します。鍵の更新後には両者が異なる場合があります。受信対象のポリシーは別途確認してください。ペアリングは全セッションへのアクセス権を付与したり、ネイティブCLIの承認手順を変更したり、エージェントの実行を許可したりするものではありません。 diff --git a/docs/ja/releases/v1.3.0.md b/docs/ja/releases/v1.3.0.md new file mode 100644 index 0000000..90bbaa9 --- /dev/null +++ b/docs/ja/releases/v1.3.0.md @@ -0,0 +1,34 @@ +# v1.3.0 リリース準備 + +## ソースと公開状況 + +公開済み1.2.1を基準に2026-10-23に準備しました。本書はリリース範囲と検証条件を記録するもので、パッケージ公開の告知ではありません。公開記録は[GitHub Releases](https://github.com/abruption/session-peer/releases)と[PyPI](https://pypi.org/project/session-peer/)で確認してください。 + +統合ソースの基準は、バージョン準備コミットより前の `a0e7af032fd372334782cc3ac3d97b21c71dd797` です。機能PR6件は#329、#330、#331、#332、#325、#328の順にマージしました。この基準の[統合CI](https://github.com/abruption/session-peer/actions/runs/39905198747)と[CodeQL](https://github.com/abruption/session-peer/actions/runs/39905198891)は成功していますが、最終リリースコミットの検証に代わるものではありません。 + +## 含まれる変更 + +- #323 / #325: `send --dry-run --explain`、`doctor --explain`、`handoff status --explain`のテキスト説明。対応するペアリング先の準備状況を含め、既存の結果と記録済みの証拠を説明します。権限の付与や消費の証明ではありません。古い受信側では追加情報が不明のままになる場合があります。保存済みの受信確認の証拠と新しい観測は区別します。 +- #324 / #328: Mac/Linuxのlocal/SSH Claude Code・Codex向けに、任意の経路プリセットと独立した受信者アドレス帳を追加。実際のアドレス送信には現在の `--address-revision` と正確な `--confirm-target` が必要で、選択先とwriterを再確認します。revisionは人物の認証やnative世代・ストレージの原子的な一致の証明ではありません。Windows、ペアリング機器、Antigravityのアドレス帳操作は未対応です。 +- #296 / #329: 既存intentを観察する、時間制限付きPOSIX `handoff watch`。送信、再送、collector、新たな受信確認権限は作成しません。実験的handoffの範囲と既存の未対応チャネルは維持します。 +- #312 / #330: 明示的に信頼したSSH設定に対応。信頼した設定はローカルSSHコマンドを実行できるため、運用者による信頼判断が必要であり、sandboxではありません。既存の宛先確認と不確定な結果の扱いは維持します。 +- #212 / #331: 入力を表示しない端末入力と独立したフィンガープリント確認を使う、有効期限付き一回限りのペアリングリンクと設定案内。双方が対応ペアリングプロトコルと既存のUnix Relay要件を満たす必要があります。ペアリングは宛先ポリシーやnative承認に代わりません。保留中の申し出の取り消しは、完了したペアリングを失効させません。 +- #294 / #332: Mac/Linuxで、特定バージョンの自動ランタイム通知をローカルで非表示にし、明示的に解除する操作。管理はオフラインで行い、明示的な更新確認とスキル通知の既存動作は維持します。 + +正確な組み合わせ、プラットフォーム制限、エラー動作は[CLIリファレンス](../cli-reference.md)、[handoffガイド](../handoff-runtime.md)、[ペアリング機器ガイド](../paired-devices.md)を参照してください。統合変更には回帰テストの安定化と、期限切れRelay roomの利用可否判定の修正も含まれます。再実行の成功だけでは、過去の別の失敗の原因は特定できません。 + +## 互換性と残る作業 + +コアランタイムはPython 3.9+を維持します。任意のMCPはPython 3.10+、Unix/WSL Relay receiverはPython 3.11+が必要です。コアlocal/SSH利用に外部Python依存関係は追加しません。通常の送信結果は、消費、受信ACK、タスク完了と区別します。不確定な結果は自動再送を許可しません。 + +互換スキルコピーはcompanion 0.3.3、最小ランタイム0.9.1、案内範囲全体の基準1.0.1を維持します。companionの1.3案内は別途レビューする文書更新です。このランタイムの公開によってスキルがインストールまたは公開されるわけではありません。プラグインとTypeScriptのバージョンも独立しています。 + +Side Session・steering研究(#245/#247、Draft #246/#248)はLong-termに割り当てられ、リリース機能には含まれません。残るnative世代、handoff、ストレージ、起動時の受け入れ作業(#180/#181/#268/#304/#306/#307)は本リリースで完了しません。一般的なCodex ACK、最初の入力前の配信、Antigravity正式対応を新たに主張しません。 + +## リリース検証 + +準備PRの最新レビューとCI、その後の保護されたmainの正確なコミットでのCIと依存関係監査が必要です。生成された単独ファイルの一致、4言語の文書、パッケージ内容、新規インストールを確認します。ローカル統合・ビルド結果は事前検証であり、公開成果物や新たな実エージェント・プラットフォーム受け入れ検証ではありません。 + +承認済みのタグとドラフトを準備した後、preparation workflowとattach-draftジョブの成功を待ちます。公開前に、不変の成果物7件、`SHA256SUMS`、`release-provenance.json`、認証済みattestationを正確なタグとコミットに照合します。必須の人手によるPyPI環境承認は維持します。公開証拠は別途記録し、この固定文書を改訂するために不変の成果物を置き換えないでください。 + +パッケージ公開はControl/Relayサービスの配備やインストール済み機器の更新を含みません。運用への反映と実際の受け入れ検証は別です。 diff --git a/docs/ko/cli-reference.md b/docs/ko/cli-reference.md index 91492b5..e4f7698 100644 --- a/docs/ko/cli-reference.md +++ b/docs/ko/cli-reference.md @@ -96,9 +96,11 @@ session-peer send --host worker --to 'codex:' --dry-run -m "me -### 전달 설명 (개발 중) + -#323의 개발 기능으로 v1.3 후보이며, 공개 v1.2.1에는 없습니다. `send --dry-run`에 `--explain`을 추가하면 선택한 로컬·SSH·페어링 기기 대상, 기존 검증 결과, 전달 방식과 관찰 한계를 사람이 읽기 쉬운 형태로 표시합니다. `doctor --explain`은 기존 진단 스냅샷과 선언된 지원 기능을 설명하며, 특정 대상의 전송 준비 상태를 확인하지는 않습니다. `handoff status --explain`은 기존 intent에 저장된 증거를 설명합니다. 처리한 SSH 대상마다 개별 설명을 표시하지만, 예상치 못한 오류가 나면 기존 호스트 반복 처리가 중단되어 이후 대상은 처리하지 않을 수 있습니다. +### 전달 설명 (v1.3.0) + +v1.3.0부터 사용할 수 있습니다. `send --dry-run`에 `--explain`을 추가하면 선택한 로컬·SSH·페어링 기기 대상, 기존 검증 결과, 전달 방식과 관찰 한계를 사람이 읽기 쉬운 형태로 표시합니다. `doctor --explain`은 기존 진단 스냅샷과 선언된 지원 기능을 설명하며, 특정 대상의 전송 준비 상태를 확인하지는 않습니다. `handoff status --explain`은 기존 intent에 저장된 증거를 설명합니다. 처리한 SSH 대상마다 개별 설명을 표시하지만, 예상치 못한 오류가 나면 기존 호스트 반복 처리가 중단되어 이후 대상은 처리하지 않을 수 있습니다. ```bash session-peer send --host worker --to 'codex:' --message "Review the patch" --dry-run --explain @@ -162,9 +164,11 @@ session-peer list --output-format json -## 로컬 경로 프리셋 (개발 중) + + +## 로컬 경로 프리셋 (v1.3.0) -#324의 개발 기능이며 공개 v1.2.1에는 없습니다. 선택적으로 사용하는 `preset` 명령은 수신자가 아니라 접속 경로를 저장합니다. Mac/Linux에서 `--preset`으로 로컬 또는 SSH 경로 하나를 골라 일반 Claude Code·Codex 목록 조회나 전송에 사용합니다. Windows의 프리셋 작업은 거부하며 기존 Windows 명령은 바꾸지 않습니다. +v1.3.0부터 사용할 수 있습니다. 선택적으로 사용하는 `preset` 명령은 수신자가 아니라 접속 경로를 저장합니다. Mac/Linux에서 `--preset`으로 로컬 또는 SSH 경로 하나를 골라 일반 Claude Code·Codex 목록 조회나 전송에 사용합니다. Windows의 프리셋 작업은 거부하며 기존 Windows 명령은 바꾸지 않습니다. ```bash session-peer preset add work-mac --host user@work-mac --agent codex --codex-home /Users/user/.codex @@ -199,9 +203,11 @@ UUID는 현재 목록에서 확인한 값으로, 해시는 선택한 프리셋 Mac에서 소유권을 무시하는 마운트는 `preset_ownership_unenforced`로, 마운트 조회를 수행하거나 검증할 수 없으면 `preset_mount_unverifiable`로 거부합니다. 파일 모드만으로 소유권 강제를 증명했다고 취급하지 않습니다. Linux에서는 상위 경로의 ACL도 거부하며 ACL 상태를 검증할 수 없는 파일시스템도 거부합니다. 관리 명령을 중단했을 때는 변경이 이미 보일 수 있으므로 현재 설정을 확인하세요. 디렉터리 동기화 실패를 조용히 성공으로 처리하지 않습니다. -### 수신 대상 주소록 (개발 중) + + +### 수신 대상 주소록 (v1.3.0) -이 추가 #324 범위는 v1.3 후보이며 공개 v1.2.1에는 없습니다. 경로 프리셋은 계속 경로만 저장합니다. 별도로 선택해 사용하는 주소록은 사용자 지정 표시 이름을 로컬 또는 SSH Mac/Linux 경로에서 명시적으로 선택한 Claude Code·Codex 수신 대상에 연결합니다. 표시 이름은 사람의 신원을 인증하지 않습니다. 페어링 기기, Antigravity와 Windows는 거부합니다. 명시적인 주소록 작업이나 `--address`가 없는 명령은 주소록 설정을 읽지 않으며, 자동 이전이나 대체 경로 시도를 추가하지 않습니다. +v1.3.0부터 사용할 수 있습니다. 경로 프리셋은 계속 경로만 저장합니다. 별도로 선택해 사용하는 주소록은 사용자 지정 표시 이름을 로컬 또는 SSH Mac/Linux 경로에서 명시적으로 선택한 Claude Code·Codex 수신 대상에 연결합니다. 표시 이름은 사람의 신원을 인증하지 않습니다. 페어링 기기, Antigravity와 Windows는 거부합니다. 명시적인 주소록 작업이나 `--address`가 없는 명령은 주소록 설정을 읽지 않으며, 자동 이전이나 대체 경로 시도를 추가하지 않습니다. ```bash session-peer address resolve --preset work-mac --to 'codex:' --json @@ -219,7 +225,7 @@ session-peer address remove review --expect-revision 'ab1:' Claude 주소는 선택한 `tg1:` 세대를 저장하고 제출 전에 기존 연결 상대 확인 조건을 적용합니다. Codex 주소는 전체 스레드 UUID, 정확한 home과 `aw1:` writer 관찰을 저장하며 효과가 발생하기 전에 기존 검사를 반복합니다. Codex 세대는 계속 **미지원**입니다. Writer 관찰과 재검증은 원래 native 인스턴스 세대를 원자적으로 검증하는 보장이 아닙니다. Writer가 달라지거나 확인할 수 없으면 명시적으로 다시 선택해야 하며, 자동 대상 변경이나 재실행은 하지 않습니다. SSH 선택은 실제 연결에서 검증한 호스트 키를 요구하며 실제 전송에도 같은 키를 고정합니다. 이것으로 사람을 인증하거나 SSH 설정·SQLite 저장소의 동일성을 증명하지는 않습니다. -실제 전송에는 현재 `--address-revision`과 정확한 `--confirm-target`이 모두 필요하며 dry-run에서는 생략할 수 있습니다. `--address`는 `--to`, `--preset`, 명시적 호스트·native·SSH 재정의, 페어링 기기, wake, handoff나 Reply-To URI 경로와 함께 사용할 수 없습니다. 일반 메시지 입력과 한도는 그대로 유지됩니다. 결과가 불확실해도 자동 재전송은 허용되지 않습니다. 이 명령들은 별도의 #323 전달 설명 후보 기능과의 조합을 보장하지 않습니다. +실제 전송에는 현재 `--address-revision`과 정확한 `--confirm-target`이 모두 필요하며 dry-run에서는 생략할 수 있습니다. `--address`는 `--to`, `--preset`, 명시적 호스트·native·SSH 재정의, 페어링 기기, wake, handoff나 Reply-To URI 경로와 함께 사용할 수 없습니다. 일반 메시지 입력과 한도는 그대로 유지됩니다. 결과가 불확실해도 자동 재전송은 허용되지 않습니다. 일반 메시지 입력과 함께 `send --address NAME --dry-run --explain`을 사용하면 텍스트 전달 미리보기를 볼 수 있습니다. 위의 JSON·wake·handoff 제한은 그대로 적용됩니다. 저장소는 `destinations.json` 옆의 별도 `addresses.json`이며 `schemaVersion: 1`, 64 KiB 한도와 최대 128개 항목을 사용합니다. 프리셋과 같은 소유자·권한·ACL·마운트 검사 및 심볼릭 링크를 따르지 않는 경로 검사를 적용하고 파일을 자동 복구하거나 이전하지 않습니다. 주소 이름은 프리셋 이름 문법을 따릅니다. 표시 이름은 NFC로 정규화하고 128자로 제한하며 제어 문자·양방향 제어 문자·서식 문자를 거부합니다. 관리 작업의 commit을 확인하지 못했어도 변경이 이미 보일 수 있으므로 재시도 전에 현재 설정을 확인하세요. 수신자 바인딩 revision은 수신 측 중복 방지, ACK나 작업 완료 증거를 추가하지 않습니다. @@ -489,7 +495,9 @@ Host web-01 포함한 Codex 큐 거부는 운영 오류(`1`)입니다. dry-run 중 저장된 스레드가 누락된 경우 `2`를 반환합니다. 전송 시의 종료 코드 `0`은 소비나 응답을 확인해주지 않습니다. -### 시간 제한 handoff 감시(v1.3 후보) + + +### 시간 제한 handoff 감시(v1.3.0) ```sh session-peer handoff status --correlation-id PREPARED_UUID --json @@ -498,9 +506,11 @@ session-peer handoff watch --correlation-id PREPARED_UUID --watch-timeout 30 --i 로컬 소유자의 POSIX 기록에 있는 기존 준비 UUID를 사용합니다. 상태 조회는 단일 스냅샷을 유지하며 감시는 1..60초(기본 30) 동안 1000..5000밀리초 간격(기본 1000)으로 최대 61번 조회합니다. 두 값은 ASCII 정수만 허용합니다. 감시는 예산 안에 유효한 공개 결과를 구성할 수 있을 때만 최초 스냅샷을 출력하고 이후 공개 메타데이터/historyPhase가 바뀐 경우만 출력하므로 스냅샷이 없을 수도 있습니다. JSON 감시는 operation watch와 event snapshot 또는 end인 공통 schemaVersion 1 NDJSON 봉투를 사용하고 스냅샷에 기존 handoff 객체를 포함하며 status JSON은 유지합니다. 기한 종료의 코드 0은 감시 완료만 뜻하고 ACK나 대기 성공은 아닙니다. SIGINT는 130, 기록·출력 실패는 1, 잘못된 인자는 2입니다. 기록 부재·손상이나 ledgerEpoch 변경 시 감시를 중단합니다. historyPhase는 prepared, attempted, terminal, tombstone 또는 quarantined이며 attempted는 영속적인 시도 방지 기록을 뜻하고 실행 중이라는 의미는 아닙니다. -감시는 읽기 전용이며 의도·대기·수신 확인 생성, 기록 쓰기, 제출·깨우기를 수행하지 않습니다. 호스트·기기·Windows 경로나 Codex ACK를 추가하지 않습니다. 프레임은 16 KiB, 전체는 256 KiB로 제한하고 종료용 2 KiB를 남깁니다. 실제 파일 디스크립터 표준 출력에는 전용 격리 Python 출력 보조 프로세스 하나를 사용합니다. 크기가 제한된 직렬화된 공개 바이트만 받고 공유 디스크립터 플래그를 바꾸거나 기록·네이티브 데이터를 읽지 않습니다. 부모는 IPC까지 원래 총예산으로 제한하고 새 기록 읽기·검증 단계 전에도 기한을 확인합니다. 총 시간 안에서 최종 출력·정리에 100 ms를 남기므로 조회는 더 일찍 끝날 수 있습니다. 시간 초과·SIGINT·오류 시 보조 프로세스를 종료·회수합니다. 다만 중단할 수 없는 OS 작업이 있어 엄격한 실시간 보장을 제공하지는 못합니다. 부분 쓰기나 완료 응답 부재 시 종료를 포함한 후속 프레임을 금지하며 소비자는 잘린 마지막 NDJSON 줄을 거부해야 합니다. 보조 프로세스 완료는 OS 쓰기 완료이며 수신자 소비의 증거가 아닙니다. 스냅샷은 모든 이벤트를 빠짐없이 전달하는 스트림이 아니며 로컬 UTC 관측은 ACK 도착 순서의 증거가 아닙니다. 개인정보, 유지되는 제출·ACK·대기의 의미, 읽기 전용 수집기 조회와 기존 격리 조건은 [handoff 런타임 가이드](handoff-runtime.md)를 참고하세요. 감시는 네이티브 메시지 프로세스나 수집기를 시작하지 않습니다. 이 후보는 배포된 릴리스가 아닙니다. 페이로드·권한 다이제스트를 노출하지 않으며 공개 targetGeneration의 기존 계약은 유지합니다. 읽기 전용 기록은 불변 스냅샷 바이트를 읽은 뒤 파싱·검증 전에 공유 잠금을 해제합니다. 중단 시 최종 출력·정리는 남은 총예산 안에서 최대 100 ms로 제한합니다. 전체 성공에는 완전한 성공 종료 프레임과 종료 코드 0이 모두 필요합니다. 해당 프레임 뒤에도 정리가 실패할 수 있습니다. 0이 아닌 종료는 전체 실패이며 ACK를 상향 해석하거나 독립적으로 유효한 제출 사실을 버리거나 재시도해도 된다는 뜻은 아닙니다. +감시는 읽기 전용이며 의도·대기·수신 확인 생성, 기록 쓰기, 제출·깨우기를 수행하지 않습니다. 호스트·기기·Windows 경로나 Codex ACK를 추가하지 않습니다. 프레임은 16 KiB, 전체는 256 KiB로 제한하고 종료용 2 KiB를 남깁니다. 실제 파일 디스크립터 표준 출력에는 전용 격리 Python 출력 보조 프로세스 하나를 사용합니다. 크기가 제한된 직렬화된 공개 바이트만 받고 공유 디스크립터 플래그를 바꾸거나 기록·네이티브 데이터를 읽지 않습니다. 부모는 IPC까지 원래 총예산으로 제한하고 새 기록 읽기·검증 단계 전에도 기한을 확인합니다. 총 시간 안에서 최종 출력·정리에 100 ms를 남기므로 조회는 더 일찍 끝날 수 있습니다. 시간 초과·SIGINT·오류 시 보조 프로세스를 종료·회수합니다. 다만 중단할 수 없는 OS 작업이 있어 엄격한 실시간 보장을 제공하지는 못합니다. 부분 쓰기나 완료 응답 부재 시 종료를 포함한 후속 프레임을 금지하며 소비자는 잘린 마지막 NDJSON 줄을 거부해야 합니다. 보조 프로세스 완료는 OS 쓰기 완료이며 수신자 소비의 증거가 아닙니다. 스냅샷은 모든 이벤트를 빠짐없이 전달하는 스트림이 아니며 로컬 UTC 관측은 ACK 도착 순서의 증거가 아닙니다. 개인정보, 유지되는 제출·ACK·대기의 의미, 읽기 전용 수집기 조회와 기존 격리 조건은 [handoff 런타임 가이드](handoff-runtime.md)를 참고하세요. 감시는 네이티브 메시지 프로세스나 수집기를 시작하지 않습니다. 페이로드·권한 다이제스트를 노출하지 않으며 공개 targetGeneration의 기존 계약은 유지합니다. 읽기 전용 기록은 불변 스냅샷 바이트를 읽은 뒤 파싱·검증 전에 공유 잠금을 해제합니다. 중단 시 최종 출력·정리는 남은 총예산 안에서 최대 100 ms로 제한합니다. 전체 성공에는 완전한 성공 종료 프레임과 종료 코드 0이 모두 필요합니다. 해당 프레임 뒤에도 정리가 실패할 수 있습니다. 0이 아닌 종료는 전체 실패이며 ACK를 상향 해석하거나 독립적으로 유효한 제출 사실을 버리거나 재시도해도 된다는 뜻은 아닙니다. + + -### 신뢰하는 로컬 SSH 설정 (v1.3 후보, 미출시) +### 신뢰하는 로컬 SSH 설정 (v1.3.0) Linux와 macOS에서는 `--host`를 지정한 로컬 CLI의 `list`, `send`, `doctor`, `update` 호출에서 `--ssh-config ABSOLUTE_PATH`와 `--trust-ssh-config`를 함께 사용해 기존 OpenSSH 설정을 선택할 수 있습니다. 두 플래그가 모두 필요합니다. 다음은 예시 경로이며, 따옴표로 감싼 공백도 지원합니다. @@ -519,9 +529,11 @@ session-peer doctor --host worker --ssh-config '/home/alice/SSH Profiles/work.co 환경 변수, MCP 요청, ReplyTo 주소, 저장된 프리셋에서는 이 모드를 선택할 수 없습니다. Windows, `setup`, 페어링된 기기 경로, 프리셋 조합, 응답 URI 대상, `--host` 없는 호출은 설정을 읽거나 SSH를 시작하기 전에 거부됩니다. 두 플래그를 생략하면 기존 기본 SSH 동작을 유지합니다. -### 일회용 페어링 링크(v1.3 후보) + + +### 일회용 페어링 링크(v1.3.0) -양쪽 기기에 `pairing-offer-v1`과 기존 Unix Python 3.11+ relay 추가 의존성이 필요합니다. 다음은 후보 명령이며 공개된 v1.3 지원이 아닙니다. +양쪽 기기에 `pairing-offer-v1`과 기존 Unix Python 3.11+ relay 추가 의존성이 필요합니다. 다음 명령은 v1.3.0부터 사용할 수 있습니다. ```sh session-peer device rotation-status --state /private/client-state diff --git a/docs/ko/handoff-runtime.md b/docs/ko/handoff-runtime.md index 032b30b..deed33c 100644 --- a/docs/ko/handoff-runtime.md +++ b/docs/ko/handoff-runtime.md @@ -50,7 +50,7 @@ session-peer handoff status --correlation-id PREPARED_UUID 수집기의 시계 조회도 읽기 전용입니다. 이전 수집기는 이 조회를 거부할 수 있어 가능한 다음 조치에 `keep_waiting`이 없을 수 있습니다. 이때 상태 조회는 기록을 쓰는 질의로 전환하거나 수집기를 재시작하지 않습니다. 기록 스냅샷과 선택적 수집기 시계 관측은 별도이며, 원자적으로 함께 관측한 증거가 아닙니다. 대기가 history_unavailable로 실패한 뒤 수집기 시계를 다시 확인할 수 있게 된 경우, 이제 상태 조회는 확인된 제출과 실패한 대기를 보존하면서 keep_waiting을 안내하지 않습니다. 다른 대기 생성 의미는 바꾸지 않습니다. 보존 표식의 최신 대기 상세는 만료된 기록으로 인해 확인 불가로 표시하며, 대기를 요청하지 않았다는 증거로 해석하지 않습니다. -상태 조회는 로컬 단일 조회를 유지합니다. v1.3 후보에는 아래의 시간 제한 로컬 감시가 추가되며, Windows handoff와 Codex ACK는 여전히 미지원입니다. [#296](https://github.com/abruption/session-peer/issues/296)은 검토·병합 전까지 열어두며 이 후보는 배포된 릴리스가 아닙니다. +상태 조회는 로컬 단일 조회를 유지합니다. v1.3.0에는 아래의 시간 제한 로컬 감시가 추가되며, Windows handoff와 Codex ACK는 여전히 미지원입니다. 구현 이력은 [#296](https://github.com/abruption/session-peer/issues/296)을 참고하세요. ## 요청 한 건을 정해진 시간 동안 감시 diff --git a/docs/ko/paired-devices.md b/docs/ko/paired-devices.md index 96ebb68..76356d9 100644 --- a/docs/ko/paired-devices.md +++ b/docs/ko/paired-devices.md @@ -50,9 +50,11 @@ probe·목록 메타데이터만 사용하며 소비·ACK·실행 승인·가용 수신자는 기기 인증 전 직접 연결을 최대 16개, Relay에 attach된 연결을 최대 2개 허용하며, 인증된 연결 8개와 별도로 관리합니다. TLS는 네트워크 및 스케줄링 지연을 포함해 2초 안에 완료해야 합니다. TLS 이후 클라이언트 인증서가 없는 초기 페어링 연결에는 단일 페어링 요청과 응답을 완료할 추가 2초가 주어지며, 인증된 요청의 제한 시간은 45초로 유지됩니다. 이 짧은 제한 시간은 정상적인 느린 연결도 거부할 수 있습니다. 유휴 또는 느린 TLS 직접 소켓 8개가 있어도 페어링된 직접 연결과 Relay 요청을 받을 여유가 남습니다. 그러나 직접 연결의 인증 전 슬롯 16개가 모두 차면 페어링된 직접 연결도 거부될 수 있고, 예약된 Relay 슬롯 2개도 포화될 수 있으므로 임의의 홍수 공격에서 가용성을 보장하지 않습니다. 초과 소켓과 수신자 종료가 시작된 뒤의 소켓에는 처리 태스크를 만들지 않습니다. 집계 입장 카운터는 신원 없이 거부 및 정리 실패를 보존하며, 명시적으로 켠 `receiver_admission` 이벤트는 고정 카운터와 허용 목록의 사유를 분당 최대 한 번 보고합니다. 애플리케이션 자동 재시도는 활성화되지 않습니다. -## 일회용 페어링 링크(v1.3 후보) + -아래 링크 방식은 개발 후보이며 아직 공개된 v1.3 기능이 아닙니다. 양쪽 기기가 새 `pairing-offer-v1` 프로토콜을 지원해야 합니다. 기존 비공개 초대장 파일 방식도 유지합니다. 기존 Unix Python 3.11+와 relay 추가 의존성을 사용하며 Windows 지원, 중계 서비스, 웹 페이지, 공개 수신 포트나 호스팅 서비스를 새로 제공하지 않습니다. +## 일회용 페어링 링크(v1.3.0) + +아래 링크 방식은 v1.3.0부터 사용할 수 있습니다. 양쪽 기기가 새 `pairing-offer-v1` 프로토콜을 지원해야 합니다. 기존 비공개 초대장 파일 방식도 유지합니다. 기존 Unix Python 3.11+와 relay 추가 의존성을 사용하며 Windows 지원, 중계 서비스, 웹 페이지, 공개 수신 포트나 호스팅 서비스를 새로 제공하지 않습니다. 먼저 각 기기를 초기화하고 신뢰할 수 있는 경로로 공개 신원을 확인합니다. `device rotation-status`는 고정 기기 식별자와 현재 키 지문을 함께 표시합니다. 키 교체 후에는 두 값이 다를 수 있습니다. 수신 대상 정책은 별도로 검토해야 합니다. 페어링은 모든 세션의 접근 권한을 주거나 네이티브 CLI의 승인 절차를 바꾸거나 에이전트 실행을 승인하지 않습니다. diff --git a/docs/ko/releases/v1.3.0.md b/docs/ko/releases/v1.3.0.md new file mode 100644 index 0000000..bf32c11 --- /dev/null +++ b/docs/ko/releases/v1.3.0.md @@ -0,0 +1,34 @@ +# v1.3.0 릴리스 준비 + +## 소스와 공개 상태 + +공개된 1.2.1을 기준으로 2026-10-23에 준비했습니다. 이 문서는 릴리스 범위와 검증 조건을 기록하며 패키지 공개를 알리는 문서가 아닙니다. 공개 기록은 [GitHub Releases](https://github.com/abruption/session-peer/releases)와 [PyPI](https://pypi.org/project/session-peer/)에서 확인하십시오. + +통합 소스 기준은 버전 준비 커밋 이전의 `a0e7af032fd372334782cc3ac3d97b21c71dd797`입니다. 기능 PR 6개는 #329, #330, #331, #332, #325, #328 순서로 병합했습니다. 이 기준의 [통합 CI](https://github.com/abruption/session-peer/actions/runs/39905198747)와 [CodeQL](https://github.com/abruption/session-peer/actions/runs/39905198891)은 통과했지만 최종 릴리스 커밋의 검증을 대신하지는 않습니다. + +## 포함된 변경 + +- #323 / #325: `send --dry-run --explain`, `doctor --explain`, `handoff status --explain`의 텍스트 설명을 추가했습니다. 지원되는 페어링 대상의 준비 상태를 포함하여 기존 결과와 기록된 근거를 설명하며, 권한을 부여하거나 소비를 증명하지 않습니다. 구형 수신자의 추가 정보는 확인 불가로 남을 수 있습니다. 저장된 수신 확인 근거와 새 관측은 구분합니다. +- #324 / #328: Mac/Linux의 local/SSH Claude Code·Codex를 위한 선택적 경로 프리셋과 별도 수신자 주소록을 추가했습니다. 실제 주소록 전송에는 현재 `--address-revision`과 정확한 `--confirm-target`이 필요하며 선택 대상과 writer를 다시 검사합니다. revision은 사람의 신원을 인증하거나 native 세대·저장소의 원자적 일치를 증명하지 않습니다. Windows·페어링 기기·Antigravity 주소록 작업은 지원하지 않습니다. +- #296 / #329: 기존 intent를 관찰하는 유한 시간 POSIX `handoff watch`를 추가했습니다. 제출·재전송·collector·새 수신 확인 권한을 만들지 않습니다. 실험적 handoff의 범위와 기존 미지원 채널은 유지합니다. +- #312 / #330: 명시적으로 신뢰한 SSH 설정을 지원합니다. 신뢰한 설정은 로컬 SSH 명령을 실행할 수 있으므로 운영자가 신뢰 여부를 판단해야 하며 sandbox가 아닙니다. 기존 대상 검사와 불확실한 결과 처리는 유지합니다. +- #212 / #331: 숨김 터미널 입력과 별도 지문 확인을 사용하는 만료·일회용 페어링 링크와 안내형 설정을 추가했습니다. 양쪽은 지원되는 페어링 프로토콜과 기존 Unix Relay 요건을 충족해야 합니다. 페어링은 대상 정책이나 native 승인을 대신하지 않으며, 대기 중인 제안 취소는 완료된 페어링을 폐기하지 않습니다. +- #294 / #332: Mac/Linux에서 특정 버전의 자동 런타임 알림을 로컬로 숨기고 명시적으로 해제할 수 있습니다. 관리 작업은 오프라인이며 명시적 업데이트 확인과 스킬 알림의 기존 동작은 유지합니다. + +정확한 조합·플랫폼 제한·오류 동작은 [CLI 안내](../cli-reference.md), [handoff 안내](../handoff-runtime.md), [페어링 기기 안내](../paired-devices.md)를 참고하십시오. 통합 변경에는 회귀 테스트 안정화와 만료된 Relay room의 사용 가능 여부 검사 수정도 포함됩니다. 재실행 통과만으로 이전의 별도 실패 원인이 밝혀지는 것은 아닙니다. + +## 호환성과 남은 작업 + +핵심 런타임은 Python 3.9+를 유지합니다. 선택적 MCP는 Python 3.10+, Unix/WSL Relay receiver는 Python 3.11+가 필요합니다. 핵심 local/SSH 사용에 외부 Python 의존성을 추가하지 않습니다. 일반 제출 결과는 소비·수신 ACK·작업 완료와 구분합니다. 불확실한 결과는 자동 재전송을 허용하지 않습니다. + +호환 스킬 사본은 companion 0.3.3이며 최소 런타임 0.9.1, 전체 안내 범위 기준 1.0.1을 유지합니다. companion의 1.3 안내는 별도로 검토하는 문서 변경입니다. 이 런타임의 공개가 해당 스킬의 설치나 공개를 뜻하지 않습니다. 플러그인과 TypeScript 버전도 독립적입니다. + +Side Session·steering 연구(#245/#247, Draft #246/#248)는 Long-term에 배정했으며 릴리스 기능이 아닙니다. 남은 native 세대·handoff·저장소·시작 시점 수락 조건(#180/#181/#268/#304/#306/#307)은 이 릴리스로 완료되지 않습니다. 일반 Codex ACK·첫 입력 전 전달·Antigravity 정식 지원을 새로 주장하지 않습니다. + +## 릴리스 검증 + +준비 PR의 최신 리뷰·CI와 이후 보호된 main의 정확한 커밋에서 CI·의존성 감사를 통과해야 합니다. 생성된 독립 실행 파일의 일치, 4개 언어 문서, 패키지 내용과 신규 설치를 확인합니다. 로컬 통합·빌드 결과는 사전 검증 자료이며 공개 산출물이나 새로운 실제 에이전트·플랫폼 수락 검증이 아닙니다. + +승인된 태그와 초안을 준비한 뒤 preparation workflow와 attach-draft 작업의 성공을 기다립니다. 공개 전에 불변 산출물 7개, `SHA256SUMS`, `release-provenance.json`, 인증된 attestation을 정확한 태그·커밋과 대조합니다. 사람이 수행하는 필수 PyPI 환경 승인은 유지합니다. 공개 증거는 별도로 기록하고, 고정된 이 문서를 수정하려고 불변 산출물을 교체하지 않습니다. + +패키지 공개는 Control/Relay 서비스 배포나 설치된 기기의 업데이트를 포함하지 않습니다. 운영 적용과 실제 수락 검증은 별개입니다. diff --git a/docs/paired-devices.md b/docs/paired-devices.md index aa63b51..7fcea1a 100644 --- a/docs/paired-devices.md +++ b/docs/paired-devices.md @@ -73,9 +73,11 @@ admission counters retain refusals and cleanup failures without identities; opt-in `receiver_admission` events report fixed counters and allowlisted reasons at most once per minute. No automatic application retry is enabled. -## One-time pairing links (v1.3 candidate) + -The link workflow below is a development candidate, not a published v1.3 release. Both endpoints need the new `pairing-offer-v1` protocol. Existing private invitation files remain supported. This feature uses the existing Unix Python 3.11+ relay extra; it adds no Windows support, broker, web page, public listener or hosted service. +## One-time pairing links (v1.3.0) + +The link workflow below is available in v1.3.0. Both endpoints need the new `pairing-offer-v1` protocol. Existing private invitation files remain supported. This feature uses the existing Unix Python 3.11+ relay extra; it adds no Windows support, broker, web page, public listener or hosted service. First initialize each endpoint and exchange their public identities through a trusted channel. `device rotation-status` shows the current key fingerprint as well as the stable device principal. These may differ after rotation. Review the receiving target policy separately: pairing does not grant access to every session, change native approvals or authorize agent execution. diff --git a/docs/releases/v1.3.0.md b/docs/releases/v1.3.0.md new file mode 100644 index 0000000..86d4597 --- /dev/null +++ b/docs/releases/v1.3.0.md @@ -0,0 +1,34 @@ +# v1.3.0 release preparation + +## Source and publication status + +Prepared on 2026-10-23 against published 1.2.1. This document records the release scope and verification gates; it does not announce package availability. Check [GitHub Releases](https://github.com/abruption/session-peer/releases) and [PyPI](https://pypi.org/project/session-peer/) for publication records. + +The integrated source base is `a0e7af032fd372334782cc3ac3d97b21c71dd797`, before the version-preparation commit. The six feature PRs were merged in this order: #329, #330, #331, #332, #325, #328. [Integrated CI](https://github.com/abruption/session-peer/actions/runs/39905198747) and [CodeQL](https://github.com/abruption/session-peer/actions/runs/39905198891) passed for that base; they do not substitute for checks on the final release commit. + +## Included changes + +- #323 / #325: text explanations for `send --dry-run --explain`, `doctor --explain` and `handoff status --explain`. They describe existing results and recorded evidence, including supported paired readiness context, without granting permission or proving consumption. An old receiver may leave context unknown. Stored receipt evidence is distinct from a new observation. +- #324 / #328: optional route presets and a separate recipient addressbook for local/SSH Claude Code and Codex on Mac/Linux. Actual address sends require the current `--address-revision` and exact `--confirm-target`; selection and writer checks are repeated. Revisions do not authenticate people or prove atomic native generation or storage identity. Windows, paired-device and Antigravity addressbook operations remain unsupported. +- #296 / #329: bounded POSIX `handoff watch` observes an existing intent. It does not create a submission, resend, collector or new receipt authority. It retains the experimental handoff scope and existing unsupported channels. +- #312 / #330: explicit trusted SSH configuration support. A trusted configuration can execute local SSH commands; this is an operator trust decision, not a sandbox. Existing target checks and uncertain-outcome handling remain. +- #212 / #331: expiring one-use pairing links and guided setup, using hidden terminal input and independent fingerprint confirmation. Both endpoints need the supported pairing protocol and existing Unix Relay requirements. Pairing does not replace target policy or native approvals; pending-offer cancellation does not revoke a completed pairing. +- #294 / #332: local, per-version automatic runtime-notice dismissal on Mac/Linux, with an explicit clear operation. Management is offline; explicit update checks and skill notices retain their existing behavior. + +See the [CLI reference](../cli-reference.md), [handoff guide](../handoff-runtime.md) and [paired-device guide](../paired-devices.md) for exact combinations, platform limits and error behavior. The integrated changes also contain regression-test stabilization and an expired Relay-room eligibility fix; passing reruns alone do not establish the cause of earlier unrelated failures. + +## Compatibility and remaining work + +Python 3.9+ remains the core runtime floor; optional MCP requires Python 3.10+, and the Unix/WSL Relay receiver requires Python 3.11+. Core local/SSH use adds no third-party Python dependency. Ordinary submission results remain distinct from consumption, receipt ACK and task completion. Unknown outcomes never authorize automatic resend. + +The compatibility skill copy remains companion 0.3.3, with minimum runtime 0.9.1 and full coverage 1.0.1. Companion 1.3 guidance is a separately reviewed document update; publication of this runtime does not install or publish it. Plugin and TypeScript versions remain independent. + +Side Session and steering research (#245/#247, Draft #246/#248) are assigned to Long-term and are not release features. The remaining native generation, handoff, storage and startup acceptance work (#180/#181/#268/#304/#306/#307) is not completed by this release. No general Codex ACK, delivery before a TUI's first input or Antigravity stable-support claim is added. + +## Release verification + +Require current review and CI for the preparation PR, then successful CI and dependency audits on its exact protected-main commit. Verify generated standalone consistency, four-language documentation, package contents and fresh installations. Local integration and build results are rehearsal evidence, not the published artifacts or new live-agent/platform acceptance. + +After the authorized tag and draft are prepared, wait for the preparation workflow and its attach-draft job to succeed. Verify all seven immutable assets, `SHA256SUMS`, `release-provenance.json` and authenticated attestations against the exact tag and commit before publication. Required human PyPI environment approval remains in effect. Record publication evidence separately; do not replace immutable assets to revise these frozen notes. + +Package publication does not deploy Control/Relay services or update installed devices. Operational rollout and live acceptance remain separate. diff --git a/docs/zh-CN/cli-reference.md b/docs/zh-CN/cli-reference.md index 3869d81..7f27bc0 100644 --- a/docs/zh-CN/cli-reference.md +++ b/docs/zh-CN/cli-reference.md @@ -74,9 +74,11 @@ session-peer send --host worker --to 'codex:' --dry-run -m "me -### 传递说明(开发中) + -这是 #323 的开发功能,拟纳入 v1.3,尚未包含在已发布的 v1.2.1 中。在 `send --dry-run` 中添加 `--explain`,即可查看所选本地、SSH 或配对设备目标、现有验证结果、传递方式及观察限制。`doctor --explain` 说明现有诊断快照和声明的支持能力,不验证特定目标是否已准备好接收提交。`handoff status --explain` 说明现有 intent 中保存的证据。每个已处理的 SSH 目标都会单独显示说明;意外错误仍可能中断现有的主机循环,导致后续目标未被处理。 +### 传递说明(v1.3.0) + +此功能从 v1.3.0 起可用。在 `send --dry-run` 中添加 `--explain`,即可查看所选本地、SSH 或配对设备目标、现有验证结果、传递方式及观察限制。`doctor --explain` 说明现有诊断快照和声明的支持能力,不验证特定目标是否已准备好接收提交。`handoff status --explain` 说明现有 intent 中保存的证据。每个已处理的 SSH 目标都会单独显示说明;意外错误仍可能中断现有的主机循环,导致后续目标未被处理。 ```bash session-peer send --host worker --to 'codex:' --message "Review the patch" --dry-run --explain @@ -117,9 +119,11 @@ session-peer list --output-format json -## 本地路径预设(开发中) + + +## 本地路径预设(v1.3.0) -这是 #324 的开发功能,尚未包含在已发布的 v1.2.1 中。可选的 `preset` 命令保存的是连接路径,而不是接收者。在 Mac/Linux 上,使用 `--preset` 选择一个本地或 SSH 路径,用于常规 Claude Code、Codex 会话列表查询或发送。Windows 预设操作会被拒绝,现有 Windows 命令保持不变。 +此功能从 v1.3.0 起可用。可选的 `preset` 命令保存的是连接路径,而不是接收者。在 Mac/Linux 上,使用 `--preset` 选择一个本地或 SSH 路径,用于常规 Claude Code、Codex 会话列表查询或发送。Windows 预设操作会被拒绝,现有 Windows 命令保持不变。 ```bash session-peer preset add work-mac --host user@work-mac --agent codex --codex-home /Users/user/.codex @@ -154,9 +158,11 @@ session-peer preset remove work-mac --expect-revision 'dp1:' 在 macOS 上,忽略所有权的挂载会以 `preset_ownership_unenforced` 被拒绝,无法查询或验证挂载状态时则以 `preset_mount_unverifiable` 被拒绝。不会仅凭模式位断定所有权已强制执行。Linux 也会拒绝上级路径中的 ACL,以及无法验证 ACL 状态的文件系统。中断管理命令后请检查当前配置,因为更改可能已经可见;目录同步失败不会被静默当作成功。 -### 接收者地址簿(开发中) + + +### 接收者地址簿(v1.3.0) -这项 #324 的新增范围是 v1.3 的候选功能,尚未包含在已发布的 v1.2.1 中。路径预设仍只保存路径。单独启用的地址簿将用户提供的显示标签绑定到在本地或 SSH Mac/Linux 路径上明确选择的 Claude Code 或 Codex 接收者。标签不认证人员身份。配对设备、Antigravity 和 Windows 均被拒绝。未显式执行地址簿操作或使用 `--address` 的命令不会读取地址簿配置,也不添加自动迁移或回退。 +此功能从 v1.3.0 起可用。路径预设仍只保存路径。单独启用的地址簿将用户提供的显示标签绑定到在本地或 SSH Mac/Linux 路径上明确选择的 Claude Code 或 Codex 接收者。标签不认证人员身份。配对设备、Antigravity 和 Windows 均被拒绝。未显式执行地址簿操作或使用 `--address` 的命令不会读取地址簿配置,也不添加自动迁移或回退。 ```bash session-peer address resolve --preset work-mac --to 'codex:' --json @@ -174,7 +180,7 @@ session-peer address remove review --expect-revision 'ab1:' Claude 地址保存选定的 `tg1:` 代次,并在提交前使用现有的连接对端前置检查。Codex 地址保存完整线程 UUID、准确的 home 和 `aw1:` writer 观察,并在产生副作用前重复现有检查。Codex 代次仍**不受支持**:writer 观察和重新验证并不提供对原有 native 实例代次的原子验证保证。Writer 已更改或无法确认时,必须显式重新选择,不会自动改选目标或重放。SSH 选择要求在实际连接上验证主机密钥,并在实际发送时固定使用同一密钥。这既不认证人员身份,也不证明 SSH 配置或 SQLite 存储的同一性。 -实际发送必须同时提供当前 `--address-revision` 和准确的 `--confirm-target`,dry-run 可以省略。`--address` 不能与 `--to`、`--preset`、显式主机、native 或 SSH 覆盖项、配对设备、wake、handoff 或 Reply-To URI 路由组合使用。常规消息输入和限制保持不变。结果未知时也不允许自动重发。这些命令不保证与单独开发的 #323 传递说明候选功能组合使用。 +实际发送必须同时提供当前 `--address-revision` 和准确的 `--confirm-target`,dry-run 可以省略。`--address` 不能与 `--to`、`--preset`、显式主机、native 或 SSH 覆盖项、配对设备、wake、handoff 或 Reply-To URI 路由组合使用。常规消息输入和限制保持不变。结果未知时也不允许自动重发。提供常规消息输入后,可使用 `send --address NAME --dry-run --explain` 查看纯文本传递预览。上述 JSON、wake 和 handoff 限制仍然适用。 存储是位于 `destinations.json` 旁的独立 `addresses.json`,采用 `schemaVersion: 1`,大小限制为 64 KiB,最多 128 项。它使用与预设相同的所有者、权限、ACL、挂载和不跟随符号链接的路径检查,不自动修复或迁移文件。地址名称遵循预设名称语法;显示标签会规范化为 NFC,最多 128 个字符,并拒绝控制字符、双向控制字符和格式字符。管理操作的 commit 未确认时,更改也可能已经可见,重试前请检查当前配置。绑定 revision 不增加接收侧去重、ACK 或任务完成证据。 @@ -374,7 +380,9 @@ Host web-01 退出码:`0` 命令成功(包括列出或预检运行 dry-run),`1` 操作错误,`2` CLI 用法错误或未解析的目标被报告为 no-target,以及 `130` 中断(Ctrl-C)。Codex 队列拒绝(包括缺失 rollout)属于操作错误(`1`);预检运行期间缺失已保存的线程返回 `2`。发送操作退出码为 `0` 并不确认消息已被消费或回复。 -### 限时 handoff 观察(v1.3 候选版本) + + +### 限时 handoff 观察(v1.3.0) ```sh session-peer handoff status --correlation-id PREPARED_UUID --json @@ -383,9 +391,11 @@ session-peer handoff watch --correlation-id PREPARED_UUID --watch-timeout 30 --i 使用本地所有者 POSIX 记录中已有的准备 UUID。状态查询仍为一次快照;观察运行 1..60 秒(默认 30),间隔 1000..5000 毫秒(默认 1000),仅接受 ASCII 整数,最多采样 61 次。观察仅在预算允许生成有效公开结果时输出初始快照,随后仅输出公开元数据/historyPhase 的变化;可能不输出任何快照。JSON 观察输出使用通用 schemaVersion 1 NDJSON 封装,其中 operation 为 watch,event 为 snapshot 或 end,快照嵌套原有 handoff 对象;status JSON 不变。到期完成的退出码 0 仅表示观察完成,并非 ACK 或等待成功;SIGINT 为 130,历史、输出故障为 1,无效参数为 2。历史缺失、损坏或 ledgerEpoch 改变会停止观察。 historyPhase 为 prepared、attempted、terminal、tombstone 或 quarantined;attempted 表示已持久保存的尝试屏障,不表示正在执行。 -观察为只读操作,不创建意图、等待、收据,不写入记录、提交或唤醒。不增加主机、设备、Windows 路径或 Codex ACK。每帧上限为 16 KiB,总量为 256 KiB,并预留 2 KiB 用于结束帧。真实文件描述符标准输出使用一个专属、隔离的 Python 输出辅助进程;它仅接收有界的已序列化公开字节,不更改共享描述符标志,也不读取记录或原生数据。父进程将 IPC 纳入原始总预算,开始新的记录读取或验证阶段前也检查期限;总时间内预留 100 ms 用于最终输出和清理,因此采样可能提前结束。超时、SIGINT 或错误时终止并回收辅助进程,但不可中断的 OS 操作不具备严格实时保证。部分写入或无完成回复后禁止后续帧、结束帧;消费方必须拒绝被截断的最后一行 NDJSON。辅助进程完成仅表示 OS 写入完成,不证明接收者消费。快照并非无损事件流,本地 UTC 观察不证明 ACK 到达顺序。有关隐私、保留的提交/ACK/等待含义、只读收集器查询及现有隔离限制,参见 [handoff 运行时指南](handoff-runtime.md)。观察不启动原生消息进程或收集器。此候选版本尚未发布。 不公开载荷或权限摘要,公开 targetGeneration 保持既有约定。 只读记录在读取不可变快照字节后、解析和验证前释放共享锁。 中断后的最终输出和清理在剩余总预算内最多使用 100 ms。 整体成功需要完整的成功结束帧和退出码 0:该帧之后清理仍可能失败。非零退出表示整体失败,不表示 ACK 升级、丢弃独立有效的提交事实或允许重试。 +观察为只读操作,不创建意图、等待、收据,不写入记录、提交或唤醒。不增加主机、设备、Windows 路径或 Codex ACK。每帧上限为 16 KiB,总量为 256 KiB,并预留 2 KiB 用于结束帧。真实文件描述符标准输出使用一个专属、隔离的 Python 输出辅助进程;它仅接收有界的已序列化公开字节,不更改共享描述符标志,也不读取记录或原生数据。父进程将 IPC 纳入原始总预算,开始新的记录读取或验证阶段前也检查期限;总时间内预留 100 ms 用于最终输出和清理,因此采样可能提前结束。超时、SIGINT 或错误时终止并回收辅助进程,但不可中断的 OS 操作不具备严格实时保证。部分写入或无完成回复后禁止后续帧、结束帧;消费方必须拒绝被截断的最后一行 NDJSON。辅助进程完成仅表示 OS 写入完成,不证明接收者消费。快照并非无损事件流,本地 UTC 观察不证明 ACK 到达顺序。有关隐私、保留的提交/ACK/等待含义、只读收集器查询及现有隔离限制,参见 [handoff 运行时指南](handoff-runtime.md)。观察不启动原生消息进程或收集器。不公开载荷或权限摘要,公开 targetGeneration 保持既有约定。 只读记录在读取不可变快照字节后、解析和验证前释放共享锁。 中断后的最终输出和清理在剩余总预算内最多使用 100 ms。 整体成功需要完整的成功结束帧和退出码 0:该帧之后清理仍可能失败。非零退出表示整体失败,不表示 ACK 升级、丢弃独立有效的提交事实或允许重试。 + + -### 可信本地 SSH 配置(v1.3 候选,尚未发布) +### 可信本地 SSH 配置(v1.3.0) 在 Linux 和 macOS 上,显式指定 `--host` 的本地 CLI `list`、`send`、`doctor` 或 `update` 调用可以同时使用 `--ssh-config ABSOLUTE_PATH` 和 `--trust-ssh-config` 选择现有 OpenSSH 配置。两个标志缺一不可。以下为示例路径,支持用引号包裹的空格: @@ -404,9 +414,11 @@ session-peer doctor --host worker --ssh-config '/home/alice/SSH Profiles/work.co 环境变量、MCP 请求、ReplyTo 地址和已存储预设不能选择此模式。Windows、`setup`、配对设备路由、预设组合、回复 URI 目标以及未指定 `--host` 的调用,会在读取配置或启动 SSH 前被拒绝。省略这对标志时保留现有默认 SSH 行为。 -### 一次性配对链接(v1.3候选) + + +### 一次性配对链接(v1.3.0) -两端都需要 `pairing-offer-v1` 及现有Unix Python 3.11+ relay额外依赖。以下为候选命令,不代表已发布的v1.3支持: +两端都需要 `pairing-offer-v1` 及现有Unix Python 3.11+ relay额外依赖。以下命令从 v1.3.0 起可用: ```sh session-peer device rotation-status --state /private/client-state diff --git a/docs/zh-CN/handoff-runtime.md b/docs/zh-CN/handoff-runtime.md index a964c86..de26c6a 100644 --- a/docs/zh-CN/handoff-runtime.md +++ b/docs/zh-CN/handoff-runtime.md @@ -50,7 +50,7 @@ session-peer handoff status --correlation-id PREPARED_UUID 收集器时钟查询也是只读的。旧版收集器可能拒绝该查询,因此可用的下一步操作可能不包含 `keep_waiting`。状态查询不会改用会写入记录的查询,也不会重启收集器。记录快照与可选的收集器时钟观测是分开的,并非原子性的联合观测。等待因 history_unavailable 失败后,若收集器时钟恢复可用,状态查询现在会保留已知提交事实和失败的等待,同时不提供 keep_waiting。其他等待创建语义不变。保留标记中的最近等待详情显示为因历史过期而不可用,不作为未请求等待的证据。 -状态查询仍是本地单次查询。v1.3 候选版本增加了下述限时本地观察;Windows handoff 和 Codex ACK 仍不支持。[#296](https://github.com/abruption/session-peer/issues/296) 在评审、合并前保持开放,此候选版本尚未发布。 +状态查询仍是本地单次查询。v1.3.0 增加了下述限时本地观察;Windows handoff 和 Codex ACK 仍不支持。实现记录请参见 [#296](https://github.com/abruption/session-peer/issues/296)。 ## 在限定时间内观察一条请求 diff --git a/docs/zh-CN/paired-devices.md b/docs/zh-CN/paired-devices.md index 86a4132..e6ecb05 100644 --- a/docs/zh-CN/paired-devices.md +++ b/docs/zh-CN/paired-devices.md @@ -45,9 +45,11 @@ NAT 穿透、WireGuard 隧道或自动公开服务。 接收端在设备认证前最多允许 16 条直接连接和 2 条已 attach 的 Relay 连接,与 8 条已认证连接分别管理。TLS 必须在两秒内完成,包含网络和调度延迟。TLS 完成后,没有客户端证书的初始配对连接还有两秒用于完成唯一一次配对请求及响应;已认证请求的期限仍为 45 秒。这些较短的期限也可能拒绝合法的慢速连接。存在 8 个空闲或慢速 TLS 直接套接字时,仍有空间接收已配对设备的直接连接和 Relay 请求。但全部 16 个直接连接认证前名额耗尽时,仍可能拒绝已配对设备的直接连接,两个预留的 Relay 名额也可能饱和;不保证在任意洪水攻击下的可用性。超额套接字或接收端开始关闭后的套接字不会创建处理任务。汇总准入计数器保留拒绝和清理失败数量,不包含身份;显式启用的 `receiver_admission` 事件每分钟最多报告一次固定计数器和允许列表内的原因。不会启用应用程序自动重试。 -## 一次性配对链接(v1.3候选) + -以下流程是开发候选,并非已经发布的v1.3功能。两端都需要新的 `pairing-offer-v1` 协议。现有私密邀请文件仍然受支持。该功能沿用Unix Python 3.11+及relay额外依赖,不增加Windows支持、中介服务、网页、公开监听端口或托管服务。 +## 一次性配对链接(v1.3.0) + +以下链接流程从 v1.3.0 起可用。两端都需要新的 `pairing-offer-v1` 协议。现有私密邀请文件仍然受支持。该功能沿用Unix Python 3.11+及relay额外依赖,不增加Windows支持、中介服务、网页、公开监听端口或托管服务。 先初始化两端设备,并通过可信渠道核对公开身份。`device rotation-status` 会显示稳定设备标识和当前密钥指纹;轮换密钥后两者可能不同。接收目标策略须单独审核。配对不会授予所有会话的访问权限,不会改变原生CLI的审批流程,也不会授权代理执行。 diff --git a/docs/zh-CN/releases/v1.3.0.md b/docs/zh-CN/releases/v1.3.0.md new file mode 100644 index 0000000..e090ef6 --- /dev/null +++ b/docs/zh-CN/releases/v1.3.0.md @@ -0,0 +1,34 @@ +# v1.3.0 发布准备 + +## 源码与发布状态 + +于2026-10-23以已发布的1.2.1为基准准备。本文记录发布范围与验证条件,并非软件包已发布的公告。发布记录请查看[GitHub Releases](https://github.com/abruption/session-peer/releases)和[PyPI](https://pypi.org/project/session-peer/)。 + +集成源码基准为版本准备提交之前的 `a0e7af032fd372334782cc3ac3d97b21c71dd797`。六个功能PR按#329、#330、#331、#332、#325、#328的顺序合并。该基准的[集成CI](https://github.com/abruption/session-peer/actions/runs/39905198747)与[CodeQL](https://github.com/abruption/session-peer/actions/runs/39905198891)已通过,但不能代替最终发布提交的检查。 + +## 包含的变更 + +- #323 / #325:为 `send --dry-run --explain`、`doctor --explain` 和 `handoff status --explain` 提供文本说明。说明已有结果和记录的证据,包括受支持的配对端就绪信息,不授予权限,也不证明消息已被消费。旧接收端的附加信息可能仍为未知。已保存的收件确认依据与新观测有所区别。 +- #324 / #328:为Mac/Linux上的local/SSH Claude Code与Codex增加可选路由预设和独立收件人地址簿。实际地址发送要求当前 `--address-revision` 与准确的 `--confirm-target`,并重复检查所选目标和writer。revision不认证人员身份,也不证明native代次或存储的原子一致性。Windows、配对设备及Antigravity地址簿操作仍不受支持。 +- #296 / #329:增加有时间上限的POSIX `handoff watch`,观察已有intent。不创建提交、重发、collector或新的收件确认权限。实验性handoff范围及现有不支持的通道保持不变。 +- #312 / #330:支持显式信任的SSH配置。受信任配置可能执行本地SSH命令,因此需由操作者作出信任判断,这不是sandbox。保留现有目标检查和不确定结果处理。 +- #212 / #331:增加有时限、一次性的配对链接和引导设置,采用隐藏终端输入与独立指纹确认。两端均须满足受支持的配对协议及现有Unix Relay要求。配对不取代目标策略或native审批;取消待处理邀请不会撤销已完成的配对。 +- #294 / #332:在Mac/Linux本地隐藏指定版本的自动运行时通知,并提供显式清除操作。管理操作离线完成;显式更新检查和技能通知保持原有行为。 + +具体组合、平台限制及错误行为请参阅[CLI参考](../cli-reference.md)、[handoff指南](../handoff-runtime.md)和[配对设备指南](../paired-devices.md)。集成变更还包含回归测试稳定性改进,以及过期Relay room的可用性判断修复。重跑通过本身不能确定此前其他失败的原因。 + +## 兼容性与剩余工作 + +核心运行时仍要求Python 3.9+;可选MCP要求Python 3.10+,Unix/WSL Relay receiver要求Python 3.11+。核心local/SSH使用不增加第三方Python依赖。普通提交结果仍区别于消费、收件ACK和任务完成。不确定结果绝不授权自动重发。 + +兼容技能副本仍为companion 0.3.3,最低运行时0.9.1、完整指南覆盖基准1.0.1。companion的1.3指南是单独审核的文档更新;发布本运行时不会安装或发布该技能。插件与TypeScript版本也保持独立。 + +Side Session和steering研究(#245/#247、Draft #246/#248)已归入Long-term,不属于发布功能。剩余的native代次、handoff、存储及启动验收工作(#180/#181/#268/#304/#306/#307)不会因本次发布而完成。不新增通用Codex ACK、首次输入前投递或Antigravity正式支持的声明。 + +## 发布验证 + +准备PR须完成最新审核与CI,随后其对应的受保护main准确提交须通过CI和依赖审计。检查生成的独立文件一致性、四语言文档、软件包内容及全新安装。本地集成与构建结果是预演证据,并非发布产物或新的真实代理、平台验收证据。 + +准备已授权的标签与草稿后,等待preparation workflow及attach-draft任务成功。发布前,将七个不可变产物、`SHA256SUMS`、`release-provenance.json` 及经过认证的attestation与准确标签、提交核对。仍需执行必需的人工PyPI环境审批。另行记录实际发布证据;不得为修改这份冻结文档而替换不可变产物。 + +软件包发布不包括Control/Relay服务部署或已安装设备更新。运行环境部署与真实验收仍为独立工作。 diff --git a/session_peer.py b/session_peer.py index 9a72947..758efa3 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.2.1" +__version__ = "1.3.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 223b7a5..c026f59 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.2.1" +__version__ = "1.3.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 ecbc6e6..7a6f2e6 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(49, len(sources), "Update the translation manifest for new canonical docs") + self.assertEqual(50, len(sources), "Update the translation manifest for new canonical docs") canonical_docs = { path.relative_to(ROOT / "docs") for path in (ROOT / "docs").rglob("*.md") diff --git a/tests/docs/test_stable_candidate.py b/tests/docs/test_stable_candidate.py index 019c46f..6a5ef84 100644 --- a/tests/docs/test_stable_candidate.py +++ b/tests/docs/test_stable_candidate.py @@ -235,8 +235,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.2.0**", text) - self.assertIn("releases/v1.2.0.md", text) + self.assertIn("**1.3.0**", text) + self.assertIn("releases/v1.3.0.md", text) self.assertIn("handoff-runtime.md", text) self.assertIn("POSIX", text) self.assertNotIn("**1.0.4**", text) @@ -255,8 +255,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.2.1") - self.assertIn('__version__ = "1.2.1"', + self.assertEqual(session_peer.__version__, "1.3.0") + self.assertIn('__version__ = "1.3.0"', (ROOT / "session_peer_core/common.py").read_text(encoding="utf-8")) def test_all_current_readmes_and_runbooks_use_stable_version(self): @@ -264,7 +264,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.2.0", text) + self.assertIn("1.3.0", text) self.assertNotIn("1.0.0rc4", text) if stem == "RELEASING": self.assertIn("--draft=false --prerelease=false --latest", text) @@ -287,24 +287,24 @@ def test_release_notes_keep_scope_and_limits_visible(self): def test_stable_release_keeps_operational_deployment_separate(self): profiles = ( - ("", "Source version: **1.2.1**.", - "At the 2026-10-19 publication checkpoint, the last verified published stable release was **1.2.0**.", + ("", "Source version: **1.3.0**.", + "At the 2026-10-23 preparation checkpoint, the last verified published stable release was **1.2.1**.", "Development candidate 1.2.1 is unpublished"), - (".ko", "소스 버전: **1.2.1**.", - "2026-10-19 공개 상태 확인 시점의 마지막 확인 공개 안정판은 **1.2.0**이었습니다.", + (".ko", "소스 버전: **1.3.0**.", + "2026-10-23 준비 시점의 마지막 확인 공개 안정판은 **1.2.1**이었습니다.", "개발 후보 1.2.1은 미공개입니다"), - (".ja", "ソースバージョン:**1.2.1**。", - "2026-10-19の公開状況の確認時点で、最後に確認した公開済み安定版は**1.2.0**でした。", + (".ja", "ソースバージョン:**1.3.0**。", + "2026-10-23の準備時点で、最後に確認した公開済み安定版は**1.2.1**でした。", "開発候補1.2.1は未公開です"), - (".zh-CN", "源码版本:**1.2.1**。", - "在2026-10-19的发布状态检查时,最后确认的已发布稳定版本为**1.2.0**。", + (".zh-CN", "源码版本:**1.3.0**。", + "在2026-10-23的准备检查时,最后确认的已发布稳定版本为**1.2.1**。", "开发候选版本1.2.1尚未发布"), ) for suffix, source_version, dated_checkpoint, stale_unpublished in profiles: text = (ROOT / ("README" + suffix + ".md")).read_text(encoding="utf-8") self.assertIn(source_version, text) self.assertIn(dated_checkpoint, text) - for stale_version in ("1.2.0", "1.2.1"): + for stale_version in ("1.2.0", "1.2.1", "1.3.0"): self.assertNotIn(stale_unpublished.replace("1.2.1", stale_version), text) self.assertIn("https://github.com/abruption/session-peer/releases", text) self.assertIn("https://pypi.org/project/session-peer/", text) From e99fa9448090f1ed6b57eb1cc4239d451be0e2d0 Mon Sep 17 00:00:00 2001 From: YEONGUK LEE Date: Fri, 23 Oct 2026 14:55:42 +0900 Subject: [PATCH 2/4] docs(release): clarify asset count and independent skill publication --- RELEASING.ja.md | 2 +- RELEASING.ko.md | 2 +- RELEASING.md | 2 +- RELEASING.zh-CN.md | 2 +- docs/cli-reference.md | 2 +- docs/i18n-manifest.json | 6 +++--- docs/ja/cli-reference.md | 2 +- docs/ja/releases/v1.3.0.md | 6 +++--- docs/ko/cli-reference.md | 2 +- docs/ko/releases/v1.3.0.md | 6 +++--- docs/releases/v1.3.0.md | 6 +++--- docs/zh-CN/cli-reference.md | 2 +- docs/zh-CN/releases/v1.3.0.md | 6 +++--- tests/docs/test_stable_candidate.py | 4 ++-- 14 files changed, 25 insertions(+), 25 deletions(-) diff --git a/RELEASING.ja.md b/RELEASING.ja.md index faf7272..76b9b97 100644 --- a/RELEASING.ja.md +++ b/RELEASING.ja.md @@ -4,7 +4,7 @@ 公開済み1.2.1を基準に2026-10-23に準備しました。[リリースノート](docs/ja/releases/v1.3.0.md)はマージ済み機能PR6件と残る制限を説明します。統合ソースの基準はバージョン準備コミットより前の `a0e7af032fd372334782cc3ac3d97b21c71dd797` です。そのCI・CodeQLは成功していますが、最終準備レビュー、保護されたmainの正確なコミットでのCI、依存関係監査、生成された単独ファイル、パッケージとインストールの検証は引き続き必要です。スキルとプラグインのバージョンは独立しています。 -所有者はバージョン準備・タグ作成・公開を承認しましたが、リポジトリ保護や必須の人手によるPyPI環境承認は免除されません。ビルド前に公開状況を断定しないノートを固定します。preparation workflowの実行後、attach-draftの成功を待ち、不変の成果物7件、SHA256SUMS、release-provenance.json、認証済みattestationを正確なタグとコミットに照合します。実際の公開証拠は別途記録します。ローカルビルドは事前検証であり、パッケージ公開はサービス配備やインストール済み機器の更新を含みません。以下の節は過去の手順を保存するもので、古いタグの再利用を指示するものではありません。 +所有者はバージョン準備・タグ作成・公開を承認しましたが、リポジトリ保護や必須の人手によるPyPI環境承認は免除されません。ビルド前に公開状況を断定しないノートを固定します。preparation workflowの実行後、attach-draftの成功を待ち、SHA256SUMSとrelease-provenance.jsonを含む不変の成果物7件と認証済みattestationを正確なタグとコミットに照合します。実際の公開証拠は別途記録します。ローカルビルドは事前検証であり、パッケージ公開はサービス配備やインストール済み機器の更新を含みません。以下の節は過去の手順を保存するもので、古いタグの再利用を指示するものではありません。 1.1.0は公開済みです。GitHubはコミット8ca77cf31254c8287a2593fe484bb30a7dba2727のv1.1.0を2026-10-09 06:46:41 UTCに公開し、PyPIはwheelとsdistをそれぞれ08:04:35と08:04:37 UTCに公開しました。[GitHubリリース](https://github.com/abruption/session-peer/releases/tag/v1.1.0)と[PyPIバージョン記録](https://pypi.org/pypi/session-peer/1.1.0/json)を参照してください。公開は本番環境への配備や実験的handoffの全受け入れ条件の完了を意味しません。 diff --git a/RELEASING.ko.md b/RELEASING.ko.md index bc9739f..99b9895 100644 --- a/RELEASING.ko.md +++ b/RELEASING.ko.md @@ -4,7 +4,7 @@ 공개된 1.2.1을 기준으로 2026-10-23에 준비했습니다. [릴리스 기록](docs/ko/releases/v1.3.0.md)은 병합된 기능 PR 6개와 남은 제한을 설명합니다. 통합 소스 기준은 버전 준비 커밋 이전의 `a0e7af032fd372334782cc3ac3d97b21c71dd797`입니다. 해당 CI·CodeQL은 통과했으며, 최종 준비 리뷰·보호된 main의 정확한 커밋 CI·의존성 감사·생성된 독립 실행 파일·패키지와 설치 검증은 여전히 필요합니다. 스킬과 플러그인 버전은 독립적입니다. -저장소 소유자는 버전 준비·태그·공개를 승인했으며, 저장소 보호 규칙이나 사람이 수행하는 필수 PyPI 환경 승인을 면제한 것은 아닙니다. 빌드 전에 공개 여부를 단정하지 않는 문구로 기록을 고정합니다. preparation workflow를 실행한 뒤 attach-draft 성공을 기다리고 불변 산출물 7개, SHA256SUMS, release-provenance.json과 인증된 attestation을 정확한 태그·커밋과 대조합니다. 실제 공개 증거는 별도로 기록합니다. 로컬 빌드는 사전 검증 자료이며 패키지 공개는 서비스 배포나 설치된 기기 업데이트를 포함하지 않습니다. 아래 절은 과거 절차를 보존하며 이전 태그를 재사용하라는 지시가 아닙니다. +저장소 소유자는 버전 준비·태그·공개를 승인했으며, 저장소 보호 규칙이나 사람이 수행하는 필수 PyPI 환경 승인을 면제한 것은 아닙니다. 빌드 전에 공개 여부를 단정하지 않는 문구로 기록을 고정합니다. preparation workflow를 실행한 뒤 attach-draft 성공을 기다리고 SHA256SUMS와 release-provenance.json을 포함한 불변 산출물 7개와 인증된 attestation을 정확한 태그·커밋과 대조합니다. 실제 공개 증거는 별도로 기록합니다. 로컬 빌드는 사전 검증 자료이며 패키지 공개는 서비스 배포나 설치된 기기 업데이트를 포함하지 않습니다. 아래 절은 과거 절차를 보존하며 이전 태그를 재사용하라는 지시가 아닙니다. 1.1.0은 공개됐습니다. GitHub는 커밋 8ca77cf31254c8287a2593fe484bb30a7dba2727의 v1.1.0을 2026-10-09 06:46:41 UTC에 공개했으며, PyPI는 wheel과 sdist를 각각 08:04:35와 08:04:37 UTC에 공개했습니다. [GitHub 릴리스](https://github.com/abruption/session-peer/releases/tag/v1.1.0)와 [PyPI 버전 기록](https://pypi.org/pypi/session-peer/1.1.0/json)을 참고하십시오. 공개는 운영 배포나 실험적 handoff의 모든 수락 조건 완료를 뜻하지 않습니다. diff --git a/RELEASING.md b/RELEASING.md index c155fb8..157aae7 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -4,7 +4,7 @@ Prepared on 2026-10-23 against published 1.2.1. The [release notes](docs/releases/v1.3.0.md) describe the six merged feature PRs and remaining boundaries. Integrated source base: `a0e7af032fd372334782cc3ac3d97b21c71dd797`, before the version-preparation commit. Its CI and CodeQL passed; final preparation review, exact protected-main CI, dependency audits, generated standalone and package/install checks remain required. Skill and plugin versions remain independent. -The owner authorized version preparation, tagging and publication; that authorization does not waive repository protections or the required human PyPI environment approval. Freeze publication-neutral notes before building. After preparation workflow dispatch, wait for attach-draft success and verify all seven immutable assets, SHA256SUMS, release-provenance.json and authenticated attestations against the exact tag and commit. Record actual publication evidence separately. Local builds are rehearsal evidence; package publication does not deploy services or update installed devices. The sections below preserve historical procedures and do not instruct reuse of old tags. +The owner authorized version preparation, tagging and publication; that authorization does not waive repository protections or the required human PyPI environment approval. Freeze publication-neutral notes before building. After preparation workflow dispatch, wait for attach-draft success and verify all seven immutable assets (including SHA256SUMS and release-provenance.json) and authenticated attestations against the exact tag and commit. Record actual publication evidence separately. Local builds are rehearsal evidence; package publication does not deploy services or update installed devices. The sections below preserve historical procedures and do not instruct reuse of old tags. Version 1.1.0 is published. GitHub published v1.1.0 on 2026-10-09 at 06:46:41 UTC, from commit 8ca77cf31254c8287a2593fe484bb30a7dba2727; PyPI published the wheel and sdist at 08:04:35 and 08:04:37 UTC. See the [GitHub release](https://github.com/abruption/session-peer/releases/tag/v1.1.0) and [PyPI version record](https://pypi.org/pypi/session-peer/1.1.0/json). Publication is not operational deployment or completion of every experimental handoff gate. diff --git a/RELEASING.zh-CN.md b/RELEASING.zh-CN.md index ea58dea..05b5097 100644 --- a/RELEASING.zh-CN.md +++ b/RELEASING.zh-CN.md @@ -4,7 +4,7 @@ 于2026-10-23以已发布的1.2.1为基准准备。[发布说明](docs/zh-CN/releases/v1.3.0.md)介绍六个已合并功能PR及剩余限制。集成源码基准为版本准备提交之前的 `a0e7af032fd372334782cc3ac3d97b21c71dd797`。该基准的CI与CodeQL已通过;仍需最终准备审核、受保护main准确提交的CI、依赖审计、生成的独立文件、软件包及安装检查。技能与插件版本保持独立。 -所有者已授权版本准备、打标签和发布,但未免除仓库保护或必需的人工PyPI环境审批。构建前冻结不预先宣告发布的说明。触发preparation workflow后,等待attach-draft成功,将七个不可变产物、SHA256SUMS、release-provenance.json及经过认证的attestation与准确标签和提交核对。另行记录实际发布证据。本地构建是预演证据;软件包发布不包括服务部署或已安装设备更新。以下章节保留历史流程,不是重用旧标签的指示。 +所有者已授权版本准备、打标签和发布,但未免除仓库保护或必需的人工PyPI环境审批。构建前冻结不预先宣告发布的说明。触发preparation workflow后,等待attach-draft成功,将包括SHA256SUMS和release-provenance.json在内的七个不可变产物及经过认证的attestation与准确标签和提交核对。另行记录实际发布证据。本地构建是预演证据;软件包发布不包括服务部署或已安装设备更新。以下章节保留历史流程,不是重用旧标签的指示。 1.1.0已发布。GitHub于2026-10-09 06:46:41 UTC发布了提交8ca77cf31254c8287a2593fe484bb30a7dba2727的v1.1.0;PyPI分别于08:04:35和08:04:37 UTC发布wheel与sdist。请参阅[GitHub版本](https://github.com/abruption/session-peer/releases/tag/v1.1.0)和[PyPI版本记录](https://pypi.org/pypi/session-peer/1.1.0/json)。发布不表示已部署到生产环境,也不表示实验性handoff的所有验收条件已完成。 diff --git a/docs/cli-reference.md b/docs/cli-reference.md index 1f8a23c..c6c5fce 100644 --- a/docs/cli-reference.md +++ b/docs/cli-reference.md @@ -235,7 +235,7 @@ Replace placeholders with the exact reported values. Before `add`, inspect `addr Claude addresses retain the selected `tg1:` generation and use the existing connected-peer precondition before submission. Codex addresses retain a full thread UUID, exact home and `aw1:` writer observation, with existing checks repeated before the effect. Codex generation remains **unsupported**: writer observation and revalidation are not an atomic native incarnation guarantee. A changed or unavailable writer requires explicit reselection; no automatic retargeting or replay is attempted. SSH selection requires a host key verified on the actual connection and pins that same key for the actual send. This authenticates neither a person nor the identity of SSH configuration or SQLite storage. -An actual send requires both the current `--address-revision` and exact `--confirm-target`; dry-run may omit them. `--address` cannot be combined with `--to`, `--preset`, explicit host/native/SSH overrides, paired-device, wake, handoff or Reply-To URI routing. Normal message inputs and limits remain unchanged. Unknown outcomes never authorize automatic resend. Use `send --address NAME --dry-run --explain` with a normal message input for a text-only delivery preview. The JSON, wake and handoff restrictions above still apply. +An actual send requires both the current `--address-revision` and exact `--confirm-target`; dry-run may omit them. `--address` cannot be combined with `--to`, `--preset`, explicit host/native/SSH overrides, paired-device, wake, handoff or Reply-To URI routing. Normal message inputs and limits remain unchanged. Unknown outcomes never authorize automatic resend. Use `send --address NAME --dry-run --explain` with a normal message input for a text-only delivery preview. `--explain` rejects JSON output; the `--address` wake and handoff restrictions still apply. Storage is a separate `addresses.json` beside `destinations.json`, with `schemaVersion: 1`, a 64 KiB limit and at most 128 entries. It uses the same owner, permissions, ACL, mount and no-symlink-following checks as presets, without automatically repairing or migrating files. Address names follow the preset-name syntax; display labels are normalized to NFC and limited to 128 characters, rejecting control, bidirectional-control and format characters. An unconfirmed management commit may already be visible: inspect current configuration before retrying. Binding revisions do not add receiver deduplication, ACK or task-completion evidence. diff --git a/docs/i18n-manifest.json b/docs/i18n-manifest.json index da681c4..756a754 100644 --- a/docs/i18n-manifest.json +++ b/docs/i18n-manifest.json @@ -11,7 +11,7 @@ "docs/ai-assistant-guide.md": "9624ec96b92fb688fae3be3c94cb3564c77985091be451fbf1f056a1af9b9d9c", "docs/antigravity.md": "f2b5122a0ce6e6fb5bd4d8ed50ce2c8bd2dc9c98ec8ce328405cf7c2cd24229d", "docs/architecture/agent-transports.md": "01a4e3942e87acb476595859f2e37f9653ea1e3bc19ebc68dced1adf20a6966f", - "docs/cli-reference.md": "1e192fd8e9975bd3cc50b67a417d320db349a33df771ef44362ae1ff1d9542dc", + "docs/cli-reference.md": "803668e9cc554e76ec9dabbb29560a7d2cbd9357370edccc9aa97eabcbc8c38a", "docs/compatibility-v1.md": "7e551aad37a369faff7e370728376763efb54c2c9e9cfd8556a0c19aabc3d103", "docs/contracts/handoff-v1.md": "46a953010c49214bd8f969412f26713384fbe09a0ba78ebf0fef75da40d0d889", "docs/diagnostics.md": "0949e53612eeab2cd7c7bbda498e14d71e9cb1b1189aa7722030cb8702cd8481", @@ -49,13 +49,13 @@ "docs/releases/v1.1.2.md": "3ffe3d6daa8e403e9f3c5e83ec81c3afa9f10750627b31362990ec5b92326f3a", "docs/releases/v1.2.0.md": "9a153493fb3d25306306a05f6c1f5672d7d7becfe008f371770ce2d13d7e9b38", "docs/releases/v1.2.1.md": "70a3026c2d874a6fd7addcaef840ecfa84bf4f33a0165605217379acffa4fddb", - "docs/releases/v1.3.0.md": "2e468dcf868a59394b681a4bb73683683f08e2d2f51bbf6f76adb984b70d737b", + "docs/releases/v1.3.0.md": "a422901b83c85cfb48ac0ad2f99dbc82dca46c4929a3016acd15010e4a18188b", "docs/validation/69-rc.md": "e490c6a9ad0fec9108b91c74922cedac7ddf214ed405f8f5523da22f48a4b222", "docs/validation/85-antigravity.md": "f89b175191cd98ab03d4029b487065133814b3c8dd8de8cd0a5cc367e2579e4f", "docs/wake.md": "cde135da2ea7be21c815bb265e694f737dbe467d8e76bb82eb118e3b86e29d22", "plugins/session-peer/README.md": "a4eeae54caac9ad824d740f7f319561f060bc9c2bbbbf7def2bdd8e36dbcd1c6", "README.md": "0141cec936141c2bb13283b29440ad5c398f38bbc27ddb20013ff5e46175dadc", - "RELEASING.md": "1cc2a3738078100de7c6c2600fb96bef58f00b1b8ce253509158d25068393c18", + "RELEASING.md": "9e99dd741b4d221064664176b9c09f972ae4d82379f0ac4479853832dacad042", "SECURITY.md": "8f018f6f98002312e143609b9734aeb971ca5217e146597c06b57b5645031046" } } diff --git a/docs/ja/cli-reference.md b/docs/ja/cli-reference.md index d608947..de1bcac 100644 --- a/docs/ja/cli-reference.md +++ b/docs/ja/cli-reference.md @@ -225,7 +225,7 @@ session-peer address remove review --expect-revision 'ab1:' Claude アドレスは選択した `tg1:` 世代を保存し、投入前に既存の接続相手を検証する前提条件を適用します。Codex アドレスは完全なスレッド UUID、正確な home、`aw1:` writer 観測を保存し、副作用が発生する前に既存の検査を繰り返します。Codex の世代は引き続き**未対応**です。Writer の観測と再検証は、元の native インスタンス世代を原子的に検証する保証ではありません。Writer が変わった、または確認できない場合は明示的な再選択が必要で、自動的な宛先変更や再実行は行いません。SSH の選択には実際の接続で検証されたホスト鍵が必要で、実際の送信でも同じ鍵に固定します。これは人物を認証するものでも、SSH 設定や SQLite 保存先の同一性を証明するものでもありません。 -実際の送信には現在の `--address-revision` と正確な `--confirm-target` の両方が必要で、dry-run では省略できます。`--address` は `--to`、`--preset`、明示的なホスト・native・SSH の上書き、ペアリング済みデバイス、wake、handoff、Reply-To URI の経路指定とは併用できません。通常のメッセージ入力と上限は変わりません。不確実な結果でも自動再送は許可されません。通常のメッセージ入力とともに `send --address NAME --dry-run --explain` を使うと、テキスト形式の配信プレビューを確認できます。上記の JSON・wake・handoff の制限は引き続き適用されます。 +実際の送信には現在の `--address-revision` と正確な `--confirm-target` の両方が必要で、dry-run では省略できます。`--address` は `--to`、`--preset`、明示的なホスト・native・SSH の上書き、ペアリング済みデバイス、wake、handoff、Reply-To URI の経路指定とは併用できません。通常のメッセージ入力と上限は変わりません。不確実な結果でも自動再送は許可されません。通常のメッセージ入力とともに `send --address NAME --dry-run --explain` を使うと、テキスト形式の配信プレビューを確認できます。`--explain` は JSON 出力と併用できず、`--address` の wake・handoff 制限も引き続き適用されます。 保存先は `destinations.json` の隣にある別の `addresses.json` です。`schemaVersion: 1`、64 KiB の上限、最大 128 件の項目を使用します。プリセットと同じ所有者・権限・ACL・マウントの検査と、シンボリックリンクをたどらない経路検査を適用し、ファイルの自動修復や移行は行いません。アドレス名はプリセット名の構文に従います。表示名は NFC に正規化して 128 文字に制限し、制御文字・双方向制御文字・書式文字を拒否します。管理操作の commit が未確認でも変更が既に見えている可能性があるため、再試行前に現在の設定を確認してください。結び付けの revision は、受信側の重複抑止、ACK、タスク完了の証拠を追加しません。 diff --git a/docs/ja/releases/v1.3.0.md b/docs/ja/releases/v1.3.0.md index 90bbaa9..aa70b36 100644 --- a/docs/ja/releases/v1.3.0.md +++ b/docs/ja/releases/v1.3.0.md @@ -15,13 +15,13 @@ - #212 / #331: 入力を表示しない端末入力と独立したフィンガープリント確認を使う、有効期限付き一回限りのペアリングリンクと設定案内。双方が対応ペアリングプロトコルと既存のUnix Relay要件を満たす必要があります。ペアリングは宛先ポリシーやnative承認に代わりません。保留中の申し出の取り消しは、完了したペアリングを失効させません。 - #294 / #332: Mac/Linuxで、特定バージョンの自動ランタイム通知をローカルで非表示にし、明示的に解除する操作。管理はオフラインで行い、明示的な更新確認とスキル通知の既存動作は維持します。 -正確な組み合わせ、プラットフォーム制限、エラー動作は[CLIリファレンス](../cli-reference.md)、[handoffガイド](../handoff-runtime.md)、[ペアリング機器ガイド](../paired-devices.md)を参照してください。統合変更には回帰テストの安定化と、期限切れRelay roomの利用可否判定の修正も含まれます。再実行の成功だけでは、過去の別の失敗の原因は特定できません。 +正確な組み合わせ、プラットフォーム制限、エラー動作は[CLIリファレンス](../cli-reference.md)、[handoffガイド](../handoff-runtime.md)、[ペアリング機器ガイド](../paired-devices.md)を参照してください。統合変更には回帰テストの安定化と、Python Relay(`session_peer_relay/relay.py`)の期限切れroomの利用可否判定の修正も含まれます。稼働中のRelayに適用するには運用者による更新と再起動が必要です。サービスの配備は行っていません。再実行の成功だけでは、過去の別の失敗の原因は特定できません。 ## 互換性と残る作業 コアランタイムはPython 3.9+を維持します。任意のMCPはPython 3.10+、Unix/WSL Relay receiverはPython 3.11+が必要です。コアlocal/SSH利用に外部Python依存関係は追加しません。通常の送信結果は、消費、受信ACK、タスク完了と区別します。不確定な結果は自動再送を許可しません。 -互換スキルコピーはcompanion 0.3.3、最小ランタイム0.9.1、案内範囲全体の基準1.0.1を維持します。companionの1.3案内は別途レビューする文書更新です。このランタイムの公開によってスキルがインストールまたは公開されるわけではありません。プラグインとTypeScriptのバージョンも独立しています。 +GitHubリリースには公開済みcompanion 0.3.3の互換 `SKILL.md` 成果物を含み、最小ランタイム0.9.1、案内範囲全体の基準1.0.1を維持します。新しいcompanion 1.3案内は別途レビューする文書更新であり、本ランタイムリリースには含まれず、これによってインストールまたは公開されるものでもありません。プラグインとTypeScriptのバージョンも独立しています。 Side Session・steering研究(#245/#247、Draft #246/#248)はLong-termに割り当てられ、リリース機能には含まれません。残るnative世代、handoff、ストレージ、起動時の受け入れ作業(#180/#181/#268/#304/#306/#307)は本リリースで完了しません。一般的なCodex ACK、最初の入力前の配信、Antigravity正式対応を新たに主張しません。 @@ -29,6 +29,6 @@ Side Session・steering研究(#245/#247、Draft #246/#248)はLong-termに割 準備PRの最新レビューとCI、その後の保護されたmainの正確なコミットでのCIと依存関係監査が必要です。生成された単独ファイルの一致、4言語の文書、パッケージ内容、新規インストールを確認します。ローカル統合・ビルド結果は事前検証であり、公開成果物や新たな実エージェント・プラットフォーム受け入れ検証ではありません。 -承認済みのタグとドラフトを準備した後、preparation workflowとattach-draftジョブの成功を待ちます。公開前に、不変の成果物7件、`SHA256SUMS`、`release-provenance.json`、認証済みattestationを正確なタグとコミットに照合します。必須の人手によるPyPI環境承認は維持します。公開証拠は別途記録し、この固定文書を改訂するために不変の成果物を置き換えないでください。 +承認済みのタグとドラフトを準備した後、preparation workflowとattach-draftジョブの成功を待ちます。公開前に、`SHA256SUMS`と`release-provenance.json`を含む不変の成果物7件と認証済みattestationを正確なタグとコミットに照合します。必須の人手によるPyPI環境承認は維持します。公開証拠は別途記録し、この固定文書を改訂するために不変の成果物を置き換えないでください。 パッケージ公開はControl/Relayサービスの配備やインストール済み機器の更新を含みません。運用への反映と実際の受け入れ検証は別です。 diff --git a/docs/ko/cli-reference.md b/docs/ko/cli-reference.md index e4f7698..b41d0b1 100644 --- a/docs/ko/cli-reference.md +++ b/docs/ko/cli-reference.md @@ -225,7 +225,7 @@ session-peer address remove review --expect-revision 'ab1:' Claude 주소는 선택한 `tg1:` 세대를 저장하고 제출 전에 기존 연결 상대 확인 조건을 적용합니다. Codex 주소는 전체 스레드 UUID, 정확한 home과 `aw1:` writer 관찰을 저장하며 효과가 발생하기 전에 기존 검사를 반복합니다. Codex 세대는 계속 **미지원**입니다. Writer 관찰과 재검증은 원래 native 인스턴스 세대를 원자적으로 검증하는 보장이 아닙니다. Writer가 달라지거나 확인할 수 없으면 명시적으로 다시 선택해야 하며, 자동 대상 변경이나 재실행은 하지 않습니다. SSH 선택은 실제 연결에서 검증한 호스트 키를 요구하며 실제 전송에도 같은 키를 고정합니다. 이것으로 사람을 인증하거나 SSH 설정·SQLite 저장소의 동일성을 증명하지는 않습니다. -실제 전송에는 현재 `--address-revision`과 정확한 `--confirm-target`이 모두 필요하며 dry-run에서는 생략할 수 있습니다. `--address`는 `--to`, `--preset`, 명시적 호스트·native·SSH 재정의, 페어링 기기, wake, handoff나 Reply-To URI 경로와 함께 사용할 수 없습니다. 일반 메시지 입력과 한도는 그대로 유지됩니다. 결과가 불확실해도 자동 재전송은 허용되지 않습니다. 일반 메시지 입력과 함께 `send --address NAME --dry-run --explain`을 사용하면 텍스트 전달 미리보기를 볼 수 있습니다. 위의 JSON·wake·handoff 제한은 그대로 적용됩니다. +실제 전송에는 현재 `--address-revision`과 정확한 `--confirm-target`이 모두 필요하며 dry-run에서는 생략할 수 있습니다. `--address`는 `--to`, `--preset`, 명시적 호스트·native·SSH 재정의, 페어링 기기, wake, handoff나 Reply-To URI 경로와 함께 사용할 수 없습니다. 일반 메시지 입력과 한도는 그대로 유지됩니다. 결과가 불확실해도 자동 재전송은 허용되지 않습니다. 일반 메시지 입력과 함께 `send --address NAME --dry-run --explain`을 사용하면 텍스트 전달 미리보기를 볼 수 있습니다. `--explain`은 JSON 출력과 함께 사용할 수 없으며, `--address`의 wake·handoff 제한은 그대로 적용됩니다. 저장소는 `destinations.json` 옆의 별도 `addresses.json`이며 `schemaVersion: 1`, 64 KiB 한도와 최대 128개 항목을 사용합니다. 프리셋과 같은 소유자·권한·ACL·마운트 검사 및 심볼릭 링크를 따르지 않는 경로 검사를 적용하고 파일을 자동 복구하거나 이전하지 않습니다. 주소 이름은 프리셋 이름 문법을 따릅니다. 표시 이름은 NFC로 정규화하고 128자로 제한하며 제어 문자·양방향 제어 문자·서식 문자를 거부합니다. 관리 작업의 commit을 확인하지 못했어도 변경이 이미 보일 수 있으므로 재시도 전에 현재 설정을 확인하세요. 수신자 바인딩 revision은 수신 측 중복 방지, ACK나 작업 완료 증거를 추가하지 않습니다. diff --git a/docs/ko/releases/v1.3.0.md b/docs/ko/releases/v1.3.0.md index bf32c11..b9b39fc 100644 --- a/docs/ko/releases/v1.3.0.md +++ b/docs/ko/releases/v1.3.0.md @@ -15,13 +15,13 @@ - #212 / #331: 숨김 터미널 입력과 별도 지문 확인을 사용하는 만료·일회용 페어링 링크와 안내형 설정을 추가했습니다. 양쪽은 지원되는 페어링 프로토콜과 기존 Unix Relay 요건을 충족해야 합니다. 페어링은 대상 정책이나 native 승인을 대신하지 않으며, 대기 중인 제안 취소는 완료된 페어링을 폐기하지 않습니다. - #294 / #332: Mac/Linux에서 특정 버전의 자동 런타임 알림을 로컬로 숨기고 명시적으로 해제할 수 있습니다. 관리 작업은 오프라인이며 명시적 업데이트 확인과 스킬 알림의 기존 동작은 유지합니다. -정확한 조합·플랫폼 제한·오류 동작은 [CLI 안내](../cli-reference.md), [handoff 안내](../handoff-runtime.md), [페어링 기기 안내](../paired-devices.md)를 참고하십시오. 통합 변경에는 회귀 테스트 안정화와 만료된 Relay room의 사용 가능 여부 검사 수정도 포함됩니다. 재실행 통과만으로 이전의 별도 실패 원인이 밝혀지는 것은 아닙니다. +정확한 조합·플랫폼 제한·오류 동작은 [CLI 안내](../cli-reference.md), [handoff 안내](../handoff-runtime.md), [페어링 기기 안내](../paired-devices.md)를 참고하십시오. 통합 변경에는 회귀 테스트 안정화와 Python Relay(`session_peer_relay/relay.py`)의 만료된 room 사용 가능 여부 검사 수정도 포함됩니다. 실행 중인 Relay에 이를 적용하려면 운영자의 업데이트와 재시작이 필요하며, 서비스 배포는 수행하지 않았습니다. 재실행 통과만으로 이전의 별도 실패 원인이 밝혀지는 것은 아닙니다. ## 호환성과 남은 작업 핵심 런타임은 Python 3.9+를 유지합니다. 선택적 MCP는 Python 3.10+, Unix/WSL Relay receiver는 Python 3.11+가 필요합니다. 핵심 local/SSH 사용에 외부 Python 의존성을 추가하지 않습니다. 일반 제출 결과는 소비·수신 ACK·작업 완료와 구분합니다. 불확실한 결과는 자동 재전송을 허용하지 않습니다. -호환 스킬 사본은 companion 0.3.3이며 최소 런타임 0.9.1, 전체 안내 범위 기준 1.0.1을 유지합니다. companion의 1.3 안내는 별도로 검토하는 문서 변경입니다. 이 런타임의 공개가 해당 스킬의 설치나 공개를 뜻하지 않습니다. 플러그인과 TypeScript 버전도 독립적입니다. +GitHub 릴리스에는 공개된 companion 0.3.3의 호환 `SKILL.md` 산출물이 포함되며 최소 런타임 0.9.1, 전체 안내 범위 기준 1.0.1을 유지합니다. 새로운 companion 1.3 안내는 별도로 검토하는 문서 변경으로, 이 런타임 릴리스에 포함되거나 이를 통해 설치·공개되지 않습니다. 플러그인과 TypeScript 버전도 독립적입니다. Side Session·steering 연구(#245/#247, Draft #246/#248)는 Long-term에 배정했으며 릴리스 기능이 아닙니다. 남은 native 세대·handoff·저장소·시작 시점 수락 조건(#180/#181/#268/#304/#306/#307)은 이 릴리스로 완료되지 않습니다. 일반 Codex ACK·첫 입력 전 전달·Antigravity 정식 지원을 새로 주장하지 않습니다. @@ -29,6 +29,6 @@ Side Session·steering 연구(#245/#247, Draft #246/#248)는 Long-term에 배정 준비 PR의 최신 리뷰·CI와 이후 보호된 main의 정확한 커밋에서 CI·의존성 감사를 통과해야 합니다. 생성된 독립 실행 파일의 일치, 4개 언어 문서, 패키지 내용과 신규 설치를 확인합니다. 로컬 통합·빌드 결과는 사전 검증 자료이며 공개 산출물이나 새로운 실제 에이전트·플랫폼 수락 검증이 아닙니다. -승인된 태그와 초안을 준비한 뒤 preparation workflow와 attach-draft 작업의 성공을 기다립니다. 공개 전에 불변 산출물 7개, `SHA256SUMS`, `release-provenance.json`, 인증된 attestation을 정확한 태그·커밋과 대조합니다. 사람이 수행하는 필수 PyPI 환경 승인은 유지합니다. 공개 증거는 별도로 기록하고, 고정된 이 문서를 수정하려고 불변 산출물을 교체하지 않습니다. +승인된 태그와 초안을 준비한 뒤 preparation workflow와 attach-draft 작업의 성공을 기다립니다. 공개 전에 `SHA256SUMS`와 `release-provenance.json`을 포함한 불변 산출물 7개와 인증된 attestation을 정확한 태그·커밋과 대조합니다. 사람이 수행하는 필수 PyPI 환경 승인은 유지합니다. 공개 증거는 별도로 기록하고, 고정된 이 문서를 수정하려고 불변 산출물을 교체하지 않습니다. 패키지 공개는 Control/Relay 서비스 배포나 설치된 기기의 업데이트를 포함하지 않습니다. 운영 적용과 실제 수락 검증은 별개입니다. diff --git a/docs/releases/v1.3.0.md b/docs/releases/v1.3.0.md index 86d4597..75a16e5 100644 --- a/docs/releases/v1.3.0.md +++ b/docs/releases/v1.3.0.md @@ -15,13 +15,13 @@ The integrated source base is `a0e7af032fd372334782cc3ac3d97b21c71dd797`, before - #212 / #331: expiring one-use pairing links and guided setup, using hidden terminal input and independent fingerprint confirmation. Both endpoints need the supported pairing protocol and existing Unix Relay requirements. Pairing does not replace target policy or native approvals; pending-offer cancellation does not revoke a completed pairing. - #294 / #332: local, per-version automatic runtime-notice dismissal on Mac/Linux, with an explicit clear operation. Management is offline; explicit update checks and skill notices retain their existing behavior. -See the [CLI reference](../cli-reference.md), [handoff guide](../handoff-runtime.md) and [paired-device guide](../paired-devices.md) for exact combinations, platform limits and error behavior. The integrated changes also contain regression-test stabilization and an expired Relay-room eligibility fix; passing reruns alone do not establish the cause of earlier unrelated failures. +See the [CLI reference](../cli-reference.md), [handoff guide](../handoff-runtime.md) and [paired-device guide](../paired-devices.md) for exact combinations, platform limits and error behavior. The integrated changes also contain regression-test stabilization and an expired-room eligibility fix in the Python Relay (`session_peer_relay/relay.py`). Applying that fix to a running Relay requires an operator update and restart; no service deployment was performed. Passing reruns alone do not establish the cause of earlier unrelated failures. ## Compatibility and remaining work Python 3.9+ remains the core runtime floor; optional MCP requires Python 3.10+, and the Unix/WSL Relay receiver requires Python 3.11+. Core local/SSH use adds no third-party Python dependency. Ordinary submission results remain distinct from consumption, receipt ACK and task completion. Unknown outcomes never authorize automatic resend. -The compatibility skill copy remains companion 0.3.3, with minimum runtime 0.9.1 and full coverage 1.0.1. Companion 1.3 guidance is a separately reviewed document update; publication of this runtime does not install or publish it. Plugin and TypeScript versions remain independent. +The GitHub release includes the compatibility `SKILL.md` asset from published companion 0.3.3, with minimum runtime 0.9.1 and full coverage 1.0.1. The newer companion 1.3 guidance is a separately reviewed document update; it is not included, installed or published by this runtime release. Plugin and TypeScript versions remain independent. Side Session and steering research (#245/#247, Draft #246/#248) are assigned to Long-term and are not release features. The remaining native generation, handoff, storage and startup acceptance work (#180/#181/#268/#304/#306/#307) is not completed by this release. No general Codex ACK, delivery before a TUI's first input or Antigravity stable-support claim is added. @@ -29,6 +29,6 @@ Side Session and steering research (#245/#247, Draft #246/#248) are assigned to Require current review and CI for the preparation PR, then successful CI and dependency audits on its exact protected-main commit. Verify generated standalone consistency, four-language documentation, package contents and fresh installations. Local integration and build results are rehearsal evidence, not the published artifacts or new live-agent/platform acceptance. -After the authorized tag and draft are prepared, wait for the preparation workflow and its attach-draft job to succeed. Verify all seven immutable assets, `SHA256SUMS`, `release-provenance.json` and authenticated attestations against the exact tag and commit before publication. Required human PyPI environment approval remains in effect. Record publication evidence separately; do not replace immutable assets to revise these frozen notes. +After the authorized tag and draft are prepared, wait for the preparation workflow and its attach-draft job to succeed. Verify all seven immutable assets (including `SHA256SUMS` and `release-provenance.json`) and authenticated attestations against the exact tag and commit before publication. Required human PyPI environment approval remains in effect. Record publication evidence separately; do not replace immutable assets to revise these frozen notes. Package publication does not deploy Control/Relay services or update installed devices. Operational rollout and live acceptance remain separate. diff --git a/docs/zh-CN/cli-reference.md b/docs/zh-CN/cli-reference.md index 7f27bc0..ea3e756 100644 --- a/docs/zh-CN/cli-reference.md +++ b/docs/zh-CN/cli-reference.md @@ -180,7 +180,7 @@ session-peer address remove review --expect-revision 'ab1:' Claude 地址保存选定的 `tg1:` 代次,并在提交前使用现有的连接对端前置检查。Codex 地址保存完整线程 UUID、准确的 home 和 `aw1:` writer 观察,并在产生副作用前重复现有检查。Codex 代次仍**不受支持**:writer 观察和重新验证并不提供对原有 native 实例代次的原子验证保证。Writer 已更改或无法确认时,必须显式重新选择,不会自动改选目标或重放。SSH 选择要求在实际连接上验证主机密钥,并在实际发送时固定使用同一密钥。这既不认证人员身份,也不证明 SSH 配置或 SQLite 存储的同一性。 -实际发送必须同时提供当前 `--address-revision` 和准确的 `--confirm-target`,dry-run 可以省略。`--address` 不能与 `--to`、`--preset`、显式主机、native 或 SSH 覆盖项、配对设备、wake、handoff 或 Reply-To URI 路由组合使用。常规消息输入和限制保持不变。结果未知时也不允许自动重发。提供常规消息输入后,可使用 `send --address NAME --dry-run --explain` 查看纯文本传递预览。上述 JSON、wake 和 handoff 限制仍然适用。 +实际发送必须同时提供当前 `--address-revision` 和准确的 `--confirm-target`,dry-run 可以省略。`--address` 不能与 `--to`、`--preset`、显式主机、native 或 SSH 覆盖项、配对设备、wake、handoff 或 Reply-To URI 路由组合使用。常规消息输入和限制保持不变。结果未知时也不允许自动重发。提供常规消息输入后,可使用 `send --address NAME --dry-run --explain` 查看纯文本传递预览。`--explain` 不支持 JSON 输出,`--address` 的 wake 和 handoff 限制仍然适用。 存储是位于 `destinations.json` 旁的独立 `addresses.json`,采用 `schemaVersion: 1`,大小限制为 64 KiB,最多 128 项。它使用与预设相同的所有者、权限、ACL、挂载和不跟随符号链接的路径检查,不自动修复或迁移文件。地址名称遵循预设名称语法;显示标签会规范化为 NFC,最多 128 个字符,并拒绝控制字符、双向控制字符和格式字符。管理操作的 commit 未确认时,更改也可能已经可见,重试前请检查当前配置。绑定 revision 不增加接收侧去重、ACK 或任务完成证据。 diff --git a/docs/zh-CN/releases/v1.3.0.md b/docs/zh-CN/releases/v1.3.0.md index e090ef6..ad0a7fc 100644 --- a/docs/zh-CN/releases/v1.3.0.md +++ b/docs/zh-CN/releases/v1.3.0.md @@ -15,13 +15,13 @@ - #212 / #331:增加有时限、一次性的配对链接和引导设置,采用隐藏终端输入与独立指纹确认。两端均须满足受支持的配对协议及现有Unix Relay要求。配对不取代目标策略或native审批;取消待处理邀请不会撤销已完成的配对。 - #294 / #332:在Mac/Linux本地隐藏指定版本的自动运行时通知,并提供显式清除操作。管理操作离线完成;显式更新检查和技能通知保持原有行为。 -具体组合、平台限制及错误行为请参阅[CLI参考](../cli-reference.md)、[handoff指南](../handoff-runtime.md)和[配对设备指南](../paired-devices.md)。集成变更还包含回归测试稳定性改进,以及过期Relay room的可用性判断修复。重跑通过本身不能确定此前其他失败的原因。 +具体组合、平台限制及错误行为请参阅[CLI参考](../cli-reference.md)、[handoff指南](../handoff-runtime.md)和[配对设备指南](../paired-devices.md)。集成变更还包含回归测试稳定性改进,以及Python Relay(`session_peer_relay/relay.py`)中过期room的可用性判断修复。运行中的Relay需由操作者更新并重启后才能应用此修复;尚未执行服务部署。重跑通过本身不能确定此前其他失败的原因。 ## 兼容性与剩余工作 核心运行时仍要求Python 3.9+;可选MCP要求Python 3.10+,Unix/WSL Relay receiver要求Python 3.11+。核心local/SSH使用不增加第三方Python依赖。普通提交结果仍区别于消费、收件ACK和任务完成。不确定结果绝不授权自动重发。 -兼容技能副本仍为companion 0.3.3,最低运行时0.9.1、完整指南覆盖基准1.0.1。companion的1.3指南是单独审核的文档更新;发布本运行时不会安装或发布该技能。插件与TypeScript版本也保持独立。 +GitHub发布包含来自已发布companion 0.3.3的兼容 `SKILL.md` 产物,最低运行时0.9.1、完整指南覆盖基准1.0.1保持不变。新的companion 1.3指南是单独审核的文档更新,不包含在本运行时发布中,也不会由此安装或发布。插件与TypeScript版本也保持独立。 Side Session和steering研究(#245/#247、Draft #246/#248)已归入Long-term,不属于发布功能。剩余的native代次、handoff、存储及启动验收工作(#180/#181/#268/#304/#306/#307)不会因本次发布而完成。不新增通用Codex ACK、首次输入前投递或Antigravity正式支持的声明。 @@ -29,6 +29,6 @@ Side Session和steering研究(#245/#247、Draft #246/#248)已归入Long-term 准备PR须完成最新审核与CI,随后其对应的受保护main准确提交须通过CI和依赖审计。检查生成的独立文件一致性、四语言文档、软件包内容及全新安装。本地集成与构建结果是预演证据,并非发布产物或新的真实代理、平台验收证据。 -准备已授权的标签与草稿后,等待preparation workflow及attach-draft任务成功。发布前,将七个不可变产物、`SHA256SUMS`、`release-provenance.json` 及经过认证的attestation与准确标签、提交核对。仍需执行必需的人工PyPI环境审批。另行记录实际发布证据;不得为修改这份冻结文档而替换不可变产物。 +准备已授权的标签与草稿后,等待preparation workflow及attach-draft任务成功。发布前,将包括 `SHA256SUMS` 和 `release-provenance.json` 在内的七个不可变产物及经过认证的attestation与准确标签、提交核对。仍需执行必需的人工PyPI环境审批。另行记录实际发布证据;不得为修改这份冻结文档而替换不可变产物。 软件包发布不包括Control/Relay服务部署或已安装设备更新。运行环境部署与真实验收仍为独立工作。 diff --git a/tests/docs/test_stable_candidate.py b/tests/docs/test_stable_candidate.py index 6a5ef84..cd9686a 100644 --- a/tests/docs/test_stable_candidate.py +++ b/tests/docs/test_stable_candidate.py @@ -232,7 +232,7 @@ def test_completed_release_examples_are_explicitly_historical(self): self.assertIn("state_db_missing", text) self.assertIn("POSIX", text) - def test_published_release_keeps_experimental_acceptance_gates(self): + def test_source_version_keeps_experimental_acceptance_gates(self): for suffix in ("", ".ko", ".ja", ".zh-CN"): text = (ROOT / ("README" + suffix + ".md")).read_text(encoding="utf-8") self.assertIn("**1.3.0**", text) @@ -259,7 +259,7 @@ def test_package_and_generated_core_version_agree(self): self.assertIn('__version__ = "1.3.0"', (ROOT / "session_peer_core/common.py").read_text(encoding="utf-8")) - def test_all_current_readmes_and_runbooks_use_stable_version(self): + def test_current_readmes_and_runbooks_match_source_version(self): for suffix in ("", ".ko", ".ja", ".zh-CN"): for stem in ("README", "RELEASING"): with self.subTest(stem=stem, suffix=suffix): From 11d3abdeae14a2444b2c0bc453c94e7ac2eb8f3e Mon Sep 17 00:00:00 2001 From: YEONGUK LEE Date: Fri, 23 Oct 2026 14:57:42 +0900 Subject: [PATCH 3/4] docs(i18n): refine release asset and JSON restriction wording --- docs/ja/releases/v1.3.0.md | 2 +- docs/zh-CN/cli-reference.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/ja/releases/v1.3.0.md b/docs/ja/releases/v1.3.0.md index aa70b36..4edbe6d 100644 --- a/docs/ja/releases/v1.3.0.md +++ b/docs/ja/releases/v1.3.0.md @@ -21,7 +21,7 @@ コアランタイムはPython 3.9+を維持します。任意のMCPはPython 3.10+、Unix/WSL Relay receiverはPython 3.11+が必要です。コアlocal/SSH利用に外部Python依存関係は追加しません。通常の送信結果は、消費、受信ACK、タスク完了と区別します。不確定な結果は自動再送を許可しません。 -GitHubリリースには公開済みcompanion 0.3.3の互換 `SKILL.md` 成果物を含み、最小ランタイム0.9.1、案内範囲全体の基準1.0.1を維持します。新しいcompanion 1.3案内は別途レビューする文書更新であり、本ランタイムリリースには含まれず、これによってインストールまたは公開されるものでもありません。プラグインとTypeScriptのバージョンも独立しています。 +GitHubリリースには公開済みcompanion 0.3.3の互換 `SKILL.md` 成果物が含まれ、最小ランタイム0.9.1、案内範囲全体の基準1.0.1を維持します。新しいcompanion 1.3案内は別途レビューする文書更新であり、本ランタイムリリースには含まれず、これによってインストールまたは公開されるものでもありません。プラグインとTypeScriptのバージョンも独立しています。 Side Session・steering研究(#245/#247、Draft #246/#248)はLong-termに割り当てられ、リリース機能には含まれません。残るnative世代、handoff、ストレージ、起動時の受け入れ作業(#180/#181/#268/#304/#306/#307)は本リリースで完了しません。一般的なCodex ACK、最初の入力前の配信、Antigravity正式対応を新たに主張しません。 diff --git a/docs/zh-CN/cli-reference.md b/docs/zh-CN/cli-reference.md index ea3e756..b7a424f 100644 --- a/docs/zh-CN/cli-reference.md +++ b/docs/zh-CN/cli-reference.md @@ -180,7 +180,7 @@ session-peer address remove review --expect-revision 'ab1:' Claude 地址保存选定的 `tg1:` 代次,并在提交前使用现有的连接对端前置检查。Codex 地址保存完整线程 UUID、准确的 home 和 `aw1:` writer 观察,并在产生副作用前重复现有检查。Codex 代次仍**不受支持**:writer 观察和重新验证并不提供对原有 native 实例代次的原子验证保证。Writer 已更改或无法确认时,必须显式重新选择,不会自动改选目标或重放。SSH 选择要求在实际连接上验证主机密钥,并在实际发送时固定使用同一密钥。这既不认证人员身份,也不证明 SSH 配置或 SQLite 存储的同一性。 -实际发送必须同时提供当前 `--address-revision` 和准确的 `--confirm-target`,dry-run 可以省略。`--address` 不能与 `--to`、`--preset`、显式主机、native 或 SSH 覆盖项、配对设备、wake、handoff 或 Reply-To URI 路由组合使用。常规消息输入和限制保持不变。结果未知时也不允许自动重发。提供常规消息输入后,可使用 `send --address NAME --dry-run --explain` 查看纯文本传递预览。`--explain` 不支持 JSON 输出,`--address` 的 wake 和 handoff 限制仍然适用。 +实际发送必须同时提供当前 `--address-revision` 和准确的 `--confirm-target`,dry-run 可以省略。`--address` 不能与 `--to`、`--preset`、显式主机、native 或 SSH 覆盖项、配对设备、wake、handoff 或 Reply-To URI 路由组合使用。常规消息输入和限制保持不变。结果未知时也不允许自动重发。提供常规消息输入后,可使用 `send --address NAME --dry-run --explain` 查看纯文本传递预览。`--explain` 不能与 JSON 输出组合使用,`--address` 的 wake 和 handoff 限制仍然适用。 存储是位于 `destinations.json` 旁的独立 `addresses.json`,采用 `schemaVersion: 1`,大小限制为 64 KiB,最多 128 项。它使用与预设相同的所有者、权限、ACL、挂载和不跟随符号链接的路径检查,不自动修复或迁移文件。地址名称遵循预设名称语法;显示标签会规范化为 NFC,最多 128 个字符,并拒绝控制字符、双向控制字符和格式字符。管理操作的 commit 未确认时,更改也可能已经可见,重试前请检查当前配置。绑定 revision 不增加接收侧去重、ACK 或任务完成证据。 From a5fae7064ec2059f184e84a1a88fdfebf5d7f80c Mon Sep 17 00:00:00 2001 From: YEONGUK LEE Date: Fri, 23 Oct 2026 15:09:05 +0900 Subject: [PATCH 4/4] docs(release): link v1.3.0 from all documentation maps --- docs/README.md | 2 ++ docs/i18n-manifest.json | 2 +- docs/ja/README.md | 2 ++ docs/ko/README.md | 2 ++ docs/zh-CN/README.md | 2 ++ 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 5048f1d..1aedc30 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,6 +24,8 @@ installation paths. ## Development and history +- [v1.3.0 release notes](releases/v1.3.0.md) describe the six merged features, supported combinations and release verification. + - [v1.2.1 preparation notes](releases/v1.2.1.md) record the 2026-10-19 patch candidate for Orca Claude discovery, skill metadata reading and the compatibility skill copy; publication remains separate. - [v1.2.0 published record and historical preparation](releases/v1.2.0.md) record the 2026-10-16 publication separately from preparation started on 2026-10-15 and updated on 2026-10-16, the merged six-PR scope and remaining acceptance gates. diff --git a/docs/i18n-manifest.json b/docs/i18n-manifest.json index 756a754..54ac778 100644 --- a/docs/i18n-manifest.json +++ b/docs/i18n-manifest.json @@ -20,7 +20,7 @@ "docs/mcp.md": "a64010cdd63f2cde6a0052450bed2d05faa0f19c93c76143cb0d585d36f8ff62", "docs/multi-home-list.md": "f8d8e3adf727e4842ea7c4d45e8f6523b11d0513bf2509d4d1204645875e6489", "docs/paired-devices.md": "08c2643d08f769deb725c6123193c1ea9593c775afde84a158a41fe6e7d1be82", - "docs/README.md": "03a461054c1570741c2022685014a1b947f0234145b83f4c8297241d5edcf327", + "docs/README.md": "775fbf51947b2adca22df3fa5a3bcbec3262a22280b488ba3169997afe6ebbe5", "docs/relay-auth.md": "e6da5291ce6a9da31e79e66ceeff7e9fef7e95046359acbf04d708c96ffab62f", "docs/relay-development-plan.md": "0abf750b36275ea4e467a0020e560277f08689f2d574aed7674133705383b1ff", "docs/relay-edge-policy.md": "c1c7f7a1c4303943c78ca334dab4034f66c0c272e40c007d07c3da2a496155eb", diff --git a/docs/ja/README.md b/docs/ja/README.md index 8eac137..96e61a1 100644 --- a/docs/ja/README.md +++ b/docs/ja/README.md @@ -23,6 +23,8 @@ ## 開発と履歴 +- [v1.3.0リリースノート](releases/v1.3.0.md)は、マージ済みの6機能、対応する組み合わせ、リリース検証を説明します。 + - [v1.2.1準備記録](releases/v1.2.1.md)は、Orca Claude検索・スキルメタデータ読み取り・互換スキルコピーの2026-10-19パッチ候補を記録し、公開は別です。 - [v1.2.0公開記録と過去の準備](releases/v1.2.0.md)は2026-10-16の公開と、2026-10-15に開始し2026-10-16に更新した準備、マージ済み6件のPRの範囲と残る受け入れ条件を区別します。 diff --git a/docs/ko/README.md b/docs/ko/README.md index db977d8..c9c3232 100644 --- a/docs/ko/README.md +++ b/docs/ko/README.md @@ -23,6 +23,8 @@ ## 개발과 이력 +- [v1.3.0 릴리스 노트](releases/v1.3.0.md)는 병합된 기능 6개, 지원 조합과 릴리스 검증을 설명합니다. + - [v1.2.1 준비 기록](releases/v1.2.1.md)은 Orca Claude 검색·스킬 메타데이터 판독·호환 스킬 사본을 위한 2026-10-19 패치 후보를 설명하며 공개는 별도입니다. - [v1.2.0 공개 및 과거 준비 기록](releases/v1.2.0.md)은 2026-10-16 공개와 2026-10-15에 시작해 2026-10-16에 갱신한 준비, 병합된 PR 6개 범위와 남은 수락 조건을 구분합니다. diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index d45ab68..8c753b3 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -22,6 +22,8 @@ ## 开发与历史 +- [v1.3.0发行说明](releases/v1.3.0.md)介绍已合并的六项功能、支持的组合和发行验证。 + - [v1.2.1准备记录](releases/v1.2.1.md)说明用于Orca Claude搜索、技能元数据读取及兼容技能副本的2026-10-19补丁候选;发布仍是独立步骤。 - [v1.2.0发布记录与历史准备](releases/v1.2.0.md)区分2026-10-16发布与2026-10-15开始、2026-10-16更新的准备、已合并的6项PR范围和剩余验收条件。