Evidence / 5240lab
5240lab 적용 근거
주장이 아니라 검증된 원본 행으로 하네스 적용 상태를 읽습니다. 정책, 자동 강제, 실행 기록을 구분하고 부분 적용의 한계도 함께 공개합니다.
- 공개 근거
- 19개
- 계층
- 8개
- 검증 상태
- 확인됨 ·
Reading key
근거를 읽는 법
- 정책
- 해야 할 일과 경계를 문서로 정한 상태
- 자동 강제
- 코드나 스크립트가 위반을 실제로 차단하는 상태
- 실행 기록
- 테스트·감사·패리티를 수행하고 결과를 남긴 상태
Eight layers
하네스 계층 적용 상태
적용은 해당 계층의 공개 근거가 있음을 뜻하며, 루트 전체 자동화를 뜻하지 않습니다.
context
적용컨텍스트
저장소 지침과 독립 감사 기준이 작업 범위와 판단 근거를 고정한다.
한계 모든 형제 프로젝트의 지침 품질이 동일한지는 별도 평가가 필요하다.
orchestration
적용오케스트레이션
feature-workflow가 설계 검토, 명세, 테스트 우선 구현의 진행 순서를 연결한다.
한계 프로젝트별 실행 기록의 상세도는 작업 보고서에 따라 다르다.
specification
적용명세
constitution, spec, plan, tasks가 요구와 구현 결정을 단계별 문서로 남긴다.
한계 오래된 프로젝트는 최신 명세 체계를 사용하지 않을 수 있다.
work-isolation
적용작업 격리
프로젝트별 데이터베이스·사용자와 독립 worktree 검사가 변경 경계를 보호한다.
한계 격리 방식은 저장소와 실행 환경에 따라 서로 다른 가드를 사용한다.
execution-guards
부분 적용실행 가드
읽기 전용 SQL 검사와 자격 증명 정책이 위험한 실행을 제한한다.
한계 부분 적용: 모든 저장소 명령과 비밀 유출을 루트 전체 CI에서 자동 차단하지는 않는다.
verification
적용검증·평가
RED→GREEN 기록, 렌더 검사와 패리티 검증이 결과를 재현 가능한 실행 기록으로 남긴다.
한계 공개 근거는 선별된 사례이며 전체 테스트 실행 이력을 뜻하지 않는다.
deployment
부분 적용배포·운영
빌드 성공 뒤 서비스 재시작과 활성 상태 확인을 수행하는 배포 절차가 있다.
한계 부분 적용: 자동 롤백과 외부 헬스 검증은 이 스크립트에 포함돼 있지 않다.
manual-sync
부분 적용매뉴얼 동기화
스펙 변경을 자동 감지하고 제안으로 등록한 뒤 관리자가 비교·반영 여부를 결정한다.
한계 부분 적용: 의미 판정과 최종 승인에는 여전히 사람의 검토가 필요하다.
Verified excerpts
검증된 근거
필터는 JavaScript가 켜졌을 때만 목록을 좁힙니다. 기본 HTML에는 전체 근거가 포함됩니다.
전체 19개 중 19개 근거 표시
기능 개발의 단일 오케스트레이션 흐름
spec-kit과 Superpowers를 잇는 권장 흐름이 문서 정책으로 정의돼 있다.
본 환경에는 기능 개발 시 활용할 수 있는 절차가 `feature-workflow`로 정의되어 있다. 이 절차는 **요구사항을 먼저 명세로 확정한 뒤(spec-kit), 정해진 작업 규율에 따라 구현하는(Superpowers)** 방식을 하나의 흐름으로 연결한다. "○○ 기능 개발해줘"와 같이 요청하면 적용된다. 실험 목적에 따라 단계를 조정하여 활용한다.
- 원본
README.md· L22–L22- 검증
- 확인됨 ·
명세와 작업 규율의 역할 분리
설계 산출물과 구현 규율의 책임 경계를 공개 문서가 설명한다.
- **spec-kit** — 개발 대상을 정의한다. 요구사항, 기술 계획, 작업 목록 문서를 산출한다. - **Superpowers** — 작업 방식을 관리한다. 착수 전 설계 검토(브레인스토밍)와 구현 단계의 테스트·검증 절차를 담당한다. spec-kit이 설계 문서를, Superpowers가 작업 규율을 담당하며, 두 영역은 아래 단일 절차로 연결된다.
- 원본
README.md· L26–L29- 검증
- 확인됨 ·
설계·명세·테스트 우선 구현 순서
기능 작업이 설계 검토, 명세, 테스트 우선 구현 순서를 따르도록 안내한다.
| 단계 | 내용 | |---|---| | 1. 설계 검토 | 요구사항을 정리하고 2~3개 방안을 비교하여 방향을 확정 | | 2. 명세 작성 | 확정된 방향을 요구사항·계획·작업 목록 문서로 작성 (spec-kit) | | 3. 구현 | 작업 목록에 따라 구현하며, 테스트 선작성 및 단계별 검증 적용 |
- 원본
README.md· L33–L37- 검증
- 확인됨 ·
spec-kit 명세 명령 체인
원칙부터 구현까지 추적 가능한 명세 명령 순서가 명시돼 있다.
1. `/speckit.constitution` — 프로젝트 기본 원칙 정의 (최초 1회) 2. `/speckit.specify` — 요구사항 정의 3. `/speckit.clarify` — 모호한 항목 확정 4. `/speckit.plan` — 기술 구성 및 구현 방식 결정 5. `/speckit.tasks` — 작업 단위 분해 6. `/speckit.implement` — 구현 실행
- 원본
README.md· L43–L48- 검증
- 확인됨 ·
프로젝트별 데이터베이스 격리 정책
공유 서버 안에서도 프로젝트별 데이터베이스와 사용자를 분리하도록 규정한다.
1. Do not add a per-project PostgreSQL container unless the user explicitly asks for an isolated database server. 2. Use the shared container named `shared-postgres`. 3. Create one database and one database user per project. 4. Use `infra/shared-postgres/scripts/create-project-db.sh <project-name>` before wiring a new project to PostgreSQL.
- 원본
AGENTS.md· L7–L10- 검증
- 확인됨 ·
자격 증명 커밋 금지
환경 파일의 데이터베이스 자격 증명을 저장소에 넣지 않도록 규정한다.
7. Never commit `infra/shared-postgres/.env` or project `.env` files containing database passwords.
- 원본
AGENTS.md· L13–L13- 검증
- 확인됨 ·
애플리케이션 변경 범위 보호
각 애플리케이션을 독립 변경 범위로 취급해 형제 프로젝트를 보호한다.
### I. Preserve repository boundaries Each application directory is an independent change scope. Never stage or alter unrelated sibling application data.
- 원본
lcy_try/.specify/memory/constitution.md· L5–L7- 검증
- 확인됨 ·
관찰 가능한 동작의 테스트 우선 정책
구현 전에 실패 회귀 테스트를 추가하고 관련 검증을 확장하도록 규정한다.
### III. Test observable behavior first Update or add a failing regression assertion before implementation, then run the smallest relevant test and the broader available suite when practical.
- 원본
lcy_try/.specify/memory/constitution.md· L13–L15- 검증
- 확인됨 ·
6개 단위 테스트 GREEN 기록
구현 후 6개 링크 처리 테스트가 모두 통과한 실행 결과를 보여 준다.
✔ urlVariants: 인코딩/비인코딩 표기를 모두 낸다 (0.259962ms) ✔ extractInternalLinks: 내부 앵커만 추출, 해시는 비교 키에서 제거 (3.85115ms) ✔ replaceHref: href 문자열만 바꾸고 앵커 텍스트는 보존 (1.086679ms) ✔ unlinkHref: 해당 href의 a 태그를 안쪽 텍스트만 남기고 해제 (0.328292ms) ℹ tests 6 ℹ suites 0 ℹ pass 6 ℹ fail 0
- 원본
.superpowers/sdd/task-1-report.md· L47–L55- 검증
- 확인됨 ·
작업별 리뷰와 수정 추적 기록
작업 완료뿐 아니라 리뷰 결과와 남은 경미한 한계를 함께 추적한다.
Task 2: complete (commit 8dcaa8e, review clean) - Minor(최종리뷰 참고): buildRelatedBlock href에 it.url 미이스케이프(내부 생성 URL만 쓰므로 저위험) Task 3: complete (commit 4cac08d, review clean; 플랜 Step5 검증버그 fb55a3f로 문서수정) - Minor(최종리뷰 참고): lib.mjs 관련블록 href 미이스케이프(내부 생성 URL, links-lib와 동일 관행) Task 4: complete (commit f078fad, review clean; 라이브 스캔: 정상78/리다이렉트8/오류0, 리다이렉트 8건은 전부 Elementor 페이지 출처)
- 원본
.superpowers/sdd/progress.md· L9–L13- 검증
- 확인됨 ·
읽기 전용 SQL 실행 가드
실행 전에 길이, 문장 수, 쓰기 키워드, 외부 호출과 SQLcl 명령을 코드로 차단한다.
if (!/^(select|with)\b/i.test(normalized)) {
throw new Error("Only SELECT or WITH read-only queries are allowed.");
}
if (/\bfor\s+update\b/i.test(normalized)) {
throw new Error("SELECT ... FOR UPDATE is not allowed.");
}
if (FORBIDDEN_SQL_PATTERN.test(normalized)) {
throw new Error("SQL contains a forbidden data-changing or administrative keyword.");- 원본
lcy_try/lcy_ai_config/sqlcl-readonly-mcp/src/oracleSqlGuard.js· L88–L95- 검증
- 확인됨 ·
프로젝트 데이터베이스 이름 정규화
프로젝트 입력을 안전한 슬러그로 제한하고 빈 이름 생성을 자동 중단한다.
PROJECT_RAW="$1" PROJECT_SLUG="$(printf '%s' "$PROJECT_RAW" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/_/g; s/^_+//; s/_+$//')" if [[ -z "$PROJECT_SLUG" ]]; then echo "Project name must contain at least one letter or number." >&2 exit 1 fi
- 원본
infra/shared-postgres/scripts/create-project-db.sh· L32–L38- 검증
- 확인됨 ·
고정 서브모듈 작업 경계 검증
gitlink 모드와 독립 worktree 경계를 스크립트가 확인한다.
[[ "$gitlink_mode" == "160000" ]] || fail "$SUBMODULE_REL is not a gitlink" [[ -d "$SUBMODULE_PATH" ]] || fail "submodule directory is not initialized" submodule_root="$(git -C "$SUBMODULE_PATH" rev-parse --show-toplevel 2>/dev/null || true)" [[ "$submodule_root" == "$SUBMODULE_PATH" ]] || \ fail "$SUBMODULE_REL is not an independent Git worktree"
- 원본
NJY-claude-agent-server/scripts/verify-kiwibox-submodule.sh· L43–L48- 검증
- 확인됨 ·
RED→GREEN→REFACTOR 품질 게이트
행동 변경에 테스트 우선과 전체 품질 검증을 요구하는 프로젝트 헌법이다.
### III. 테스트 우선과 회귀 방지 (NON-NEGOTIABLE) 행동 변경은 실패하는 자동화 테스트를 먼저 작성하고 RED → GREEN → REFACTOR 순서로 구현해야 한다. 순수 로직은 단위 테스트로, 컴포넌트 계약과 사용자 흐름은 통합 또는 렌더 테스트로 검증한다. 관련 테스트와 기존 사이트 검사, 린트, 프로덕션 빌드가 모두 통과하기 전에는 구현 완료로 간주하지 않는다.
- 원본
insapien-docs/.specify/memory/constitution.md· L40–L45- 검증
- 확인됨 ·
88/88 패리티와 렌더 결함 검출
렌더 결함 수정 뒤 전 문서 렌더와 두 사이트 패리티를 재검증한 기록이다.
수정 후 재검증: - `node --env-file=app/.env.local scripts/render-check.mjs` → `docs=88 errors=0 rawDirectives=0 h1=88/88 anchors=27/27` (회귀 없음) - `npm run build` 성공 → `systemctl restart insapien-docs` → `node --env-file=app/.env.local scripts/parity-check.mjs` → **`88/88 parity ok`**
- 원본
insapien-docs/.superpowers/sdd/task-9-report.md· L36–L38- 검증
- 확인됨 ·
소스 대조 독립 감사 지침
작성자를 신뢰하지 않고 정본과 대조하며 발견과 수정을 분리하는 감사 정책이다.
당신은 독립 감사자다. 작성자를 신뢰하지 말고 소스와 대조하라. **이관본 문서를 수정하지 마라** — 발견만 하고 보고서에 기록한다(수정 반영은 별도 단계).
## 검사 A — 미근거/모순 (이관본 → 소스)
이관본의 실질 주장(화면 동작·권한·절차·경고·FAQ 답·차단 규칙·자동 동작)을 정본·리버스 spec과 대조:
- **미근거**: 어느 소스에도 없음 — 문장 인용 + 심각도(high: 틀리면 사용자 실수·사고 / medium: 오해 소지 / low: 무해)
- **모순**: 소스와 반대 — 문장 인용 + 소스의 실제 서술 + 위치
- 일반적 UI 상식("조회를 누릅니다")은 통과. 구체 규칙 주장("~인 경우에만", "~하면 차단")은 반드시 근거 확인.- 원본
insapien-docs/docs/audits/full-2026-08-06/_instructions.md· L3–L9- 검증
- 확인됨 ·
역방향 변경의 관리자 승인 흐름
자동 감지 뒤에도 실제 문서 반영과 보류는 관리자가 비교 화면에서 결정한다.
# 리버스 반영 운영 런북 (감지 확정판, 2026-08-09) 사용자 확정 절차: 새 스펙 전달 → 기준본 비교·감지 → 문서 매핑 → 제안문 등록 → **관리자가 비교 화면에서 반영/보류 결정**. 이 문서는 그중 Claude 세션이 수행하는 감지~등록 단계의 실행 절차다.
- 원본
insapien-docs/docs/reverse-procedure.md· L1–L3- 검증
- 확인됨 ·
스펙 변경 자동 감시와 수동 판정
변경 감지는 자동화됐지만 내용 판정과 최종 반영은 사람의 운영 절차로 남아 있다.
0. **자동 감시** — `scripts/reverse-watch.mjs`(systemd `insapien-docs-reverse-watch.timer`, 매일 03:30 KST)가 스펙 저장소를 기준본과 비교. 변경·신규 발견 시 인박스 자동 반입+기계 감지 보고서 생성+`app_settings.reverse_watch_status` 기록 → 관리자 홈 카드·/manage/reverse 패널에 "⚠ 스펙 변경 감지" 표시. **사람이 배포를 기억할 필요 없음.**
- 원본
insapien-docs/docs/reverse-procedure.md· L51–L51- 검증
- 확인됨 ·
빌드 후 서비스 재시작 배포 스크립트
빌드 실패 시 중단하고 서비스 활성 상태를 확인하지만 롤백과 외부 헬스 검증은 포함하지 않는다.
echo "[deploy] npm run build" (cd "$ROOT_DIR/app" && npm run build) echo "[deploy] systemctl restart insapien-docs" sudo systemctl restart insapien-docs echo "[deploy] systemctl is-active insapien-docs" sudo systemctl is-active insapien-docs
- 원본
insapien-docs/scripts/deploy.sh· L24–L31- 검증
- 확인됨 ·