docs(S15P11A705-158): main 참조 문서를 dev 2단 구성에 정합시킨다 - #45
Merged
Conversation
ai#40 이 CONTRIBUTING.md 를 2단 구성으로 개정한 뒤 다른 문서가 main 을 가리킨 채 남았다. 정본은 CONTRIBUTING.md 이고 이 PR 은 그 정본에 문서를 맞춘다. docs/development/workflow.md 4·8·30·33·53 행과 P44 52 행 여섯 곳이다. image publish 의 main 기준 서술은 바꾸지 않았다. infra 의 ai-image-update.yaml 이 test "$SOURCE_BRANCH" = main 으로 어서션하므로 dev 로 넓히면 GitOps 반영이 끊긴다. workflow.md 는 이제 "dev 에 병합하는 실행 순서" 다. 그 문서만 읽는 사람이 main 이 언제 무엇을 받는지 모르게 되므로 §5 에 릴리스 병합(dev→main)과 publish 가 거기서 일어난다는 서술을 한 줄 넣었다. P44 는 상태 Accepted 인 결정 문서라 표 값만 조용히 바꾸지 않았다. 작성 시점 (2026-07-28)에는 main 단일 구성이었고 2단 전환이 -154·-158 에서 이뤄졌다는 각주를 함께 남긴다. implements/ 와 달리 proposals/ 에 삭제 금지 원칙은 없지만, Accepted 결정문을 이력 없이 고치면 무엇이 언제 정해졌는지가 사라진다. 기본 브랜치 전환은 레포 설정이라 문서에 예정으로 적지 않고 결과 상태만 썼다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
colosair
force-pushed
the
docs/S15P11A705-158-branch-doc-alignment
branch
from
July 30, 2026 02:51
3f2a27f to
fe7a60a
Compare
ai 레포에 .gitattributes 가 없었다. WORKLOG 는 모든 작업이 표 끝에 한 줄씩 붙이는 append 전용 파일이라 브랜치가 둘 이상이면 항상 같은 지점에서 충돌한다. 오늘 ai#42·ai#44·ai#45 가 모두 이 파일을 건드렸고 순차 병합이라 앞의 둘은 넘어갔을 뿐이며, ai#44 와 ai#45 는 실제로 충돌했다. dev 2단 구성을 도입한 이유가 담당자 합류이므로 이 충돌은 앞으로 반복된다. union 의 대가를 WORKLOG 머리말에도 옮겼다 — 줄 순서가 보장되지 않고, 기존 줄을 두 브랜치가 각각 고치면 두 버전이 나란히 남는다. GitHub 은 이 설정을 반영하지 않으므로 PR 화면은 여전히 CONFLICTING 이고, 이득은 로컬 병합에서 손으로 풀 일이 없어지는 것까지다. 그 함정을 다음 사람이 파일을 열었을 때 보게 하는 편이 낫다. 개행 고정은 back/.gitattributes 와 같은 형태이나 실제로 존재하는 확장자에 맞췄다. 인덱스가 이미 전부 LF 임을 git ls-files --eol 로 확인했으므로 재정규화는 없다 — staged 파일이 이 커밋의 둘뿐인 것이 그 증거다. deploy/sealed-secrets 의 .pem 은 Infra 제공 원본이라 대상에서 뺐다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
요약
ai#40이CONTRIBUTING.md를main·dev2단 구성으로 개정한 뒤, 다른 문서가main을가리킨 채 남아 있었다. 정본(
CONTRIBUTING.md)에 문서 6곳을 맞춘다.dev전환의마지막 조각이며 앱 코드·CI·GitHub 설정 변경은 없다.
범위 추가(중앙 지시) —
.gitattributes를 신설해docs/WORKLOG.md에merge=union을걸고 개행을 LF로 고정한다.
ai레포에는 이 파일이 아예 없어서 동시 작업이면 WORKLOG가항상 충돌한다. 오늘 실제로
ai#44↔ai#45가 충돌했다.Jira (필수)
S15P11A705-158— https://ssafy.atlassian.net/browse/S15P11A705-158CONTRIBUTING.md와 일치하고, image publish의main기준 서술은 유지된다이 PR의 base는
dev다. 개정된CONTRIBUTING.md가 요구하는 대로dev에서분기했다 — 앞선
ai#40·ai#42는main을 대상으로 열렸고 그 불일치가 이 티켓을 만든원인 중 하나다. 현재 base는
ai#44병합 후의dev(b45aa93)다(아래 rebase 이력).변경 사항
정본은
CONTRIBUTING.md:46-50(브랜치)과:107-111(병합 조건)이다.docs/development/workflow.mdmain에 병합하는 실행 순서" →dev. 2단 구성 한 줄(dev통합 /main배포)을 함께 명시devorigin/main에서 브랜치를 만든다" →origin/devmain에 병합되면 최신main을 반영" →dev(한 행에 2곳)main기준ai-ci / check성공" →devdev→main)과 publish가 거기서 일어난다는 서술 한 줄docs/proposals/P44-ai-repository-governance.mdmain을 반영한다" →dev. 전환 시점 각주 추가docs/WORKLOG.mdmerge=union주의.gitattributesdocs/WORKLOG.md merge=union+ 개행 LF 고정배경 — 판단이 필요했던 두 곳
1.
workflow.md§5에 한 줄을 추가한 이유지시받은 6곳만 고치면 이 문서는 "
dev에 병합하는 실행 순서"로 끝나고,main이 언제무엇을 받는지 어디에도 없다.
workflow.md만 읽는 사람에게main은 존재하지 않는브랜치가 된다. 그래서 §5에 릴리스 병합과 publish 위치를 한 줄 넣었다. 조건 자체는
정본을 링크로 가리켜
P44가 정한 *"규칙은CONTRIBUTING.md한 곳에만 두고 나머지는링크와 실행 순서만 둔다"*를 지켰다.
이 줄이 image publish의
main기준을 서술로 못박는 역할도 한다 — 금지 항목이요구하는 방향과 같다.
2.
P44를 조용히 고치지 않은 이유P44는상태: Accepted, 날짜2026-07-28인 결정 문서다. 표 한 칸을main→dev로바꾸면 2026-07-28에
dev기준으로 결정했던 것처럼 읽힌다. 그래서 표 아래에 각주를남겼다 — 작성 시점에는
main단일 구성이었고 2단 전환은S15P11A705-154·-158에서이뤄졌다는 것.
docs/implements/README.md의 삭제 금지 원칙은implements/전용이고proposals/에는같은 규정이 없다(확인함). 다만
proposals/는 *"Accepted인 것은 확정된 결정이며 구현이따라야 한다"*이므로, 낡은 값을 그대로 두면 구현이 따라야 할 규칙이 틀린 상태가 된다
— 그래서 고치는 것이 맞고, 이력만 남긴다.
ai#39가implements/문서를 이력 없이덮어써
ai#40에서 복원해야 했던 것과 같은 종류의 실수를 반복하지 않으려는 것이다.3.
.gitattributes— 왜 union 이고, 어디까지만 이득인가WORKLOG는 모든 작업이 표 끝에 한 줄씩 붙이는 append 전용 파일이다. 브랜치가 둘
이상이면 항상 같은 지점에서 충돌한다. 오늘
ai#42·ai#44·ai#45가 모두 이 파일을건드렸고, 순차 병합이라 앞의 둘은 넘어갔을 뿐이다 —
ai#44가dev에 들어간 순간ai#45가DIRTY가 됐다.dev2단 구성을 도입한 이유가 담당자 합류이므로 이 충돌은앞으로 반복된다.
이득의 한계를 정확히 적어 둔다. GitHub 서버측 병합 판정은
merge=union을 반영하지않으므로 PR 화면은 여전히
CONFLICTING으로 보인다.dev를 브랜치에 반영해 다시올리는 절차 자체는 그대로 필요하고, 달라지는 것은 그 반영에서 손으로 충돌을 풀 일이
없어진다는 것까지다. 이 주의를
.gitattributes주석과 WORKLOG 머리말 양쪽에 남겼다 —파일을 여는 사람이 보는 곳이 후자다.
개행 고정은
back/.gitattributes와 같은 형태이나 실제로 존재하는 확장자에 맞췄다(Java·Gradle 항목을 그대로 옮기지 않았다).
deploy/sealed-secrets/*.pem은 Infra가 제공한인증서 원본이라 대상에서 뺐다.
리뷰 포인트
일관성상 필요하다고 판단했으나 불필요하다고 보면 삭제해도 6곳 정합은 성립한다.
P44각주의 위치와 분량. 리스크 표 바로 아래 4줄이다. 결정문 본문을 건드리지않으려고 표 밖에 뒀다.
workflow.md15·53행은ai-ci / check만 적는다 — 의도적으로 유지했다.아래 「범위 밖」 1번이 이유다. 정본이 그렇게 적고 있어 문서를 정본에 맞췄다.
merge=union을 설정만 하지 않고 동작을 실측했다. 임시 브랜치 둘이 각자 WORKLOG에한 줄을 붙인 뒤 병합해 충돌 0·양쪽 줄 보존을 확인했다(아래 검증). 결과 순서가
B → A로 나와 순서 미보장 주의가 실제로 맞다는 것도 같은 실험에서 드러났다.임시 브랜치는 삭제했다.
git ls-files --eol로 인덱스가 이미전부 LF임을 확인했다(126 파일
i/lf, 나머지 11개는 빈__init__.py). 그래서 이선언은 앞으로 들어오는 파일만 고정하고 기존 파일의 인덱스 내용을 바꾸지 않는다 —
.gitattributes커밋의 staged 파일이 둘뿐인 것이 그 증거다.상태만 썼다. 조회 결과
default_branch는 아직main이지만, 이 문서들은 분기·병합대상만 규정하므로 기본 브랜치 설정과 무관하게 정확하다.
테스트 / 검증
문서 전용 변경이라 RED/GREEN이 적용되지 않는다. 대신 정합성을 기계로 확인했다.
정합 확인
남은
main은 셋 다 배포 브랜치·릴리스 병합·publish 서술로 의도된 것이다. 분기기준·반영 대상·CI 기준을 가리키는
main은 하나도 남지 않았다.P44의 잔존main2곳도 전환 시점을 설명하는 각주뿐이다.레포 전체에서
최신 main·origin/main류를 재검색해 남은 것은docs/implements/2026-07-28-s1-implementation-recovery.md의 출처 표기(
직접확인(origin/main 코드)) 하나이며, 그 시점에 무엇을 대조했는지의 사실 기록이라바꾸지 않았다(
implements/보존 원칙 대상이기도 하다).merge=union실측설정을 넣었다는 것과 그것이 동작한다는 것은 다르므로 직접 병합해 봤다.
git check-attr merge text eol -- docs/WORKLOG.md→merge: union·text: set·eol: lf. 순서가B → A로 나온 것이 머리말에 적은 순서 미보장 주의의 실제 사례다.임시 브랜치 둘은 삭제했고
UNION-TEST문자열 잔존 0을 확인했다.링크
workflow.md·P44·WORKLOG.md의 상대 링크를 전수 확인해 깨진 것 없음.Regression
ruff check .—All checks passed!(exit 0)python -m compileall app tools— exit 0pytest— 146 passed, exit 0 (Docker 기동 상태, pgvector Testcontainers 생략 없음)python tools/check_embedding_profile_parity.py— exit 0 (필수 체크가 됐으므로 함께 확인)app/·tests/무변경 —git status로 확인.ai#44(S15P11A705-121)와 파일이 겹치지 않는다.gitattributes추가가 대량 재정규화를 일으키지 않음 — 인덱스 전부 LF 확인 후staged 파일 2개만 발생
검증 커밋:
fe7a60a· 분기 기준devb45aa93리스크
CONTRIBUTING.md)도 건드리지않았다. 문서를 정본에 맞추는 방향뿐이다.
infra의ai-image-update.yaml어서션(
SOURCE_BRANCH = main)과 어긋나는 서술을 만들지 않았고, 오히려 §5에서명시적으로 못박았다.
범위 밖 / 후속
CONTRIBUTING.md의 병합 조건 절이 required 체크를 하나만 적는다. 실제protection을 조회하면
main·dev모두["ai-ci / check", "ai-ci / embedding profile parity"]둘 다 strict required다.그런데 정본
:107-111은ai-ci / check만 적는다. 정본 재개정은 금지 항목이라손대지 않았고, 문서를 정본에 맞춰 두었다(리뷰 포인트 3). 정본을 실제 설정에 맞추는
후속 티켓이 필요하다 — 이 PR이 고친 것과 같은 종류의 드리프트다.
default_branch가 아직main이다. 레포 설정이며 사용자가 직접 수행한다고전달받았다. 문서에 예정으로 적지 않았다.
app/·tests/—ai#44진행 중이라 손대지 않았다.후속 Jira: 1번은 AI 파트 신규 티켓(정본과 실제 protection 정합).
영구 문서
docs/development/workflow.md— 브랜치·병합 절차를 2단 구성으로docs/proposals/P44-ai-repository-governance.md— 리스크 완화 서술 + 전환 시점 각주docs/WORKLOG.md— 이 작업 두 줄 +merge=union주의 머리말.gitattributes— 신규. WORKLOG union + 개행 LF 고정관련 GitHub Issue (선택)
CONTRIBUTING.md2단 개정)embedding profile parity잡)