From 8544ea30f4c4cea5489b7a136d6c53a8a538341a Mon Sep 17 00:00:00 2001 From: gitea-impl-agent Date: Fri, 2 Oct 2026 06:09:11 +0000 Subject: [PATCH] docs(auth): restore legacy acceptance contracts --- ..._dashboard-administrator-authentication.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/docs/requirements/req-001_dashboard-administrator-authentication.md b/docs/requirements/req-001_dashboard-administrator-authentication.md index c89ae49..841c988 100644 --- a/docs/requirements/req-001_dashboard-administrator-authentication.md +++ b/docs/requirements/req-001_dashboard-administrator-authentication.md @@ -266,6 +266,26 @@ credential, secret, token, cookie가 UI·URL·log·session state에 나타나지 비민감 correlation ID 외 인증 비밀 상태가 없다. +### REQ-001.03-AC02 — 두 credential의 constant-time 비교 + +**판정 기준** + +제출 ID와 password는 각각 `hmac.compare_digest`로 비교하며, 한 필드가 일치하지 않아도 다른 필드의 비교를 생략하지 않는다. + +**검증** + +`tests/test_dashboard_authentication.py::test_verify_credentials_uses_constant_time_comparison_for_both_fields`에서 성공 및 두 필드가 모두 잘못된 경우에 두 비교의 호출 순서와 인자를 계측한다. + +**검증 분류** + +- 수준: unit +- 백엔드: pytest monkeypatch +- 케이스: 정상 credential, 잘못된 ID와 password + +**상태 불변조건** + +일반 동등 비교나 한 필드 실패에 따른 short-circuit를 사용하지 않는다. + ### REQ-001.04-AC01 — 실패 지연과 일반 오류 **판정 기준** @@ -406,6 +426,46 @@ README와 Kubernetes 문서에 HTTPS, proxy allowlist, rate limit, secret 주입 실제 credential·secret 값이 문서와 manifest에 없다. +### REQ-001.10-AC02 — 인증 후 기존 페이지 호환성 + +**판정 기준** + +유효한 Dashboard 인증 cookie로 인증하면 기존 page query parameter를 유지한 채 요약, 자산/마감, 분류 규칙, 확인필요 큐와 월정산 핵심 페이지가 예외 없이 예상 내용을 렌더링한다. + +**검증** + +`tests/test_dashboard_app.py::test_streamlit_apptest_core_pages_use_synthetic_fixture_db`와 `tests/test_dashboard_authentication_app.py::test_valid_cookie_allows_dashboard_and_is_not_stored_in_session_state`를 실행한다. + +**검증 분류** + +- 수준: regression integration +- 백엔드: Streamlit AppTest, synthetic SQLite +- 케이스: 인증된 핵심 page query와 기존 gateway + +**상태 불변조건** + +기존 SQLite schema, page query와 gateway contract를 변경하지 않는다. + +### REQ-001.10-AC03 — MCP 인증 범위 분리 + +**판정 기준** + +Dashboard cookie 인증은 MCP endpoint의 인증을 의미하지 않으며 MCP server 진입점, transport와 port를 변경하지 않는다. + +**검증** + +Base-to-head diff에서 MCP 인증·진입점·transport·port를 담당하는 `jarca_ledger_mcp/server.py`, `jarca_ledger_mcp/adapters/mcp/**`, `tests/test_mcp_http_runtime.py`의 불변성을 확인하고 기존 stdio, streamable HTTP와 invalid transport 회귀 test를 실행한다. + +**검증 분류** + +- 수준: static/regression +- 백엔드: Git diff, pytest +- 케이스: MCP source, stdio, streamable HTTP, invalid transport + +**상태 불변조건** + +Dashboard와 MCP 인증 경계를 결합하지 않으며 MCP 인증 상태를 변경하지 않는다. + ### REQ-001.11-AC01 — 안전한 관찰성 **판정 기준**