Files
portfolio-hub/docs/srs/Documentation/req-021_release-credential-matrix-and-token-provenance-procedures.md
T
genichin e6b6a8715b feat: implement daemon model with registry and single-asset assignment (BAT-010, REQ-023/028)
Core Implementation (BAT-010):
- Add daemon registry schema and CRUD operations (req-023)
- Implement single-daemon asset assignment constraint (one asset per daemon)
- Add daemon_id field to service_token for daemon identification
- Add daemon.py CLI module for daemon management commands
- Add 20260513_0016_daemon_model.py migration for daemon tables

API Changes:
- GET /v1/assets: include daemon_id in AssetResponse
- POST /v1/assets/{asset_id}/ledger/trades: require daemon token binding
- GET /v1/user_info: include daemon metadata
- Enhanced service-token rotate to preserve daemon bindings

CLI Commands:
- pfhub daemon register --name <name> --runtime-id <runtime-id>
- pfhub daemon list
- pfhub daemon get <daemon-id>
- pfhub daemon revoke <daemon-id>

Requirements (REQ-023, REQ-028):
- REQ-023: Daemon Registry and Service Token Daemon Binding (Interface, Approved)
  * AC-1: daemon CRUD operations
  * AC-2: service token daemon binding for POST /v1/assets/{asset_id}/ledger/trades
  * AC-3: single daemon per asset (exact-one assignment model)
- REQ-028: README.md Daemon Provisioning Runbook update (Documentation, Approved)

Documentation:
- Add dcy-006 Discovery for daemon-id and single-daemon asset assignment
- Update README.md with Daemon Provisioning Runbook section
- Add BAT-010 batch documentation with planning, implementation, verification
- Update rel-006 release document (daemon model implementation)
- Update data-model.md with daemon and daemon_asset_assignment tables
- Update interface-contract.md with daemon registry APIs
- Update runtime-flows.md with daemon lifecycle flows

Breaking Changes:
- REQ-005~009, REQ-011~012 status reverted to Approved due to revised contract
  * daemon_id field addition and exact-one asset assignment requirement
  * Existing Implemented evidence invalidated by contract revision
  * BAT-001/002/008 re-verification required

Testing:
- Add test_daemon_registry.py for daemon CRUD operations
- Add test_daemon_assignment.py for single-asset assignment constraints
- Update test_auth.py, test_cli.py, test_v1.py for daemon support
- Verify daemon token binding in trade endpoint authorization

Impact:
- Database: 2 new tables (daemons, daemon_asset_assignments)
- Migration: 20260513_0016 creates daemon model schema
- CLI: 4 new daemon subcommands
- API: daemon_id propagation through v1 endpoints
- Verification: BAT-001/002/008 re-verification gates next release
2026-05-13 23:07:24 +00:00

8.0 KiB

req-021: release 검증 credential matrix 및 token provenance 운영 절차

  • Status: Approved
  • Type: Documentation
  • Priority: High
  • Owner: repository-maintainers

Intent

  • release 검증에 사용하는 credential의 용도, 발급 주체, 보관 위치, 폐기 절차가 정의되지 않으면 smoke 재현성이 없어지고 secret leakage 위험이 높아진다.
  • public/no-auth, read service-token, trade-write service-token, admin auth context 4개 credential 관점의 matrix를 문서화하고, daemon-aware CLI/API를 token provenance 확인 canonical path로 명시한다.

Requirement

  • README.md Production Operator Runbook 또는 연결된 운영 문서는 아래 credential matrix를 명시해야 한다.
    • public/no-auth: GET /health, /docs, /openapi.json. 인증 불필요. 배포 직후 공개 smoke에 사용.
    • read service-token: GET /v1/assets, GET /v1/user_info. 환경 단위 운영 credential. 발급: admin context로 POST /auth/service-tokens 후 existing daemon_id에 binding. 보관: /opt/portfoliohub/.env 또는 동일 접근 통제 하 운영 절차. 공동 소유자: release approver / repository-maintainers.
    • trade-write service-token: POST /v1/assets/{asset_id}/ledger/trades. 환경 단위 운영 credential. 발급: admin context로 POST /auth/service-tokens 후 existing daemon_id에 binding. 보관: read token과 동일 정책. 공동 소유자: release approver / repository-maintainers.
    • admin auth context: POST /auth/service-tokens. 운영자 개인 소유. 공유 금지. 발급: steady-state는 /auth/login 경유 DB-issued session, break-glass는 env token.
  • release 문서에는 name, token_prefix, permission, daemon_id, runtime_id, issued_at, revoked_at만 기록하고 raw token값은 기록하지 않는다.
  • 운영자는 pfhub service-token list, pfhub service-token issue, pfhub service-token rotate, pfhub user get, GET /v1/user_info를 token provenance 확인 canonical support path로 사용한다. 각 명령의 출력 필드(name, token_prefix, token_id, user_id, permission, daemon_id, created_at, last_used_at, revoked_at, runtime_id)를 provenance 확인 기준으로 명시한다.
  • rotate 또는 재발급 이후에는 daemon_id 불변과 runtime_id 갱신 여부를 함께 대조해야 한다.

