Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
28 changes: 28 additions & 0 deletions devlog/_plan/260912_history_containment/000_plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# History containment and continuation review

This unit carries the paginated-history refusal from #4313 onto current dev, evaluates #4086 and #3663 as separate product slices, and keeps unresolved #4311/#3522 acceptance explicit.

Loop: satisfy-spec HOTL. Trigger: delegated history lane. Scope: this worktree, three source PRs, two issues. No local product tests/build/typecheck/install; no merge, native stack, release, service/config changes, native ordinal allocation or damaged-history rewriting. Git/gh credentials already available are the only external scope. No user time/token/agent cap.

Verification: source/diff review now; final cumulative tip GitHub hosted CI later. Local suites NOT RUN. `git diff --check` checks patch whitespace only, not runtime behavior. Stop: reviewable carry PRs and final-tip hosted evidence plus explicit unresolved acceptance, or actual capability failure recorded without fabricated approval.

Evidence: .tmp/history-lane/ and this unit. Security drafts stay in scratch. Escalation: actual tool denials/access failures are recorded; independent work continues. Main implements; read-only reviewers cannot change source. Architect native role is absent from the exposed schema; no registration/config changes authorized or attempted. The user explicitly authorizes supported inherited-model independent design review and reflection plus a separate A reviewer; both are dispatched without claiming a native architect role.

## Work phases

0. Docs-only roadmap, lock the source-pinned diff designs below.
1. Containment carry #4313: rollout guards, injection compensation, focused regression source, eight locale guides and owning structure docs.
2. Continuation slice #4086 disposition/carry: custom-tool replay guard and HTTP/WebSocket regressions. Independent of containment; branch from dev if adopted.
3. Experimental relay #3663 disposition: security/owner review and injection overlap. A carry is conditional on justified safe amendments; new unpublished security details remain scratch. If not acceptable, preserve exact blockers for parent rather than silently dropping the slice.
4. #3522 evidence disposition and final hosted CI verification/repair. Diagnostics #3790 already landed; no generic diagnostic rewrite. Same-process Windows recovery remains unproven absent genuine evidence.

## Acceptance

#4311 containment only: ordinal/history_mode records and migratable stores refuse external relabel; config/profile/journal preserved on refusal and compensation failure remains visible. Legacy writes preserve descriptor identity. Native writer support and damaged recovery remain open.
#4086: replay miss on selected stateless/lowered-custom destination returns previous_response_not_found before dispatch; replayed complete history remains paired and reasoning preserved. Native continuation semantics stay intact.
#3663: authenticated owner-bound relay must not mix credentials/accounts; explicit feature gating and existing injection refusal coexist. Maintainer security approval is a separate merge gate.
#3522: current issue comments govern; healthy separate-process probes do not prove same-process recovery.

## Delivery topology

Use ordinary independent dev PRs for unrelated slices. Only a later repair of one slice depends on its own carry. Shared file edits do not by themselves imply dependency. Parent alone merges. Preserve source authors using Co-authored-by trailers. Readiness remains draft until final hosted and review evidence is recorded.
1,155 changes: 1,155 additions & 0 deletions devlog/_plan/260912_history_containment/010_containment.md

Large diffs are not rendered by default.

407 changes: 407 additions & 0 deletions devlog/_plan/260912_history_containment/020_continuation.md

Large diffs are not rendered by default.

1,594 changes: 1,594 additions & 0 deletions devlog/_plan/260912_history_containment/030_relay.md

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions devlog/_plan/260912_history_containment/040_verification.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Final evidence and Windows recovery disposition

MODIFY .tmp/history-lane/handoff.md with current branch/head, each original PR/issue disposition, carry URLs, exact hosted run IDs/results and remaining review/acceptance. No production change for #3522 without same-process evidence.

Read current #3522 comments and #3790 landed ancestry; inspect windows-secret-acl and responses/state recovery ownership. Compare alleged failure against existing tests without running local suites. Distinguish synthetic hosted Windows evidence from the reported live-process incident.

