Skip to content

harness: unbound sessions cannot run any mutating shell command (enforcement shipped disabled) #11

Description

@luke-n-alpha

현재 상태

.claude/no-harness, .codex/no-harness, .pi/no-harness 세 마커가 저장소에 커밋돼 있어
세션 계약 게이트(.codex/hooks/session-contract-gate.cjs)가 아무것도 강제하지 않는다.
이 릴리스는 그 상태로 나간다.

왜 껐나

강제를 켜면 계약이 없는 세션(.agents/session-contracts/에 항목이 없는 세션)이
모든 변경성 셸 명령에서 차단된다. 신규 클론에서 실측한 결과다.

명령 강제 ON 강제 OFF
ls -la 통과 통과
일반 파일 편집 통과 통과
mkdir -p src/new 차단 통과
git commit -m wip 차단 통과
npm test 차단 통과

새로 클론한 사람이 자기 테스트 스위트조차 돌릴 수 없다.

원인

파일 편집 경로는 이미 같은 문제를 겪고 고쳤다. unboundOrdinaryMutationAllowed 위 주석에
그 경위가 남아 있다 — 평범한 작업이 전부 막혀서 결국 모두가 하네스를 끈 채로 돌렸고,
"아무도 그 아래서 일할 수 없는 가드는 아무것도 강제하지 않는다"는 결론으로 평범한 파일 편집을
열었다. 위험한 것(삭제·진입점·거버넌스 디렉터리)만 계약을 요구하도록 좁혔다.

셸 경로에는 같은 처리가 적용되지 않았다. unbound 세션의 셸은 읽기 전용만 통과하고
나머지는 전부 계약을 요구한다. bound 세션도 allowed_shell_commands에 명령을 정확히
사전 열거해야 한다.

고칠 방향

파일 편집에 적용한 논리를 셸에 그대로 적용한다. 평범한 비파괴 명령은 unbound에서도 통과시키고,
실제로 위험하거나 권한을 확대하는 명령만 계약을 요구한다. 사전 열거 방식은 유지하지 않는다 —
사람이 명령을 미리 다 적어야 하는 구조는 천장이 생겨 결국 하네스를 끄게 만든다.

해제 조건

이 이슈를 닫고 마커를 지우기 전에 신규 클론에서 강제를 켠 채로 확인한다.

  • npm test가 계약 없이 통과
  • 평범한 커밋이 계약 없이 통과
  • 위험 명령(force push, 원격 ref 대상 git reset --hard, 거버넌스 파일 변경)은 여전히 차단
  • 크로스호스트 회귀 테스트 통과

관련

  • 마커 파일 3종에 같은 내용을 적어 뒀다
  • README 거버넌스 절에 현재 상태를 명시했다
  • AGENTS.md 세션 경계 절은 의도한 설계를 서술한 것이며 현재 런타임 동작과 다르다.
    이 진입점은 승인된 digest로 잠겨 있어 별도 승인 없이 고치지 않았다

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions