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
검증
확인됨 ·