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
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Read the English editorial reference `docs/design.md`, the design revisions it links (currently `docs/design-revision-1.md` and `docs/design-revision-2.md`), the immutable approval `docs/design.ko.md`, `docs/contracts.md`, and `milestones.json` before changing a contract or milestone boundary. The historical approval preserves the decisions of its time; the editorial reference and its revisions are the current baseline; contracts describe implemented behavior only. The user's current instructions take precedence over this file.

- CS-RG implementation is suspended: pending the CS-RG integration-boundary revalidation, do not implement any CS-RG unit (CSRG-C00, CSRG-C03 and CSRG-C09 in particular) or design revision 1's CodeSpace execution-ownership choices. No replacement architecture has been approved. *Current state, 2026-10-14:* the owner directed CS-RG implementation as units U1–U6 in CodeSpace on 2026-10-02, outside this suspension: each unit starts only on the owner's direction, after the previous one is merged and verified. U1 to U6 are merged and verified, CS-RG is qualified on macOS for one exact combination, and the suspension still applies to the CSRG-C units. P1-RECOVERY starts only with the owner's separate authorization.
- CS-RG implementation is suspended: pending the CS-RG integration-boundary revalidation, do not implement any CS-RG unit (CSRG-C00, CSRG-C03 and CSRG-C09 in particular) or design revision 1's CodeSpace execution-ownership choices. No replacement architecture has been approved. *Current state, 2026-10-14:* the owner directed CS-RG implementation as units U1–U6 in CodeSpace on 2026-10-02, outside this suspension: each unit starts only on the owner's direction, after the previous one is merged and verified. U1 to U6 are merged and verified, CS-RG is qualified on macOS for one exact combination, and the suspension still applies to the CSRG-C units. On 2026-10-14 the owner directed P1-RECOVERY's implementation in CodeSpace, outside this suspension, as one pull request per unit from P1R-C01 to P1R-C06, re-baselined in its plan: each unit starts on the owner's approval after the previous one is merged and verified, and P1R-C01 is active.
- Keep CodeSpace/Codex types, process ownership, PTY and output management outside this repository's authority core.
- External implementations, Codex included, enter DevGuard only through a declared adapter or binding with a reviewed, immutable pin, justified by what it replaces and by how its cost is contained ([design revision 2](docs/design-revision-2.md)). The authority core and the generic client contract carry no CodeSpace or Codex product types. `scripts/validate.py` still rejects every `codex-` and `codespace-` package; only the reviewed PR that adds the first real adapter component changes that gate, together with tests of its boundary. Adapted or patched upstream code records its provenance and divergence.
- Keep reservation, planned policy, applied evidence, and successful user executable startup distinct.
Expand Down
2 changes: 1 addition & 1 deletion docs/ko/planning/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

## 마일스톤과 우선 경로

> **상태:** 설계 개정 1의 실행 소유권 선택을 포함한 CS-RG는 CS-RG 통합 경계 재검증이 끝날 때까지 구현 지시로서 효력이 중지되며, 어떤 CS-RG 단위도 시작할 수 없습니다. CS-RG 계획의 표기를 참고하십시오. *2026-10-14 현재 상태:* 소유자는 2026-10-02에 이 효력 중지와 별도로 CS-RG 구현을 CodeSpace의 U1–U6 단위로 지시했습니다. U1부터 U6까지 병합·검증되었고, CS-RG는 정확히 한 조합에 대해 macOS에서 qualification을 마쳤습니다. 이 계획의 단위는 여전히 효력이 중지된 채 시작하지 않았습니다.
> **상태:** 설계 개정 1의 실행 소유권 선택을 포함한 CS-RG는 CS-RG 통합 경계 재검증이 끝날 때까지 구현 지시로서 효력이 중지되며, 어떤 CS-RG 단위도 시작할 수 없습니다. CS-RG 계획의 표기를 참고하십시오. *2026-10-14 현재 상태:* 소유자는 2026-10-02에 이 효력 중지와 별도로 CS-RG 구현을 CodeSpace의 U1–U6 단위로 지시했습니다. U1부터 U6까지 병합·검증되었고, CS-RG는 정확히 한 조합에 대해 macOS에서 qualification을 마쳤습니다. 이 계획의 단위는 여전히 효력이 중지된 채 시작하지 않았습니다. P1-RECOVERY는 소유자 지시로 2026-10-14에 시작해 그 계획의 재기준대로 진행하며, 지금은 P1R-C01을 진행합니다.

