Skip to content

refactor(orchestrator): replace dirty-workspace quarantine and attribution with a warning #905

Description

@moncher-dev

Phase 4 of epic #847. 승인된 계획은 #847의 2026-09-05 코멘트에 있습니다.

무엇을 하는가

워크스페이스에 커밋되지 않은 변경이 남아 있을 때 이를 .quarantine-<timestamp>로 옮겨두는 동작과, 그 변경이 이 이슈의 것인지 증거로 판정하는 귀속 로직을 함께 없앱니다. 둘은 한 덩어리라 따로 뗄 수 없습니다.

대체 동작 — hojinzs 결정 (2026-09-05)

더러운 워크스페이스를 만났을 때 격리하지 않습니다. 경고를 남기고 진행합니다. 실패로 처리하지 않습니다.

이 결정의 근거를 그대로 옮깁니다. 이것은 상용 SW가 아니라 개발용 도구입니다. 남은 변경을 사람이 판단할 수 있게 보이게만 해주면 되고, 오케스트레이터가 대신 격리 디렉터리로 옮겨 감추는 것은 과도한 통제였습니다.

임의로 실패 처리를 고르지 마세요. 이 문장이 완료 조건입니다.

대상

위치 내용
packages/orchestrator/src/git.ts:490 quarantineIssueWorkspace
packages/orchestrator/src/service.ts:3133-3164 귀속 판정 후 격리를 부르는 경로
packages/core/src/workflow/issue-identity.ts:148-171 DirtyWorkAttributionInput, DirtyWorkAttribution, fail-closed 판정
packages/orchestrator/src/service.ts:193 resolveDirtyWorkAttributionBranches
packages/core/src/observability/structured-events.ts, event-formatter.ts 격리 이벤트

27군데, 5파일. 레이어는 Coordination과 Observability입니다.

남기는 것

  • 더러운 상태의 관측. inspectIssueWorkspaceDirtyStatus(git.ts:449)는 남습니다.
  • 에이전트에게 주는 복구 컨텍스트. WORKFLOW.md의 Recovery Context와 service.ts:6699의 안내 문구는 더러운 diff를 사람이 판단하도록 유도하는 것이지 격리에 의존하지 않습니다. 다만 "attributed to this issue"라는 표현이 사라진 귀속 로직을 가리키므로 문구를 맞춰야 합니다.
  • 트래커 어댑터 계약의 secretEnvironmentNames 등 무관한 것.

완료 조건

  • 더러운 워크스페이스를 만나면 경고를 남기고 진행한다. 이동도, 실패도, 삭제도 하지 않는다.
  • 경고가 관측 가능하다 — 구조화 이벤트나 상태 스냅샷 경고로 사람이 볼 수 있다.
  • .quarantine-* 디렉터리를 더 이상 만들지 않는다.
  • 귀속 판정 코드와 그 이벤트가 제거된다.
  • WORKFLOW.md의 복구 안내에서 귀속에 기대는 표현이 정리된다. 정책 파일이므로 문구만 고치고 다른 규칙의 의미를 건드리지 마세요.
  • docs/architecture.md에서 해당 서술이 정리된다.
  • changeset 추가.

범위 밖

워크스페이스 경로 봉쇄 검사, before_remove 훅, 그리고 population 이전(P4‑1).

참고

기존 .quarantine-* 디렉터리가 호스트에 남아 있을 수 있습니다. 이 이슈는 코드만 다루고, 남은 디렉터리 정리는 운영자 몫입니다. 워커는 더러운 워크스페이스를 삭제하지 마세요.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions