Files
jarca-ledger-mcp/docs/project-structure.md
T

8.0 KiB

Project Structure — Dashboard 관리자 인증

목적과 경계

Issue #6 인증을 기존 Dashboard 구조에 배치하고 fail-closed 경계와 server-only secret binding을 유지한다.

  • 포함 경계: dashboard/ 인증 adapter/gate, tests, 운영 문서
  • 제외 경계: MCP transport, 금융 schema, DB migration, external auth middleware

디렉터리 구조

dashboard-source — Dashboard source

dashboard/
├── server.py
├── auth_server.py
├── authentication.py
├── app.py
├── common.py
└── page_views/
경로 종류 책임 공개 진입점 내부 구현 경계 편집 정책 생성 주체
dashboard/server.py source ASGI app 조립 app route wiring only source review required developer
dashboard/auth_server.py source login/cleanup/logout response create_auth_routes() no DB/page imports source review required developer
dashboard/authentication.py source config, constant-time compare, token verify, gate require_dashboard_authentication() server-only secret use source review required developer
dashboard/app.py source auth gate first, then DB path resolution, common shell/sidebar/refresh assembly, and target body renderer dispatch main() shell/background remain outside the replaceable body; no token signing details source review required developer
dashboard/common.py source shared Dashboard shell, menu/query transition, stable body container, loading/error/retry rendering, and app background/style render_sidebar_nav(), render_dashboard_body(), inject_app_css() no authentication transport or financial write orchestration source review required developer
dashboard/page_views/ source financial UI pages page_* functions no auth transport calls source review required developer

dashboard/common.py owns the shared visual theme through JARCA_COLORS, JARCA_PLOTLY_TEMPLATE, and inject_app_css(). Page renderers consume that theme but do not own or replace the authenticated shell/sidebar background.

verification-tests — 인증 검증

tests/
├── test_dashboard_authentication.py
├── test_dashboard_persistent_authentication.py
├── test_dashboard_auth_server.py
├── test_dashboard_menu_transition.py
├── test_streamlit_browser_evidence.py
└── test_dashboard_authentication_app.py
경로 종류 책임 공개 진입점 내부 구현 경계 편집 정책 생성 주체
tests/test_dashboard_authentication.py test credential compare, delay, redaction pytest tests test-only settings source change paired with test developer
tests/test_dashboard_persistent_authentication.py test claims, TTL, tamper, rotation pytest tests no real secrets source change paired with test developer
tests/test_dashboard_auth_server.py test HTTP routes and cookie scope pytest tests synthetic test credentials source change paired with test developer
tests/test_dashboard_menu_transition.py test REQ-002 menu/query/body transition and cache-clear regression pytest/AppTest synthetic fixture DB; no real secrets source change paired with test and browser evidence where required developer
tests/test_streamlit_browser_evidence.py test transition evidence manifest, redaction, TLS fixture and fail-closed validation pytest generated synthetic values only; no captured credential values evidence-harness change paired with test developer
tests/test_dashboard_authentication_app.py test gate ordering and cleanup/UI AppTest fixture DB only source change paired with test developer

browser-evidence — 실제 전환 관찰

경로 종류 책임 공개 진입점 내부 구현 경계 편집 정책 생성 주체
scripts/streamlit_browser_evidence.py verification tool synthetic DB와 runtime 생성 인증 설정으로 실제 HTTPS Dashboard 전환의 frame/DOM/document/shell 관찰을 수집하고 redacted manifest를 검증 --mode transition 운영 DB·credential 사용 금지; 성공 증거는 browser/server teardown 뒤에만 확정 source review and focused test required developer
docs/evidence/issue-9-dashboard-menu-transition/ evidence artifact exact source hash에 결합한 authenticated browser frame, screenshot, runtime, validator 결과 manifest.json synthetic fixture only; credential/token/cookie 값 금지 immutable after verification except complete regeneration verification runner

deployment-docs — 운영 문서

docs/requirements/req-001_dashboard-administrator-authentication.md
docs/requirements/req-002_dashboard-menu-transition.md
docs/evidence/issue-9-dashboard-menu-transition/
docs/interface-contract.md
docs/runtime-flow.md
README.md
deploy/k8s/README.md
경로 종류 책임 공개 진입점 내부 구현 경계 편집 정책 생성 주체
docs/requirements/req-001_dashboard-administrator-authentication.md requirement approved REQ-001 revision 2.0 REQ-001 canonical traceability update in place developer
docs/requirements/req-002_dashboard-menu-transition.md requirement approved REQ-002 revision 1.0 REQ-002 canonical traceability update in place developer
docs/interface-contract.md contract HTTP/cookie/gate contracts contract IDs no implementation secrets update with API changes developer
docs/runtime-flow.md design runtime states/transitions flow IDs no secret values update with flow changes developer
README.md operations local/deployment constraints operator commands no secret values operational review developer
deploy/k8s/README.md operations k3s secret/TLS procedure deployment procedure no secret values deployment review developer

의존 방향

출발 영역 대상 영역 허용 여부 규칙 공유 계약 위치
dashboard.server dashboard.auth_server 허용 compose ASGI routes only docs/interface-contract.md
dashboard.server dashboard.app 허용 app remains protected by gate docs/runtime-flow.md
dashboard.app dashboard.authentication 허용 gate precedes DB/page dispatch docs/interface-contract.md
dashboard.authentication dashboard.page_views 금지 auth module never imports financial pages docs/project-structure.md
dashboard.app dashboard.common 허용 menu/query/body transition helpers only after auth gate docs/interface-contract.md
dashboard.auth_server jarca_ledger_mcp DB 금지 login/cleanup/logout are DB-free docs/requirements/req-001_dashboard-administrator-authentication.md

변경 규칙

구분 규칙
새 모듈·파일 배치 auth route/gate changes stay in dashboard/; menu transition stays in existing dashboard.app/dashboard.common; no DB session module
이름·패키지 use existing dashboard package and snake_case modules
소스·테스트 대응 auth source behavior requires focused pytest/AppTest coverage; REQ-002 transition behavior requires focused pytest/AppTest targets and real-browser evidence where specified
생성 산출물 evidence may be redacted; never commit credentials, secrets, tokens, or cookie values

검증

  • 구조 검사 명령:

    python -m compileall -q dashboard tests scripts
    
  • 구조 검사 기대 결과: exit 0 and no generated source outside ignored bytecode locations

  • 정적 분석 명령:

    uv run --extra dashboard --extra dev ruff check dashboard tests scripts
    
  • 정적 분석 기대 결과: exit 0 with no diagnostics

  • 문서와 실제 트리의 정합성: every listed source/test/document path exists; dependency table has no forbidden reverse edge; REQ-002 symbols resolve to dashboard/app.py, dashboard/common.py, and named tests