Repository navigation
엔터프라이즈 연동성 감사 2026-10-11 — 추적 (DB·인프라·CI/CD·SPI 생태계·LLM/에이전트) #255
Copy link
Copy link
Open
Labels
production-readinessGaps blocking real production use (beyond the Phase 1 reference impl)Gaps blocking real production use (beyond the Phase 1 reference impl)
Description
2026-10-11 엔터프라이즈 연동성 감사 — 추적
기준: main 9611855(v0.8.0 + 168커밋), 2026-10-11 실측. 축: DB · 인프라 · CI/CD · 오픈소스 연동(SPI) · LLM/에이전트. 각 이슈에 실측 근거(파일:라인)와 외부 베스트프랙티스가 있다.
P0 — 운영 DB 경로가 조용히 깨진다
- Postgres 백엔드에서
Idempotency-Key가 경고 없이 무시된다 — 드라이버 opt-in 미지원을 기동 시 감지하고 TCK에 멱등성 계약을 넣는다 #228 Postgres 백엔드에서Idempotency-Key가 경고 없이 무시된다 — 드라이버 opt-in 미지원을 기동 시 감지하고 TCK에 멱등성 계약을 넣는다 -
lnpl outbox drain/lnpl relay가drain_outbox/ack_outbox없는 드라이버(postgres)에서 AttributeError로 죽는다 #229lnpl outbox drain/lnpl relay가drain_outbox/ack_outbox없는 드라이버(postgres)에서 AttributeError로 죽는다 - RepositoryDriver 선택 메서드 5종 구현 — idempotency_begin/finish/release, drain_outbox/ack_outbox (linkly#228, linkly#229) lnpl-postgres#8 RepositoryDriver 선택 메서드 5종 구현 — idempotency_begin/finish/release, drain_outbox/ack_outbox (linkly#228, linkly#229)
- relay: wrap each outbox batch (drain→publish→ack) in begin()/commit() for exactly-once per batch on SKIP LOCKED drivers #257 relay: outbox 배치(drain→publish→ack)를 begin()/commit()으로 감싸 SKIP LOCKED 드라이버에서 배치당 1회 전달 (lnpl-postgres#8 후속) — PR Prerequisite batch: relay tx (#257), Idempotency-Key bound (#258), RFC promotions (#249), governance files (#242), vendor-neutral AI gates (#252) #259
- wsgi: bound Idempotency-Key length (400) and roll back before idempotency_release on the consume escape path #258 wsgi:
Idempotency-Key길이 상한(400) + consume 실패 경로에서 idempotency_release 전 rollback (lnpl-postgres#8 후속) — PR Prerequisite batch: relay tx (#257), Idempotency-Key bound (#258), RFC promotions (#249), governance files (#242), vendor-neutral AI gates (#252) #259
P1 — SPI는 있고 구현체가 없다
-
lnpl.tokens외부 IdP 구현체 0건 —lnpl-oidc레퍼런스(RS256/ES256 + JWKS kid·캐시·로테이션)로 자기주장 토큰 경계를 넘는다 #230lnpl.tokens외부 IdP 구현체 0건 —lnpl-oidc레퍼런스(RS256/ES256 + JWKS kid·캐시·로테이션)로 자기주장 토큰 경계를 넘는다 -
lnpl.publishers브로커 구현체 0건 —lnpl-kafka레퍼런스(CloudEvents Kafka 바인딩)로 아웃박스 → 브로커 경로를 실증한다 #231lnpl.publishers브로커 구현체 0건 —lnpl-kafka레퍼런스(CloudEvents Kafka 바인딩)로 아웃박스 → 브로커 경로를 실증한다 -
lnpl.secrets시크릿 매니저 구현체 0건 —lnpl-vault(또는 AWS Secrets Manager) 레퍼런스 #232lnpl.secrets시크릿 매니저 구현체 0건 —lnpl-vault(또는 AWS Secrets Manager) 레퍼런스 - 저장소 보조 인덱스 0건 —
list where/order by필드가 JSON 전체 스캔이다 (sqlite 표현식 인덱스·postgres GIN/표현식 인덱스 전략 +lnpl db check권고) #233 저장소 보조 인덱스 0건 —list where/order by필드가 JSON 전체 스캔이다 (sqlite 표현식 인덱스·postgres GIN/표현식 인덱스 전략 +lnpl db check권고) -
HttpNetworkDriver에 사설 CA·mTLS·프록시 설정이 없고 keep-alive 풀 실드라이버도 없다 — TLS 컨텍스트 옵션 +lnpl-httpx레퍼런스 #234HttpNetworkDriver에 사설 CA·mTLS·프록시 설정이 없고 keep-alive 풀 실드라이버도 없다 — TLS 컨텍스트 옵션 +lnpl-httpx레퍼런스
P2 — 인프라·데이터
- 릴리스 컨테이너 이미지가 linux/amd64 단일이다 — arm64 멀티아키 빌드 #235 릴리스 컨테이너 이미지가 linux/amd64 단일이다 — arm64 멀티아키 빌드
-
lnpl generate k8s가 ConfigMap/Deployment/Service만 낸다 — Ingress·HPA·PDB·NetworkPolicy·스케줄 트리거용 CronJob #236lnpl generate k8s가 ConfigMap/Deployment/Service만 낸다 — Ingress·HPA·PDB·NetworkPolicy·스케줄 트리거용 CronJob -
/-/metrics가 3시리즈뿐이다 — HTTP 라우트별 RED, DB 풀, 캐시 적중, 아웃박스 적체 #237/-/metrics가 3시리즈뿐이다 — HTTP 라우트별 RED, DB 풀, 캐시 적중, 아웃박스 적체 - 백업·복원이 문서로만 존재한다 —
lnpl db backup/복원 검증 커맨드 또는 Litestream 레퍼런스 + 복원 리허설 테스트 #238 백업·복원이 문서로만 존재한다 —lnpl db backup/복원 검증 커맨드 또는 Litestream 레퍼런스 + 복원 리허설 테스트 - 스키마 마이그레이션이 단일 필드 코어싱뿐이다 — 다중 필드·엔티티 rename·백필 계획 파일과 dry-run 검증 #239 스키마 마이그레이션이 단일 필드 코어싱뿐이다 — 다중 필드·엔티티 rename·백필 계획 파일과 dry-run 검증
- 멀티테넌시·객체 단위 인가가 없다 — tenant 스코프 행 격리 +
caller.subject소유권 가드 패턴 RFC 검토 #240 멀티테넌시·객체 단위 인가가 없다 — tenant 스코프 행 격리 +caller.subject소유권 가드 패턴 RFC 검토 - 감사 추적(audit trail)이 없다 — actor·action·resource·outcome 불변 레코드 채널 #241 감사 추적(audit trail)이 없다 — actor·action·resource·outcome 불변 레코드 채널
P2 — CI/CD·거버넌스
- 거버넌스 파일 부재 — CODEOWNERS·SECURITY.md·CONTRIBUTING.md·CODE_OF_CONDUCT.md #242 거버넌스 파일 부재 — CODEOWNERS·SECURITY.md·CONTRIBUTING.md·CODE_OF_CONDUCT.md — PR Prerequisite batch: relay tx (#257), Idempotency-Key bound (#258), RFC promotions (#249), governance files (#242), vendor-neutral AI gates (#252) #259
- 공급망 가드 부재 — Dependabot(alerts+updates)·CodeQL default setup·액션 SHA 핀·의존성 락파일 #243 공급망 가드 부재 — Dependabot(alerts+updates)·CodeQL default setup·액션 SHA 핀·의존성 락파일
- 브랜치 보호에 required PR reviews·conversation resolution이 없다 #244 브랜치 보호에 required PR reviews·conversation resolution이 없다
- 릴리스 드리프트 — v0.8.0(2026-09-02) 이후 168커밋 미출시, PyPI 발행 비활성, 외부 드라이버가 커밋 SHA 핀 #245 릴리스 드리프트 — v0.8.0(2026-09-02) 이후 168커밋 미출시, PyPI 발행 비활성, 외부 드라이버가 커밋 SHA 핀
- CI 매트릭스에 Python 3.14가 없다 #246 CI 매트릭스에 Python 3.14가 없다
- 테스트 커버리지 측정·게이트가 없다 #247 테스트 커버리지 측정·게이트가 없다
-
impl/tests가 ruff 게이트에서 제외돼 있다(기존 위반 79건) — 정리 후 편입 #248impl/tests가 ruff 게이트에서 제외돼 있다(기존 위반 79건) — 정리 후 편입 - RFC-0061·0064가 Draft인데 구현이 출하됐다 — 상태 승격과 rfc_lint 규칙 #249 RFC-0061·0064가 Draft인데 구현이 출하됐다 — 상태 승격과 rfc_lint 규칙 — PR Prerequisite batch: relay tx (#257), Idempotency-Key bound (#258), RFC promotions (#249), governance files (#242), vendor-neutral AI gates (#252) #259
LLM·에이전트
- MCP 서버가 stdio 전용이고
run/openapi/generate를 노출하지 않는다 — streamable-HTTP 전송 + 실행계 툴 검토 #250 MCP 서버가 stdio 전용이고run/openapi/generate를 노출하지 않는다 — streamable-HTTP 전송 + 실행계 툴 검토 - 토큰 절약 실측이 예제 1건뿐이다 — 시나리오 확장과 pass@k #251 토큰 절약 실측이 예제 1건뿐이다 — 시나리오 확장과 pass@k
- AI 게이트 4종이
ANTHROPIC_API_KEY단일 벤더에 의존한다 — 벤더 중립 헌장과의 불일치 검토 #252 AI 게이트 4종이ANTHROPIC_API_KEY단일 벤더에 의존한다 — 벤더 중립 헌장과의 불일치 검토 — PR Prerequisite batch: relay tx (#257), Idempotency-Key bound (#258), RFC promotions (#249), governance files (#242), vendor-neutral AI gates (#252) #259 - 운영 문서 영어판이 없다 — serving·backends·compatibility·CI-GATES 영어 채택 마찰 #253 운영 문서 영어판이 없다 — serving·backends·compatibility·CI-GATES 영어 채택 마찰
- 에디터 지원이 없다 — LSP(진단·did-you-mean)·tree-sitter 하이라이트, 사람 리뷰 경로 #254 에디터 지원이 없다 — LSP(진단·did-you-mean)·tree-sitter 하이라이트, 사람 리뷰 경로
후속 (PR #259에서 발견)
- generic-http AI gate: schema-invalid output goes red, prose-factcheck misses PR text, wiring tests are per-mutation pins #260 generic-http AI 게이트 잔여 갭(스키마 위반 시 red, prose-factcheck PR 본문 누락, 배선 테스트 구조화)
- serve: bound the CloudEvents id on consume, catch DriverError from idempotency_release, declare Idempotency-Key maxLength in OpenAPI #261 serve: CloudEvents id 길이 상한, release DriverError raw 500, OpenAPI maxLength
- relay: bound outbox batches so concurrent relays share a large backlog #262 relay 배치 크기 상한
- rfc_lint: check RFC-0007 §2.2 back-links; fix CI-GATES roster row; decide rule-7 consolidations and back-link drift #263 rfc_lint §2.2 백링크 검사, CI-GATES 로스터, 규칙 7 통합 후보·백링크 드리프트
의도된 비범위 (이슈로 열지 않음)
JWKS·RS256 코어 미탑재(docs/backends.md D4), 브로커 실바인딩 코어 밖(#88 원칙), WebSocket 보류, 내장 크론 없음, 분산 rate limit은 게이트웨이 몫(#194), security encrypt 제거(RFC-0035 D3), 오브젝트 스토리지는 capability http 우회(#193). 이들은 결정이지 누락이 아니다 — 그 자리를 채울 패키지가 비어 있다는 것이 P1의 요지다.
감사 산출물: 세션 그래프 graphify-out/(로컬, 미커밋). 이전 감사: #141–#148(2026-08-30), #161–#166(2026-09-02), #172–#180(probe-v0.8).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
production-readinessGaps blocking real production use (beyond the Phase 1 reference impl)Gaps blocking real production use (beyond the Phase 1 reference impl)
Activity
choiyounggi commentedon Oct 15, 2026
P0 follow-through for the Postgres driver: choiyounggi/lnpl-postgres#8 is closed via lnpl-postgres PR #9 (main
a1bef53) — the driver now implements all five optionalRepositoryDrivermethods (idempotency_begin/finish/release,drain_outbox/ack_outbox), pinned to linklyb1cd523, soIdempotency-Keyrequests andlnpl relaywork onpostgres:backends instead of 501 / rc 2.New linkly-side follow-ups from that run's integration review: #257 (relay exactly-once per batch via begin()/commit()), #258 (Idempotency-Key length bound + rollback before release).