Run existing GitHub hosted CI against final carried tip(s), inspect failures with gh run view --log-failed, amend only justified defects, and repeat final-head CI when changed. Do not cancel workflows, change protections, or merge. Local tests/build/typecheck/install: NOT RUN. Text proof: git diff --check. Evidence JSON includes headSha, run id, event, status, conclusion and URL.
6 changes: 6 additions & 0 deletions docs-site/src/content/docs/fr/guides/codex-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -416,3 +416,9 @@ ocx restore back # point plain Codex at the running proxy again
Lorsque opencodex s'exécute comme [service d'arrière-plan géré](/fr/reference/cli/lifecycle/#ocx-service-installrepairstartstopstatusuninstallremove), il définit
`OCX_SERVICE=1` afin qu'un redémarrage déclenché par le service ne modifie **pas** sans cesse la configuration
Codex. Seule l'exécution explicite de `ocx stop` ou `ocx service stop` restaure Codex natif.

## Refus de sécurité pour l’historique paginé

Une transition de fournisseur peut renvoyer `history_paginated_requires_native_writer` si le stockage concerné prend en charge la pagination, même pour ses lignes legacy. OpenCodex conserve configuration, profil, catalogue, historique et preuves de restauration au lieu d’attribuer des numéros hors de Codex. Les sorties sans transition, comme la préservation d’un fournisseur externe, restent disponibles.

Ne supprimez pas un fournisseur encore référencé, ne répétez pas `ocx sync` ou une restauration legacy et ne réécrivez pas un historique actif. Conservez les fichiers, fermez la conversation avant toute récupération et signalez l’erreur exacte et les versions sans publier de données privées. Utilisez un correctif vérifié coordonné avec le processus natif d’écriture. Une sauvegarde ou le succès d’un script ne prouve pas le rétablissement de l’affichage : vérifiez la conversation après réouverture de Codex.
6 changes: 6 additions & 0 deletions docs-site/src/content/docs/guides/codex-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -781,3 +781,9 @@ injection. Explicit external-provider opt-out behavior is unchanged.
In **Subagents → Delegation settings**, edit the ordered fallback chain and its availability polling interval (5000–600000 ms), then save it separately from the featured roster. A configured target that is no longer advertised remains in the chain until you remove it. The roster and fallback chain are separate settings; this editor does not make the roster replace the fallback policy.

When a routed preferred model may receive V2 work from a native ChatGPT parent, the panel explains the upstream encrypted-task limitation. Readable tasks from routed parents are unaffected. The guidance uses `/api/v2` mode and native V1 pin state; the current API does not expose recovery activation or request-specific eligibility, so the panel reports those as unknown. V1/plaintext-compatible delegation remains an alternative. Experimental V2 recovery, where eligible and explicitly enabled, adds quota usage, latency, backend dependence and possible fidelity loss; it does not repair the upstream protocol. See [sub-agent surfaces](/guides/sub-agent-surface/) and [the upstream limitation](https://github.com/lidge-jun/opencodex/issues/92).

## Paginated history safety refusal

When an affected history store supports paginated records, a provider transition may return `history_paginated_requires_native_writer`. OpenCodex preserves the current configuration, profile, catalog, rollout and restore provenance instead of assigning ordinals outside Codex. This includes legacy rows in a migration-capable store. No-transition exits, such as preserving an external provider, remain available.

Do not delete a provider definition still referenced by a conversation, repeatedly run `ocx sync` or legacy recovery, or rewrite an active rollout to work around this refusal. Keep the current files, close the affected conversation before any recovery, and report the exact error and versions without uploading private history. Use a verified fix with native-writer coordination; a backup or a successful script alone does not prove the conversation is visible again. Check the restored conversation in Codex after reopening.
6 changes: 6 additions & 0 deletions docs-site/src/content/docs/ja/guides/codex-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -280,3 +280,9 @@ ocx restore back # point plain Codex at the running proxy again
```

opencodex が管理対象 [バックグラウンドサービス](/reference/cli/#ocx-service) として実行される場合、`OCX_SERVICE=1` が設定されるため、サービス主導の再起動によって Codex 設定がスラッシングされなくなります。明示的な `ocx stop` / `ocx service stop` のみがネイティブ Codex を復元します。

## ページ分割履歴の保護による拒否

対象の履歴ストアがページ分割をサポートする場合、プロバイダー変更は `history_paginated_requires_native_writer` で拒否されることがあります。Codex の外で番号を割り当てず、設定、プロファイル、カタログ、履歴ファイル、復元情報を保持します。移行可能なストアの legacy 行も対象です。外部プロバイダーを保持するだけの経路は利用できます。

会話が参照するプロバイダー定義を削除したり、`ocx sync` や旧式の復元を繰り返したり、使用中の履歴を書き換えたりしないでください。ファイルを保持し、復元前に対象の会話を閉じ、個人の履歴を公開せず正確なエラーとバージョンを報告してください。ネイティブの書き込み処理と連携する検証済みの修正が必要です。バックアップやスクリプトの成功だけでは表示の復元は証明されません。再度開いた Codex で確認してください。
6 changes: 6 additions & 0 deletions docs-site/src/content/docs/ko/guides/codex-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -299,3 +299,9 @@ ocx restore back # point plain Codex at the running proxy again
```

opencodex가 managed [background service](/reference/cli/#ocx-service)로 실행될 때는 `OCX_SERVICE=1`을 설정하므로 service-driven restart가 Codex config를 흔들지 **않습니다**. 네이티브 Codex를 복원하는 것은 명시적인 `ocx stop` / `ocx service stop`뿐입니다.

## 페이지 분할 기록 보호에 따른 거부

영향받는 기록 저장소가 페이지 분할을 지원하면 프로바이더 전환이 `history_paginated_requires_native_writer`로 거부될 수 있습니다. OpenCodex는 Codex 밖에서 순번을 지정하는 대신 현재 설정, 프로필, 카탈로그, 대화 원본과 복원 근거를 보존합니다. 변환 가능한 저장소의 `legacy` 행도 포함됩니다. 외부 프로바이더 보존처럼 전환을 하지 않는 경로는 계속 사용할 수 있습니다.

대화가 참조하는 프로바이더 정의를 삭제하거나, `ocx sync`·레거시 복구를 반복하거나, 실행 중인 대화 원본을 고쳐 우회하지 마세요. 현재 파일을 보존하고 복구 전에 해당 대화를 닫은 뒤, 개인 대화 내용을 올리지 말고 정확한 오류와 버전을 보고하세요. 네이티브 기록 작성자와 조정하는 검증된 수정이 필요합니다. 백업이나 스크립트 성공만으로 표시 복구가 증명되지는 않으므로 Codex를 다시 열어 확인하세요.
6 changes: 6 additions & 0 deletions docs-site/src/content/docs/ru/guides/codex-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -409,3 +409,9 @@ ocx restore back # point plain Codex at the running proxy again
Когда opencodex работает как управляемая [фоновая служба](/reference/cli/#ocx-service), он
устанавливает `OCX_SERVICE=1`, чтобы service-driven restart **не** дёргал конфигурацию Codex —
только явный `ocx stop` / `ocx service stop` восстанавливает нативный Codex.

## Защитный отказ для постраничной истории

Если затронутое хранилище поддерживает постраничную историю, смена провайдера может вернуть `history_paginated_requires_native_writer`, в том числе для строк legacy. OpenCodex сохраняет конфигурацию, профиль, каталог, историю и данные восстановления, не назначая номера вне Codex. Пути без смены провайдера, например сохранение внешнего провайдера, остаются доступны.

Не удаляйте используемое разговором определение провайдера, не повторяйте `ocx sync` или legacy-восстановление и не переписывайте активную историю. Сохраните файлы, закройте разговор перед восстановлением и сообщите точную ошибку и версии без публикации личной истории. Требуется проверенное исправление с согласованием с нативным процессом записи. Наличие резервной копии или успешный скрипт не доказывает восстановление отображения: проверьте разговор после повторного открытия Codex.
6 changes: 6 additions & 0 deletions docs-site/src/content/docs/tr/guides/codex-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -467,3 +467,9 @@ opencodex yönetilen bir [arka plan servisi](/tr/reference/cli/#ocx-service)
olarak çalıştığında `OCX_SERVICE=1` ayarlar, böylece servis odaklı bir yeniden
başlatma Codex yapılandırmasını **bozmaz** — yalnızca açık bir `ocx stop` / `ocx
service stop` yerel Codex'i geri yükler.

## Sayfalanmış geçmiş için güvenlik reddi

Etkilenen geçmiş deposu sayfalamayı destekliyorsa sağlayıcı değişimi `history_paginated_requires_native_writer` döndürebilir; legacy satırlar da buna dahildir. OpenCodex, Codex dışında sıra numarası atamak yerine yapılandırmayı, profili, kataloğu, geçmişi ve geri yükleme kanıtlarını korur. Harici sağlayıcıyı korumak gibi değişim yapmayan yollar kullanılabilir.

Konuşmanın kullandığı sağlayıcı tanımını silmeyin, `ocx sync` veya legacy kurtarmayı tekrarlamayın ve etkin geçmişi yeniden yazmayın. Dosyaları koruyun, kurtarmadan önce konuşmayı kapatın ve özel geçmişi yayımlamadan tam hatayı ve sürümleri bildirin. Yerel yazıcıyla koordineli, doğrulanmış bir düzeltme gerekir. Yedek veya başarılı betik görüntünün düzeldiğini kanıtlamaz; Codex’i yeniden açıp konuşmayı kontrol edin.
Original file line number Diff line number Diff line change
Expand Up @@ -353,3 +353,9 @@ ocx restore back # point plain Codex at the running proxy again
当 opencodex 作为受管的 [background service](/reference/cli/#ocx-service) 运行时,它会设置
`OCX_SERVICE=1`,这样由服务驱动的重启**不会**反复改写 Codex config——只有显式的
`ocx stop` / `ocx service stop` 才会恢复原生 Codex。

## 分页历史记录安全拒绝

如果受影响的历史存储支持分页,提供商切换可能返回 `history_paginated_requires_native_writer`。OpenCodex 会保留当前配置、配置档、模型目录、历史文件及恢复依据,而不是在 Codex 之外分配序号;可迁移存储中的 legacy 记录也受保护。仅保留外部提供商而不执行切换的路径仍然可用。

不要删除会话仍在引用的提供商定义、反复运行 `ocx sync` 或旧版恢复,也不要改写正在使用的历史文件来绕过拒绝。保留文件,在恢复前关闭相关会话,并只报告准确的错误和版本,不要公开私人历史。需要与原生写入器协调的已验证修复。备份或脚本成功并不能证明显示已恢复;重新打开 Codex 后检查会话。
Original file line number Diff line number Diff line change
Expand Up @@ -360,3 +360,9 @@ ocx restore back # 讓普通 Codex 再次指向仍在執行的 proxy
當 opencodex 作為受管的 [背景服務](/zh-tw/reference/cli/#ocx-service) 執行時,會設定 `OCX_SERVICE=1`,
因此 service 驅動的 restart **不會**反覆改寫 Codex 設定;只有明確執行 `ocx stop` 或
`ocx service stop` 才會恢復原生 Codex。

## 分頁歷史記錄安全拒絕

如果受影響的歷史儲存區支援分頁,提供者切換可能傳回 `history_paginated_requires_native_writer`。OpenCodex 會保留目前設定、設定檔、模型目錄、歷史檔案及復原依據,而不在 Codex 之外分配序號;可遷移儲存區中的 legacy 記錄也受保護。不執行切換、僅保留外部提供者的路徑仍可使用。

請勿刪除對話仍參照的提供者定義、反覆執行 `ocx sync` 或舊版復原,也不要改寫使用中的歷史檔案來繞過拒絕。保留檔案,復原前關閉相關對話,只回報確切錯誤與版本,不要公開私人歷史。需要與原生寫入器協調的已驗證修正。備份或指令碼成功不能證明顯示已復原;重新開啟 Codex 後確認對話。
Loading
Loading