Skip to content

fix: Harness hook 추론과 runtime surface 검증 강화 #95

@alexization

Description

@alexization

대상 저장소

git-ranker-workflow

문제 / 배경

  • completed로 닫힌 task의 scope에 속한 변경을 push할 때도 pre-push가 task context를 찾지 못해 pre_push requires task context로 실패할 수 있었다.
  • WORKFLOW_ROOT 기반 외부 workspace에서는 .githooks/*workflows/system/hooks.json이 최초 복사 이후 drift해도 doctor가 이를 감지하지 못했다.
  • canonical hook surface에 no-op pre_phase_start와 미사용 dangerous_cmd_guard.allowlist가 남아 있어 정책 표면이 실제 구현보다 넓게 보였다.

왜 지금 필요한가요?

  • push gate가 완료 task 이후 follow-up 흐름을 제대로 처리하지 못하면 Harness 검증 신뢰도가 떨어진다.
  • runtime surface drift를 방치하면 dangerous command guard, TDD gate, latest verification gate가 문서/정책과 다르게 동작할 수 있다.
  • 사용하지 않는 hook surface를 남겨두면 운영 문서와 구현이 다시 어긋난다.

완료 조건 / 기대 결과

  • unpushed diff가 정확히 하나의 completed task scope에 매핑되면 pre-push가 해당 task를 context로 사용한다.
  • init.githooks/pre-commit, .githooks/pre-push, workflows/system/hooks.json을 source 기준으로 재동기화한다.
  • doctor가 runtime surface drift를 감지하고 init 재실행을 요구한다.
  • no-op hook/event와 미사용 guard 설정을 제거하고 문서와 테스트를 함께 맞춘다.

이번 이슈에서 다루는 것

  • completed task-aware pre-push task inference 추가
  • runtime surface sync/drift detection 추가
  • .githooks/pre-push의 shell-level active task 추론 제거
  • dead hook surface 정리
  • 관련 docs/skills/test 회귀 보강

이번 이슈에서 다루지 않는 것

  • 새로운 guard 종류 추가
  • 앱 저장소(git-ranker, git-ranker-client) 동작 변경
  • 원격 배포/릴리즈 자동화
  • multi-task diff를 자동 병합 판단하는 정책 추가

접근 메모

  • unpushed changed path를 phase scope에 대조해서 pre_push용 task를 추론한다.
  • pre_commit은 기존처럼 active task ambiguity에서 fail-closed를 유지한다.
  • source copy와 drift validation을 분리해 initdoctor의 역할을 명확히 나눈다.
  • 문서/스킬/테스트를 runtime contract와 같이 갱신한다.

영향 / 의존성

  • 새 의존성: 없음
  • 선행조건: 로컬/외부 workspace에서 python3 scripts/workflow.py init 재실행 필요 가능
  • 운영 영향: push gate가 더 엄격하게 fail-closed 할 수 있음

리스크 / 확인이 필요한 점

  • 리스크: unpushed diff가 여러 task scope에 걸치면 pre-push가 명시적 task binding을 요구한다.
  • 확인 포인트: completed task follow-up push가 실제 운영 흐름과 맞는지
  • 열린 질문: 향후 multi-task branch 운영 정책을 따로 둘지 여부

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions