Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
bc1f0b1
docs(design): kc sync 설계 초안 v0.3
AI-Dico Oct 13, 2026
b82b154
docs(design): kc sync 화면 결정(시안 확정) 추가
AI-Dico Oct 13, 2026
1222702
docs(design): kc sync v0.4 — D9·D10 확정, 착수 전 고정 계약(§12)
AI-Dico Oct 13, 2026
0b82f47
docs(design): kc sync §12 정정 — AAD·확정 ACK·journal 레코드·Phase 1 판정
AI-Dico Oct 13, 2026
cb9134e
docs(design): kc sync — Change.parents, 로컬 변경 트랜잭션 경계
AI-Dico Oct 13, 2026
1bde753
docs(design): kc sync — 로컬 변경 복구 표(커밋 여부는 head 로 판정)
AI-Dico Oct 13, 2026
aec06e9
docs(design): kc sync — 복구 표 빈칸(커밋 뒤 이전 값 복귀) 채움
AI-Dico Oct 13, 2026
72a868e
feat(kc-cli): 로컬 확인 L (Touch ID·Windows Hello·polkit)
seunghan91 Oct 13, 2026
ceb348a
feat(kc-sync): sync 판정 순수 로직 크레이트 (decide·한도·슬롯·큐·복구)
seunghan91 Oct 13, 2026
67f3c85
feat(kc-proto): 인박스 v2 와이어와 sync 메시지 타입 (sync Phase 0)
seunghan91 Oct 13, 2026
9c92f39
Merge branches 'lane/proto', 'lane/sync' and 'lane/localauth' into fe…
seunghan91 Oct 13, 2026
e54c912
style: cargo fmt
seunghan91 Oct 13, 2026
8ccba8a
feat(kc-proto): Offer 에 받는 쪽 등록 세대(known_generation)를 싣는다
seunghan91 Oct 13, 2026
c41a257
fix(sync): 리뷰 반영 — 수렴은 보낸 쪽 lineage 를 수입하지 않는다 외 7건
seunghan91 Oct 13, 2026
960d559
style: cargo fmt
seunghan91 Oct 13, 2026
27b1259
feat(kc-cli): kc sync Phase 1 — 엔진·명령·기존 명령 정책·로컬 확인 연결
seunghan91 Oct 13, 2026
07c8023
Merge feat/sync into lane/engine
seunghan91 Oct 13, 2026
d92c5c8
style: clippy·fmt 정리
seunghan91 Oct 13, 2026
d19ae53
docs: kc sync 사용법·프로토콜·보안 한계 (8개 언어 README)
seunghan91 Oct 13, 2026
9262b97
fix(kc-cli): sync 엔진 리뷰 반영 14건
seunghan91 Oct 13, 2026
d35b651
style: cargo fmt
seunghan91 Oct 13, 2026
becc6d9
release: v0.3.0 으로 버전 올림
seunghan91 Oct 13, 2026
c730eb9
fix(kc-cli): 확인 리뷰 반영 — 충돌 중 Offer 범위 검사 외 3건
seunghan91 Oct 13, 2026
99c52f4
fix(kc-cli): 정리 직전에 살아 있는 지문 레코드는 삭제 예약에서 뺀다
seunghan91 Oct 13, 2026
bdd5cc5
fix(kc-cli): 축출 때는 vid 바인딩을 정리하지 않는다
seunghan91 Oct 13, 2026
7aa7d5a
fix(kc-cli): 충돌 중인 항목은 일반 수락이 아니라 resolve 로만 정리한다
seunghan91 Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
*.pem
*.key
.DS_Store
.mockups/
112 changes: 107 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 6 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
[workspace]
resolver = "3"
members = ["crates/kc-wire", "crates/kc-proto", "crates/kc-store", "crates/kc-relay", "crates/kc-cli"]
members = ["crates/kc-wire", "crates/kc-proto", "crates/kc-store", "crates/kc-relay", "crates/kc-cli", "crates/kc-sync"]

[workspace.package]
version = "0.2.0"
version = "0.3.0"
edition = "2024"
rust-version = "1.88"
license = "MIT"
Expand All @@ -15,9 +15,10 @@ authors = ["Dcode <support@1pass.dev>"]
# `dep = { workspace = true, features = [...] }`. A lane that needs a crate that
# isn't listed here may add it to its own Cargo.toml directly.
[workspace.dependencies]
kc-wire = { path = "crates/kc-wire", version = "0.2.0" }
kc-proto = { path = "crates/kc-proto", version = "0.2.0" }
kc-store = { path = "crates/kc-store", version = "0.2.0" }
kc-wire = { path = "crates/kc-wire", version = "0.3.0" }
kc-proto = { path = "crates/kc-proto", version = "0.3.0" }
kc-store = { path = "crates/kc-store", version = "0.3.0" }
kc-sync = { path = "crates/kc-sync", version = "0.3.0" }