Acceptance Criteria

  1. Given README.md 또는 연결된 운영 문서가 존재할 때, When 운영자가 credential matrix를 참조할 때, Then public/read/trade-write/admin 4개 credential의 용도, 발급 주체, 보관 위치, 공동 소유 역할과 daemon binding 전제가 구분되어 기술되어 있어야 한다.
  2. Given release 문서(docs/releases/*.md)가 존재할 때, When smoke evidence를 기록할 때, Then name, token_prefix, permission, daemon_id, runtime_id, issued_at, revoked_at 필드만 남기고 raw token 값은 포함되지 않아야 한다.
  3. Given 운영자가 service-token provenance를 확인할 때, When pfhub service-token list를 실행할 때, Then name, permission, daemon_id, created_at, last_used_at, revoked_at 필드가 출력되고, GET /v1/user_info의 runtime_id, daemon_id와 대조해 배포된 토큰의 provenance를 재현 가능하게 확인할 수 있어야 한다.
  4. Given admin auth context가 필요한 smoke를 수행할 때, When 운영자가 credential matrix를 따를 때, Then admin context는 개인 소유로 취급되고 read/trade-write token은 release approver 역할과 공동 소유 형태로 관리되는 것이 문서에 명시되어 있어야 한다.
  5. Given 운영자가 rotate 또는 재발급 후 provenance를 재확인할 때, When pfhub service-token rotate 또는 issue 결과를 검토할 때, Then daemon_id는 유지 또는 요청한 binding 값으로 확인되고 runtime_id는 새 값으로 대조 가능해야 한다.

Impacted Area

  • Docs: README.md — credential matrix 항목 및 daemon-aware token provenance CLI 절차 추가/보강
  • Modules: app/api/v1_user_info.py (runtime_id, daemon_id 반환 확인), app/cli/commands/service_tokens.py (issue/list/rotate 출력 필드 확인)
  • Tests: 없음 (문서화 중심 REQ)

Notes

  • NFR-1 (raw credential 비노출): 이 REQ의 핵심 제약. AC-2에 명시.
  • FR-4와 FR-2를 통합한 REQ. token provenance 확인 수단과 credential matrix는 운영자가 같은 맥락에서 참조하므로 분리 시 중복이 발생한다.
  • runtime_id는 service-token rotate 후 변경되고 daemon_id는 유지되므로, 문서에는 두 식별자의 역할 차이를 함께 명시해야 한다.
  • daemon provisioning 자체는 별도 관리 경로로 수행하고, provenance 절차는 binding 결과 확인에 집중한다.
  • Source Discovery: dcy-005 FR-2, FR-4; dcy-006 FR-5, FR-6

Change Log

CHG-20260513-01

  • Date: 2026-05-13
  • Author: repository-maintainers

Change Summary

  • token provenance REQ를 daemon-aware support path와 daemon_id evidence 필드 기준으로 보강

Intent

  • dcy-006은 issue/list/rotate와 /v1/user_info가 모두 daemon_id를 노출하고, release provenance도 runtime_id 단독이 아니라 daemon binding을 함께 추적하도록 요구한다. 기존 Approved 본문은 runtime_id 중심이라 운영 절차 기준이 불완전하다.

Acceptance Criteria Delta

  • Added:
    • AC-5: rotate/re-issue 후 daemon_id/runtime_id 대조 절차
  • Updated:
    • AC-1~3: daemon binding 전제와 daemon_id evidence 필드 반영
  • Removed:
    • none

Impacted Area Delta

  • Docs:
    • README.md credential matrix / provenance 절차
  • Modules:
    • app/api/v1_user_info.py, app/cli/commands/service_tokens.py
  • Tests:
    • none (문서화 중심 REQ)

Delivery Trace Delta

  • Batches:
    • BAT-009 (release-candidate; REL-005 confirmed input) — README provenance 절차와 release evidence field 정의를 daemon-aware 기준으로 재검토해야 함
  • Releases:
    • REL-005 (confirmed) — 배포 전 daemon-aware provenance field와 rotate invariant를 반영하도록 scope 재검토 필요

Revalidation Impact

  • Reverification Needed: yes
  • Existing Implementation Invalidated: no
  • Status Recommendation: keep-current
  • Follow-up Action: BAT-009 구현/verification 전에 README와 release evidence 템플릿을 daemon-aware 필드 기준으로 조정한다.

Validation Plan

  • README.md와 release evidence 예시가 daemon_id, runtime_id, rotate invariant를 모두 설명하는지 코드 리뷰로 확인한다.
  • REQ-005, REQ-007, REQ-012 문구와 provenance 절차가 식별자 역할 측면에서 일관적인지 대조한다.

CHG-20260512-02

  • Date: 2026-05-12
  • Author: repository-maintainers

Change Summary

  • Status: Proposed → Approved (confirm-req 게이트 통과)

Intent

  • 필수 필드, AC, Notes blocker 없음 확인 후 승인 전환

Acceptance Criteria Delta

  • Added: 없음
  • Updated: 없음
  • Removed: 없음

Impacted Area Delta

  • Docs: 없음
  • Modules: 없음
  • Tests: 없음

Delivery Trace Delta

  • Batches: none
  • Releases: none

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no
  • Status Recommendation: keep-current
  • Follow-up Action: none

Validation Plan

  • 승인 전환만 수행, 추가 검증 불필요

CHG-20260512-01

  • Date: 2026-05-12
  • Author: repository-maintainers

Change Summary

  • REQ 초안 생성 (dcy-005 FR-2, FR-4 통합 기반)

Intent

  • release 검증 credential matrix 및 token provenance 확인 절차 문서화 요구사항 정의

Acceptance Criteria Delta

  • Added:
    • AC-1~4 초안 생성

Impacted Area Delta

  • Docs:
    • README.md credential matrix 및 token provenance 절차
  • Modules:
    • 없음 (문서화 중심)
  • Tests:
    • 없음

Delivery Trace Delta

  • Batches:
    • none (미배정)
  • Releases:
    • none

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no
  • Status Recommendation: keep-current
  • Follow-up Action: none

Validation Plan

  • README.md credential matrix 항목 구분 및 token provenance CLI 절차 존재 확인
  • release 문서 기록 정책 준수 여부 확인