mirror of https://github.com/jackwener/wx-cli.git
6.0 KiB
6.0 KiB
Requirements
Active
R001 — TCP transport on server
- Class: core-capability
- Status: active
- Description: Daemon listens on TCP when
--tcp host:portis specified, in addition to local transport - Why it matters: Enables remote clients to query WeChat data over network
- Source: user
- Primary owning slice: M001/S01
- Supporting slices: M001/S02
- Validation: unmapped
- Notes: Bind exactly as user specifies, no TLS, no IP whitelist
R002 — TCP transport on client
- Class: core-capability
- Status: active
- Description: Client connects via TCP when
--tcp host:portis specified, with no local fallback - Why it matters: Users explicitly choosing TCP must connect to that address
- Source: user
- Primary owning slice: M001/S02
- Supporting slices: none
- Validation: unmapped
- Notes: Hard error if connection fails, no silent fallback
R003 — Transport abstraction layer
- Class: quality-attribute
- Status: active
- Description: Transport layer uses trait-based abstraction (Listener/Connector) to eliminate platform duplication
- Why it matters: Makes adding new transports (TCP, future TLS) easy without duplicating protocol logic
- Source: inferred
- Primary owning slice: M001/S01
- Supporting slices: M001/S02, M001/S03
- Validation: unmapped
- Notes: Must support Unix socket, Windows named pipe, and TCP
R004 — Global --tcp CLI flag
- Class: primary-user-loop
- Status: active
- Description:
--tcp host:portis a global CLI flag, affecting all commands includingdaemon status,daemon logs, and all query commands - Why it matters: Discoverable, consistent interface for TCP across all commands
- Source: user
- Primary owning slice: M001/S02
- Supporting slices: none
- Validation: unmapped
- Notes: Replaces env var approach, cleaner UX
R005 — Daemon start command
- Class: primary-user-loop
- Status: active
- Description: New
wx daemon startsubcommand to explicitly start the daemon with configurable options - Why it matters: Currently daemon auto-starts on first query; explicit start gives user control over transport config
- Source: user
- Primary owning slice: M001/S01
- Supporting slices: none
- Validation: unmapped
- Notes: Should support
--tcpflag
R006 — Cross-platform compilation
- Class: constraint
- Status: active
- Description: Code compiles on macOS, Linux, and Windows (
cargo checkon all targets) - Why it matters: Project is cross-platform by design, TCP must work on all three
- Source: inferred
- Primary owning slice: M001/S01
- Supporting slices: M001/S02, M001/S03
- Validation: unmapped
- Notes: TcpListener/TcpStream are std library, should be trivial
R007 — Error handling for TCP failures
- Class: failure-visibility
- Status: active
- Description: TCP bind/connect failures produce clear error messages with no silent fallback
- Why it matters: Users need to know when transport configuration fails
- Source: inferred
- Primary owning slice: M001/S02
- Supporting slices: none
- Validation: unmapped
- Notes: 15s connect timeout, 120s read/write timeout
R008 — Integration: CLI ↔ daemon over TCP
- Class: integration
- Status: active
- Description: End-to-end verification: CLI and daemon communicate successfully over TCP on localhost
- Why it matters: Proves the transport actually works, not just compiles
- Source: inferred
- Primary owning slice: M001/S04
- Supporting slices: none
- Validation: unmapped
- Notes: Manual smoke test sufficient, no automated integration tests
Deferred
R020 — TLS encryption for TCP transport
- Class: compliance/security
- Status: deferred
- Description: Optional TLS encryption on TCP transport for secure remote access
- Why it matters: Plaintext TCP exposes chat data to network sniffing
- Source: inferred
- Primary owning slice: none
- Supporting slices: none
- Validation: unmapped
- Notes: Deferred — adds tokio-rustls dependency and cert management complexity
R021 — Authentication tokens for TCP
- Class: compliance/security
- Status: deferred
- Description: Token-based authentication for TCP connections
- Why it matters: Prevents unauthorized access to WeChat data over network
- Source: inferred
- Primary owning slice: none
- Supporting slices: none
- Validation: unmapped
- Notes: Deferred — requires protocol change (Auth request type)
R022 — TCP connection keepalive
- Class: quality-attribute
- Status: deferred
- Description: Persistent TCP connections with keepalive for reduced latency
- Why it matters: Current one-request-per-connection model has connection overhead
- Source: inferred
- Primary owning slice: none
- Supporting slices: none
- Validation: unmapped
- Notes: Deferred — requires protocol and connection management changes
Out of Scope
R030 — Network-level access control
- Class: constraint
- Status: out-of-scope
- Description: IP whitelisting, firewall rules, or network ACLs within the application
- Why it matters: Prevents scope creep into network security management
- Source: user
- Primary owning slice: none
- Supporting slices: none
- Validation: n/a
- Notes: User handles firewall/ACL at OS level
Traceability
| ID | Class | Status | Primary owner | Supporting | Proof |
|---|---|---|---|---|---|
| R001 | core-capability | active | M001/S01 | M001/S02 | unmapped |
| R002 | core-capability | active | M001/S02 | none | unmapped |
| R003 | quality-attribute | active | M001/S01 | M001/S02, M001/S03 | unmapped |
| R004 | primary-user-loop | active | M001/S02 | none | unmapped |
| R005 | primary-user-loop | active | M001/S01 | none | unmapped |
| R006 | constraint | active | M001/S01 | M001/S02, M001/S03 | unmapped |
| R007 | failure-visibility | active | M001/S02 | none | unmapped |
| R008 | integration | active | M001/S04 | none | unmapped |
| R020 | compliance/security | deferred | none | none | unmapped |
| R021 | compliance/security | deferred | none | none | unmapped |
| R022 | quality-attribute | deferred | none | none | unmapped |
| R030 | constraint | out-of-scope | none | none | n/a |
Coverage Summary
- Active requirements: 8
- Mapped to slices: 8
- Validated: 0
- Unmapped active requirements: 0