photoncloud-monorepo/docs/por/T048-sdk-improvements/task.yaml
centra d2149b6249 fix(lightningstor): Fix SigV4 canonicalization for AWS S3 auth
- Replace form_urlencoded with RFC 3986 compliant URI encoding
- Implement aws_uri_encode() matching AWS SigV4 spec exactly
- Unreserved chars (A-Z,a-z,0-9,-,_,.,~) not encoded
- All other chars percent-encoded with uppercase hex
- Preserve slashes in paths, encode in query params
- Normalize empty paths to '/' per AWS spec
- Fix test expectations (body hash, HMAC values)
- Add comprehensive SigV4 signature determinism test

This fixes the canonicalization mismatch that caused signature
validation failures in T047. Auth can now be enabled for production.

Refs: T058.S1
2025-12-12 06:23:46 +09:00

83 lines
2.6 KiB
YAML

id: T048
name: SDK Improvements - gRPC クライアントの一貫性向上
goal: Create consistent gRPC client crates for each PhotonCloud service (separate crates, unified patterns)
status: planned
priority: P1
owner: peerA
created: 2025-12-12
depends_on: [T047]
blocks: []
context: |
**User Direction (2025-12-12):**
"SDKは統一はしないが同じような形で使えるようにはする"
"一部の機能がほしいのにデカすぎるライブラリをコンパイルするのはかなり苦労する"
**Approach:**
- Separate crates per service (chainfire-client, flaredb-client, etc.)
- Consistent API patterns across crates (same error types, builder pattern, etc.)
- Small, focused crates that compile independently
- No monolithic unified SDK
PROJECT.md 守るべき事柄 #2:
"仕様や使い方を揃えて、統一感があるようにする"
acceptance:
- Separate client crates: chainfire-client, flaredb-client, iam-client, etc.
- Consistent error handling pattern across all crates
- Consistent builder pattern for configuration
- Each crate compiles independently (<30s compile time target)
- Examples and documentation per crate
steps:
- step: S1
name: Client Pattern Design
done: Define consistent patterns (error types, config builders, async traits)
status: pending
owner: peerA
priority: P0
notes: |
Design decisions:
- Shared error enum pattern
- Config builder pattern
- Connection retry/backoff pattern
- Auth integration pattern (IAM token)
- step: S2
name: Base Traits Crate
done: Create small shared traits crate (if needed, or inline patterns)
status: pending
owner: peerB
priority: P1
notes: |
Options:
A) Shared traits crate (photocloud-client-common)
B) Document patterns, each client implements independently
Prefer B to avoid dependency coupling.
- step: S3
name: Service Client Audit
done: Review existing client implementations for consistency
status: pending
owner: peerB
priority: P0
notes: |
Check existing:
- chainfire-api client code
- flaredb client code
- iam client code
- Identify inconsistencies
- step: S4
name: Client Standardization
done: Apply consistent patterns to all service clients
status: pending
owner: peerB
priority: P0
evidence: []
notes: |
**Key Principle:** Small independent crates > monolithic SDK
User explicitly rejected unified SDK due to compile time concerns.
Focus on API consistency, not code sharing.