feat(api): complete gateway route lifecycle - #112
Conversation
📝 WalkthroughWalkthrough라우트와 DNSBL 항목의 조회·교체·삭제 API를 추가했습니다. ETag와 Changes라우트 및 DNSBL 항목 API
Estimated code review effort: 4 (Complex) | ~60 minutes Merge Risk: 🔵 Low · up to The PR adds route lifecycle operations and API contract updates, but the current head still has bounded integration issues: generated clients may reject valid DNSBL delete requests, DNSBL responses are weakly typed, and read-only users may be blocked from viewing job status. The change is mergeable with explicit owner follow-up on these contract and read-access inconsistencies. Sequence Diagram(s)sequenceDiagram
participant Client
participant ResourceAPI
participant AdminWriteAuth
participant Persistence
participant AuditLog
Client->>ResourceAPI: 라우트 또는 DNSBL 조회·교체·삭제 요청
ResourceAPI->>AdminWriteAuth: 관리자 쓰기 권한 검증
AdminWriteAuth-->>ResourceAPI: 인증 및 권한 결과
ResourceAPI->>ResourceAPI: ETag와 If-Match 검증
ResourceAPI->>Persistence: 상태 변경 및 영속화
Persistence-->>ResourceAPI: 성공 또는 오류
ResourceAPI->>AuditLog: 성공한 교체·삭제 기록
ResourceAPI-->>Client: 리소스 응답 또는 HTTP 상태
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 34.15% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 41 functions across 1 files. (2 skipped: 2 unsupported.)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Fresh repair-first state (2026-09-05 KST): converted to Draft because exact head |
|
Architecture/base repair finding, 2026-09-06 KST. This Draft is still exact Fresh patch inventory proves the unique customer/API slice to preserve is confined to three paths: Repair order: keep this preservation lane Draft; integrate #155 through ordinary protected governance first; then start from fresh protected |
Preservation / reconstruction state — 2026-09-08 KST
This PR remains Draft and is not an integration candidate on its current ancestry. It preserves a reviewed Wardnet-owned gateway route/DNSBL resource-lifecycle slice: item-level reads, conditional replace/delete, ETag/If-Match concurrency, write/read-only authorization distinction, persistence/audit evidence, OpenAPI 3.1 contracts, and hostile edge tests.
Fresh protected/default truth is
main@a52ccd0a24a727d9349bb32def7713882d8cad1e. Current branch is exactbab3c72bb72e041ad494932ae07b0fb2401991ecfrom obsolete merge base107117634764c901dff540044585d64088fafedb. Fresh protected-main comparison isdiverged, ahead 11 / behind 8, and GitHub reports the PR non-mergeable. The current protected-main-relative delta is three paths:docs/api-inventory.md(+40),docs/openapi.yaml(+169), andsrc/lib.rs(+743/-32). Do not mechanically merge this stale aggregate source into protected main and do not close it until the valid unique delta is completely transferred or proven obsolete.Reviewed behavior to preserve
The branch's historical review findings are all resolved/outdated in the live thread inventory. Valid repaired contracts that a successor must retain or explicitly supersede include:
If-Match: *semantics and missing-resource behavior;401) from authenticated read-only mutation attempts (403) consistently;If-Matchas a runtime-reachable428rather than making generated clients reject the request before transmission;Historical exact-head CI
33119527141, Fuzz33119527052, Security33119527071, and SAST33119527274are terminal SUCCESS onbab3c72..., but they predate current protected ancestry and central governance/workflow contracts. They are preservation evidence only and do not transfer to a reconstructed head.Reconstruction order and ownership
Rebuild from the exact then-current protected
main, not by copying this stalesrc/lib.rswholesale. Protected authentication/runtime/configuration and gateway fixes that landed or are carried by newer bounded lanes must be adopted first. Reconcile this resource-lifecycle behavior with #155 management-authentication authority, #140 Runtime Configuration, #93 deterministic persistence-fault seam, and protected/new gateway route semantics such as #181. Preserve only the route/DNSBL lifecycle API delta that remains unique after that comparison.Wardnet owns this management API lifecycle, persistence coordination and audit evidence. EgressWeave outbound transport authorization, Keyverse identity backend, quarantine execution, contextual-orchestrator LLM/provider orchestration and AppGuardrail static analysis remain separate owner authorities.
A bounded successor must add/replay hostile REDs against current protected behavior before causal implementation, publish code-current OpenAPI/architecture docs, and reacquire exact-head format/locked workspace tests/Clippy, owned coverage, fuzz, Security/SAST/CodeQL/Strix/review/thread/candidate-base/governance evidence. No self/model approval, routine administrator bypass, gate weakening, force push/destructive rebase, predecessor-result transfer, stale aggregate merge, mutable foreign dependency, source copy or cross-service SQL.