anyhow = "1"
thiserror = "2"
Expand Down
25 changes: 25 additions & 0 deletions README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,30 @@ desktop$ kc inbox # speichert, was angekommen ist (bi
`kc peers rm LABEL` hebt die Kopplung eines Geräts auf; geht ein Rechner verloren, führe es auf deinen anderen Rechnern aus.
Wann `kc device rotate` sinnvoll ist, steht in [docs/SECURITY.md](docs/SECURITY.md).

## Synchronisierung

Synchronisiere ausgewählte Einträge zwischen gekoppelten Geräten. **Standardmäßig
wird nichts synchronisiert.** Ersetze `NAME` durch den Namen eines vorhandenen Eintrags:

```console
$ kc sync add NAME # Eintrag aufnehmen und anderen Geräten vorschlagen
$ kc sync # auf beiden Geräten ausführen, um Änderungen auszutauschen
$ kc sync review # Vorschläge und zurückgehaltene Änderungen auf dem Empfänger prüfen
$ kc sync status # Status und lokale Fingerabdrücke anzeigen, niemals Werte
```

Diese Version hält jedes Überschreiben durch ein anderes Gerät zur Prüfung zurück. Jeder
Synchronisierungsschritt, der einen Wert übernimmt, verlangt eine lokale Bestätigung
per Touch ID (oder Systempasswort), Windows Hello oder polkit. Auch die Aufnahme eines
Eintrags verlangt diese Bestätigung. Normale lokale Schreibvorgänge können Änderungen
in die Warteschlange stellen, erlauben aber kein Überschreiben auf anderen Geräten.
Bei Konflikten bleiben die möglichen Werte erhalten. Wähle mit
`kc sync resolve NAME --keep mine` oder `kc sync resolve NAME --keep LABEL` einen Wert.
Die anderen Geräte müssen auch dieses Ergebnis prüfen. `kc sync freeze` stoppt die
Übernahme eingehender Änderungen ohne Bestätigung; `kc sync unfreeze` verlangt eine
Bestätigung des Betriebssystems. Exit-Code 8 bedeutet, dass noch Arbeit aussteht oder
blockiert ist. Siehe die [Sicherheitsgrenzen](docs/SECURITY.md).

## Befehle