```mermaid
flowchart LR
Expand Down
4 changes: 4 additions & 0 deletions docs/ko/planning/codespace-integration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# CodeSpace 결합 명세

> **상태: 구현 지시로서 효력 중지.** CodeSpace 소유 관리형 실행 전송을 전제로 한 이 문서의 통합 명세는 구현하지 않습니다. 관찰된 기준선 항목은 고정 커밋의 CodeSpace를 기술하는 사실로 남고, 계획된 경계는 나머지와 함께 효력이 중지됩니다. CodeSpace 통합 계획에 대해 소유자가 지시한 검토인 CS-RG 통합 경계 재검증(작업 단위가 아닙니다)이 끝날 때까지 적용됩니다. 대체 구조는 승인되지 않았으며, 소유자가 재검증 결과를 검토한 뒤 결정합니다. 이 표기는 지시의 효력만 중지하며 어떤 안전 요구도 완화하지 않습니다. 아래 내용은 이력 추적을 위해 바꾸지 않고 남깁니다. 다만 ‘backend 결정’의 D3 의존 서술에는 그것이 [설계 개정 2](../design-revision-2.md)(2026-09-30)로 대체되었다는 날짜가 붙은 주석을 달았으며, 그 서술은 더 이상 현행이 아닙니다.
>
> *2026-10-14 현재 상태:* 소유자는 2026-10-14에 이 효력 중지와 별도로 P1-RECOVERY 구현을 CodeSpace에 지시했으며, 그 작업은 [P1-RECOVERY 계획](milestones/P1-RECOVERY.md#재기준-2026-10-14)의 재기준대로 진행합니다. 그 작업에는 [P1 복구 모드의 경계](#p1-복구-모드의-경계) 절이 적용되며, 나머지 효력 중지는 그대로입니다.

확인 기준: CodeSpace `b6e7ed22e2c730ac987297455e250cbd6e8e8b0c`([설계 개정 1](../design-revision-1.md), 2026-09-27). 초기 분석 기준인 CodeSpace `e94d21475643608ad2a466256fb57266b86faa47`과 DevGuard `d59cbd43d206a9a9281328a946eddf1dc199f710`은 이력으로 보존하며, 아래 runtime 경로는 patch helper의 시험 재사용을 제외하면 두 CodeSpace 기준 사이에 바뀌지 않았다. 문서 기준일: 2026-09-22, 개정 2026-09-27. 현재 CodeSpace에 DevGuard dependency·daemon 소비·PrepareExec·복구 capability는 구현되지 않았다. DG1-C12는 완료되었고 macOS qualification을 마친 release `0.1.0-5daee5d-b3fa569e`가 pin 후보다. 설계 개정 1은 Codex `6b9826e3aa83b1a5947db50f4332cb9c65f1b340` pin을 유지하며, 이후의 pin 변경은 검증 결과에 근거한 별도 결정이다. 2026-09-26 검토에서 이 명세를 DG-1이 구현한 소비 인터페이스([계약](../contracts.md))에 맞췄고, 설계 개정 1이 실행 계층을 개정했다. 아래는 후속 구현 명세이며 [CS-RG](milestones/CS-RG.md)와 [P1-RECOVERY](milestones/P1-RECOVERY.md)가 상세 작업의 원본이다.

Expand Down Expand Up @@ -162,6 +164,8 @@ scope 추적 상실을 root reap으로 덮지 않는다. macOS에서 scope는 ro
## P1 복구 모드의 경계

> **상태: 구현 지시로서 효력 중지.** CS-RG 통합 경계 재검증이 끝날 때까지 이 절을 근거로 구현하지 않습니다. 대체 구조는 승인되지 않았고, 어떤 안전 요구도 완화되지 않습니다. 내용은 이력 추적을 위해 바꾸지 않고 남깁니다.
>
> *2026-10-14 현재 상태:* 소유자가 2026-10-14에 지시한 P1-RECOVERY에는 이 절의 효력 중지를 적용하지 않습니다. 이 절은 [P1-RECOVERY 계획](milestones/P1-RECOVERY.md#재기준-2026-10-14)의 재기준과 함께 적용됩니다.

| 상황 | 기존 모드 | 새 독립 Runner 모드 |
| --- | --- | --- |
Expand Down
6 changes: 4 additions & 2 deletions docs/ko/planning/decisions.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# 후속 설계 결정과 기준 상태

> **상태: 구현 지시로서 효력 중지.** ADR-006(CodeSpace 실행 소유권과 재사용 정책)은 구현하지 않습니다. 다른 ADR은 영향이 없습니다. CodeSpace 통합 계획에 대해 소유자가 지시한 검토인 CS-RG 통합 경계 재검증(작업 단위가 아닙니다)이 끝날 때까지 적용됩니다. 대체 구조는 승인되지 않았으며, 소유자가 재검증 결과를 검토한 뒤 결정합니다. 이 표기는 지시의 효력만 중지하며 어떤 안전 요구도 완화하지 않습니다. 아래 내용은 이력 추적을 위해 바꾸지 않고 남깁니다. 다만 [설계 개정 2](../design-revision-2.md)(2026-09-30)에 대한 참조를 기준일, 기준 행, 적용한 개정 목록에 추가했고, 날짜가 붙은 주석을 달았습니다. 그 개정은 ADR-006 D3의 의존 제한을 앞으로를 향해 대체하며, 그 제한은 더 이상 현행이 아닙니다.
> **상태: 구현 지시로서 효력 중지.** ADR-006(CodeSpace 실행 소유권과 재사용 정책)은 구현하지 않습니다. 다른 ADR은 영향이 없습니다. CodeSpace 통합 계획에 대해 소유자가 지시한 검토인 CS-RG 통합 경계 재검증(작업 단위가 아닙니다)이 끝날 때까지 적용됩니다. 대체 구조는 승인되지 않았으며, 소유자가 재검증 결과를 검토한 뒤 결정합니다. 이 표기는 지시의 효력만 중지하며 어떤 안전 요구도 완화하지 않습니다. 아래 내용은 이력 추적을 위해 바꾸지 않고 남깁니다. 다만 [설계 개정 2](../design-revision-2.md)(2026-09-30)에 대한 참조를 기준일, 기준 행, 적용한 개정 목록에 추가했고, 날짜가 붙은 주석을 달았습니다. 그 개정은 ADR-006 D3의 의존 제한을 앞으로를 향해 대체하며, 그 제한은 더 이상 현행이 아닙니다. ADR-001에는 P1-RECOVERY의 독립 Runner를 위한 2026-10-14 보완도 날짜를 붙여 더했습니다.

문서 기준일: 2026-09-22, ADR-006 추가 2026-09-27, 설계 개정 2 기록 2026-09-30. 이 문서는 승인된 독립 설계의 후속 선택을 기록한다. 선택의 승인과 기능의 구현·qualification은 별개다. 아래 선택은 확정되었지만 DG-1 이후 구현은 모두 미착수다.
문서 기준일: 2026-09-22, ADR-006 추가 2026-09-27, 설계 개정 2 기록 2026-09-30, ADR-001 보완 2026-10-14. 이 문서는 승인된 독립 설계의 후속 선택을 기록한다. 선택의 승인과 기능의 구현·qualification은 별개다. 아래 선택은 확정되었지만 DG-1 이후 구현은 모두 미착수다.

## 기준과 문서 권한

Expand Down Expand Up @@ -40,6 +40,8 @@ InProcess는 Gateway 내부 Runner가 같은 PID로 등록한다. UDS는 worker

**현행 규칙.** 실행 소유자당 instance 하나를 등록하며 한정된 세션마다 같은 instance를 다시 등록한다. 따라서 “단일 등록”은 실행 소유자당 instance 하나를 뜻한다. 별도의 `service-exec` 경로는 없다. Gateway는 소비자 자격을 `CredentialHandoff`로 UDS worker에 넘기고 InProcess는 직접 읽는다. launcher는 두 번째 instance를 등록하지 않으며, SDK 없는 일반 서비스의 등록 방식은 별도 지원 계약이 마련될 때 정의하고 PID 검증을 완화하지 않는다. 최소 변경은 Runner의 작은 client adapter와 시작 경로, private 자격 FD 전달이다. DevGuard core에 CodeSpace process_id·PTY·workspace 정책을 넣지 않는다. payload 이전에 자격 FD를 닫고 pipe·PTY를 모두 시험하며, 공개 MCP 인자에 FD 번호나 등록 자격을 추가하지 않는다. Runner가 관리 실행을 생성·관찰·회수하는 방식은 [ADR-006](#adr-006--codespace-실행-소유권과-재사용-정책)이 정한다.

*2026-10-14 보완(P1-RECOVERY):* 독립 Runner는 붙었다 떠나는 어떤 Gateway보다 오래 살기 때문에 Gateway가 소비자 자격을 넘겨줄 수 없다. P1-RECOVERY의 독립 Runner 모드에서는 Runner가 운영자가 준비한 private 파일에서 InProcess처럼 자격을 직접 읽고 자신의 instance 하나를 스스로 등록하며, Gateway는 이 모드에서 자격을 넘기지 않는다. payload 이전에 자격을 닫고 공개 MCP 인자에 자격이나 FD를 넣지 않는 것을 포함해 나머지 현행 규칙은 그대로 적용한다.

호환성 영향은 새 operator 설정과 capability, private client/Runner 시작 계약이다. 구현 비용은 중간이며 인증·FD 누출·정적 예약 과소 산정이 주요 위험이다. 정상 등록, 잘못된 UID/PID, 재사용 PID, 두 모드, FD 누출, 동일 슬롯 중복 시작을 검증한다. rollback은 신규 admission을 닫고 실행·lease를 대조한 뒤 소비 설정을 이전 검증 조합으로 돌린다. 실행 중 자격 또는 journal을 지워 회계를 초기화하지 않는다.

재검토 조건은 한 서비스가 동시에 여러 독립 Runner를 사용하거나 여러 서비스가 제어 예약을 공유해야 하는 실제 배치다. 그때 하위 등록의 생애·generation·예산 귀속을 별도 결정으로 설계한다.
Expand Down
23 changes: 23 additions & 0 deletions docs/ko/planning/milestones/P1-RECOVERY.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
# P1-RECOVERY — 독립 Runner 생존 중 Gateway 복구

> *2026-10-14 현재 상태:* 소유자는 2026-10-14에 P1-RECOVERY 구현을 CodeSpace에서 P1R-C01부터 P1R-C06까지 단위마다 PR 하나로 차례로 진행하도록 지시했습니다. 각 단위는 앞 단위가 병합·검증된 뒤 소유자의 승인으로 시작하며, 지금 진행하는 단위는 P1R-C01입니다. 원장은 P1-RECOVERY를 `in-progress`, qualification `not-run`으로 기록하고, 새 모드는 P1R-C06의 qualification 전까지 지원 모드가 아닙니다. 아래 [재기준](#재기준-2026-10-14)이 이 계획의 나머지와 다르면 재기준을 따르며, 나머지는 이력으로 바꾸지 않고 남깁니다.

소유 저장소: CodeSpace. 상태: `not-started` / `not-run`. 진입: CSRG-C08. 완료: 운영자 선택 모드에서 독립 Runner가 기존 프로세스·입출력·timeout을 계속 소유하고 Gateway 반복 재시작과 재연결을 복구한다. InProcess 및 Runner 자체 재시작 후 PTY 복원은 최초 범위에 포함하지 않는다.

기존 모드의 종료 정책은 그대로 유지한다. 새 모드는 정상 종료, 명시적 서비스 중지, 재시작용 detach, 예기치 않은 연결 소실을 구별한다. 아래 ID·제목·PR은 **예정 값**이다. 현재 검증은 CodeSpace `python3 scripts/validate-upstream.py all`과 해당 플랫폼별 stage이며, `python3 scripts/qualify-devguard.py <suite>`는 각 작업에서 제공할 **미구현 예정 명령**이다.

## 재기준, 2026-10-14

이 계획은 실제로 만들지 않은 CS-RG의 C 단위와 예정 PR을 전제로 썼습니다. CS-RG는 소유자가 지시한 U1–U6 단위로 구현되었고, 정확히 한 조합(CodeSpace `ca306ee`, DevGuard 원장 `970acf5`)에 대해 macOS qualification을 마쳤습니다. 그래서 P1-RECOVERY를 시작하면서 진입 조건, 전달 방식, 일부 선행 조건을 실제에 맞춰 다시 잡았습니다. 아래 각 작업의 문제, 불변 조건, 시험, rollback은 그대로 적용하며, 이 표가 그 아래 본문과 다르면 표를 따릅니다.

| 계획 문구 | 실제 | 재기준 |
| --- | --- | --- |
| 진입 CSRG-C08, P1R-P1의 선행 PR CSRG-P5 | CSRG-C08은 만들지 않았습니다 | 진입 조건은 CS-RG `implemented`, `macos-qualified`(조합 CodeSpace `ca306ee`) |
| 예정 PR P1R-P1–P1R-P3, 각각 작업 두 개 | CS-RG는 소유자가 지시한 단위마다 PR 하나로 진행했습니다 | P1R-C01부터 P1R-C06까지 단위마다 CodeSpace PR 하나를 차례로 병합. 아래 예정 PR 표는 이력 |
| P1R-C01: 독립 시작과 서비스 소유 | gateway가 관리 worker를 띄우거나, `--runner-socket`으로 이미 있는 worker에 붙습니다 | 독립 Runner는 운영자나 qualification 하네스가 띄우고 gateway는 연결만 합니다. 독립 Runner는 소비자 자격 파일을 직접 읽습니다([ADR-001](../decisions.md#adr-001--실행-소유자인-runner의-단일-등록)) |
| P1R-C02: process 전용 기록과 single writer | operations DB에는 patch operations와 승인이 있고, `--operations-db`가 없으면 DB는 메모리에 있습니다 | process 기록은 operations DB 안의 별도 표이며 schema 버전을 가집니다. 독립 모드에서는 `--operations-db`가 필수이고, 한 번에 gateway 하나가 배타 lock을 잡고 씁니다. 이전 gateway가 끝나기를 상한 안에서 기다립니다 |
| P1R-C03: control/data session의 원자적 결합 | Runner wire는 한 stream이고 두 번째 lane은 없습니다 | 한 연결을 유지합니다. 제어권은 다음 epoch를 발급하는 `Claim`으로 넘기고, 상태를 바꾸는 요청은 모두 그 epoch를 가집니다 |
| P1R-C03: 보호된 endpoint와 자격, 잘못된 자격 거절 | 지금 worker는 연결을 한 번만 받습니다. 같은 UID 확인만으로는 그 사용자의 어떤 프로세스든 받아들입니다 | 살아 있는 controller가 있으면 `Claim`을 거부하고, peer UID, operations store id, epoch를 확인합니다. gateway가 없는 사이에는 같은 사용자의 어떤 프로세스든 `Claim`할 수 있으며, 운영자 안내에 이를 적습니다. 잘못된 자격 시험은 다른 UID, controller가 있을 때의 `Claim`, 다른 store id로 바뀝니다 |
| P1R-C04: CS-RG attempt·approval mapping | 승인과 attempt나 프로세스를 잇는 기록이 없습니다 | P1R-C02의 기록이 승인, attempt, 프로세스를 처음으로 잇습니다 |
| P1R-C05: owner 손실 뒤 미해결 lease | `Lookup`은 attempt를 소유한 instance만 할 수 있고, CodeSpace의 `codespace` 소비자는 instance가 하나입니다 | Runner 손실 뒤 운영자 runbook이 관리 요청 `Quiescence`로 남은 attempt를 확인하고, 이전 instance가 retire된 뒤에 새 Runner가 등록합니다. `off` 점유는 운영자가 프로세스별로 확인해 풉니다 |
| 작업마다 `qualify-devguard.py recovery-*` 명령 | CS-RG는 마지막 단위에서 하네스를 더했습니다 | P1R-C01–P1R-C05는 CodeSpace CI의 통합 시험으로 확인하고, P1R-C06이 하네스 suite를 모두 더합니다 |
| P1R-C06: 통과한 CS-RG 기준선 | CS-RG 기준선은 후보 `ca306ee`입니다 | P1R-C06은 P1-RECOVERY 후보에서 CS-RG suite도 다시 돌립니다. 범위는 독립 모드의 macOS `uds`, pipe와 PTY, `off`와 `required`이고, Linux `off`는 CI에서만 확인합니다 |

이 마일스톤을 위해 release, DevGuard client pin, Codex pin, 설치된 서비스, 정책을 소유자 승인 없이 바꾸지 않습니다. 뒤 단위가 기대는 선택은 그 단위를 시작할 때 소유자에게 확인합니다.

## PR 순서와 활성화

| 예정 PR | 작업 | 선행 PR | 함께 검토할 경계 |
| --- | --- | --- | --- |
| P1R-P1 | P1R-C01, P1R-C02 | CSRG-P5 | opt-in 수명과 process 전용 기록; 복구 활성화 전 상태 일관성 |
Expand Down
Loading