| Befehl | Funktion |
Expand All @@ -141,6 +165,7 @@ Wann `kc device rotate` sinnvoll ist, steht in [docs/SECURITY.md](docs/SECURITY.
| `kc adopt --service S [--account A] [--as NAME]` | kopiert einen vorhandenen Schlüsselbundeintrag in kc |
| `kc receive` / `kc send [NAMES…]` | überträgt Einträge mit einem Einmalcode |
| `kc pair`, `kc peers`, `kc inbox`, `kc device` | gemerkte Geräte |
| `kc sync` | ausgewählte Einträge mit gekoppelten Geräten synchronisieren |
| `kc doctor` | prüft den Schlüsselbund, das Relay und die Konfiguration |

## Fehlerbehebung
Expand Down
24 changes: 24 additions & 0 deletions README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,29 @@ desktop$ kc inbox # guarda lo que llegó (se conserva
`kc peers rm LABEL` desempareja un dispositivo; si pierdes una máquina, ejecútalo en las demás.
Consulta [docs/SECURITY.md](docs/SECURITY.md) para saber cuándo usar `kc device rotate`.

## Sincronización

Sincroniza los elementos que elijas entre dispositivos emparejados. **No se
sincroniza nada por defecto.** Sustituye `NAME` por el nombre de un elemento existente:

```console
$ kc sync add NAME # incluye el elemento y lo propone a los otros dispositivos
$ kc sync # ejecútalo en ambos dispositivos para intercambiar cambios
$ kc sync review # revisa propuestas y cambios retenidos en el receptor
$ kc sync status # muestra el estado y las huellas locales, nunca los valores
```

En esta versión, toda sobrescritura remota queda pendiente de revisión. Cada paso de
sincronización que aplica un valor pide confirmación local mediante Touch ID
(o la contraseña del sistema), Windows Hello o polkit. Incluir un elemento también
requiere confirmación. Las escrituras locales normales pueden poner cambios en cola,
pero no autorizan sobrescrituras en otros dispositivos. Los conflictos conservan los
valores candidatos: elige con `kc sync resolve NAME --keep mine` o
`kc sync resolve NAME --keep LABEL`. Los demás dispositivos también revisan el resultado.
`kc sync freeze` detiene la aplicación de cambios entrantes sin pedir confirmación;
`kc sync unfreeze` requiere confirmación del sistema. El código de salida 8 indica
trabajo pendiente o bloqueado. Consulta los [límites de seguridad](docs/SECURITY.md).

## Comandos

| Comando | Qué hace |
Expand All @@ -141,6 +164,7 @@ Consulta [docs/SECURITY.md](docs/SECURITY.md) para saber cuándo usar `kc device
| `kc adopt --service S [--account A] [--as NAME]` | copia un elemento existente del llavero a kc |
| `kc receive` / `kc send [NAMES…]` | mueve elementos con un código de un solo uso |
| `kc pair`, `kc peers`, `kc inbox`, `kc device` | dispositivos recordados |
| `kc sync` | sincroniza elementos seleccionados con dispositivos emparejados |
| `kc doctor` | comprueba el llavero, el relé y la configuración |

## Solución de problemas
Expand Down
24 changes: 24 additions & 0 deletions README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,29 @@ desktop$ kc inbox # enregistre ce qui est arrivé (co
`kc peers rm LABEL` supprime l'appairage d'un appareil ; si une machine est perdue, lancez-le sur vos autres machines.
Consultez [docs/SECURITY.md](docs/SECURITY.md) pour savoir quand utiliser `kc device rotate`.

## Synchronisation

Synchronisez les éléments choisis entre appareils appairés. **Rien n’est
synchronisé par défaut.** Remplacez `NAME` par le nom d’un élément existant :

```console
$ kc sync add NAME # inscrit l’élément et le propose aux autres appareils
$ kc sync # à lancer sur les deux appareils pour échanger les modifications
$ kc sync review # examine les propositions et modifications en attente sur le destinataire
$ kc sync status # affiche l’état et les empreintes locales, jamais les valeurs
```

Dans cette version, tout écrasement distant attend une vérification humaine. Chaque étape de
synchronisation qui applique une valeur demande une confirmation locale via Touch ID
(ou le mot de passe du système), Windows Hello ou polkit. L’inscription d’un élément
exige aussi cette confirmation. Les écritures locales ordinaires peuvent mettre des
modifications en file d’attente, sans autoriser d’écrasement sur les autres appareils.
Les valeurs en conflit sont conservées : choisissez avec `kc sync resolve NAME --keep mine`
ou `kc sync resolve NAME --keep LABEL`. Les autres appareils doivent aussi examiner le
résultat. `kc sync freeze` suspend l’application des modifications entrantes sans
confirmation ; `kc sync unfreeze` exige une confirmation du système. Le code de sortie 8
signale du travail en attente ou bloqué. Voir les [limites de sécurité](docs/SECURITY.md).

## Commandes

| Commande | Rôle |
Expand All @@ -141,6 +164,7 @@ Consultez [docs/SECURITY.md](docs/SECURITY.md) pour savoir quand utiliser `kc de
| `kc adopt --service S [--account A] [--as NAME]` | copie un élément existant du trousseau dans kc |
| `kc receive` / `kc send [NAMES…]` | transfère des éléments avec un code à usage unique |
| `kc pair`, `kc peers`, `kc inbox`, `kc device` | appareils mémorisés |
| `kc sync` | synchronise les éléments choisis avec les appareils appairés |
| `kc doctor` | vérifie le trousseau, le relais et la configuration |

## Dépannage
Expand Down
23 changes: 23 additions & 0 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,28 @@ desktop$ kc inbox # 届いたものを保存 (最大
`kc peers rm LABEL` はデバイスのペアリングを解除します。マシンを紛失したら、他のマシンでこれを実行してください。
`kc device rotate` を使う場面は [docs/SECURITY.md](docs/SECURITY.md) を参照してください。

## 同期

選んだ項目をペアリング済みデバイス間で同期します。**初期状態では何も同期しません。**
`NAME` は既存の項目名に置き換えてください。

```console
$ kc sync add NAME # 同期対象に登録し、他のデバイスに提案
$ kc sync # 両方のデバイスで実行して変更を交換
$ kc sync review # 受信側で提案と保留中の変更を確認
$ kc sync status # 値ではなく状態とこのデバイスの値の指紋を表示
```

このバージョンでは、リモートからの上書きをすべて保留して人が確認します。同期で値を
適用するたびに、Touch ID(または OS のパスワード)、Windows Hello、polkit による
ローカル確認が必要です。同期対象の登録にも確認が必要です。通常のローカル書き込みは
変更を送信待ちにできますが、他のデバイスでの上書きを許可するものではありません。
競合した候補の値は保存されます。`kc sync resolve NAME --keep mine` または
`kc sync resolve NAME --keep LABEL` で残す値を選びます。他のデバイスでは結果も
確認が必要です。`kc sync freeze` は確認なしで受信した変更の適用を止めます。
`kc sync unfreeze` には OS の確認が必要です。終了コード 8 は保留中または処理できない
作業が残っていることを示します。[セキュリティ上の制限](docs/SECURITY.md)も参照してください。

## コマンド

| コマンド | 内容 |
Expand All @@ -141,6 +163,7 @@ desktop$ kc inbox # 届いたものを保存 (最大
| `kc adopt --service S [--account A] [--as NAME]` | 既存のキーチェーン項目を kc にコピー |
| `kc receive` / `kc send [NAMES…]` | ワンタイムコードで項目を移動 |
| `kc pair`, `kc peers`, `kc inbox`, `kc device` | 記憶済みデバイス |
| `kc sync` | 選んだ項目をペアリング済みデバイスと同期 |
| `kc doctor` | キーチェーン、リレー、設定を確認 |

## トラブルシューティング
Expand Down
Loading
Loading