QA验收 #1 » bff-case-results.md
QA 测试结果 - 预约纪要统一意图 - 独立自动化第1轮 - BFF - 2026-10-07
- QA:Mindsetech Agent Team / NDB QA Agent
- Redmine:NDB #1(会议管理与话题管理功能验收,含 Markdown/BFF 跨端验证)
- 环境与共同前置:pg-mem 渠道 SQL fixture;mock NDB/微信/Notification HTTP;无真实邮件
- 候选:Backend 444afbe / BFF cb70aee / Mini dda1473,加本次未提交实现;HEAD 本身不包含实现,最终差异摘要需协调方绑定。
- 操作:npm test -- --verbose --json;每行用例名称与源码文件定位对应实际断言。
- 执行日期:2026-10-07 Asia/Shanghai;各框架原始时间/耗时保留于本地日志。
- 汇总:Pass 118 / Fail 0 / Blocked 0 / Skipped 0。
- 预期:对应命名用例的所有断言成立;实际记录仅对应此层级。
| 编号 | 用例 | 源码/层级 | 预期 | 实际 | 状态 | 证据/缺陷 |
|---|---|---|---|---|---|---|
| BFF-001 | HTTP channel flow runs health checks and Swagger | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-002 | HTTP channel flow logs in using wx.login code without leaking WeChat identifiers or session_key | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-003 | HTTP channel flow rejects forged login identity fields | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-004 | HTTP channel flow distinguishes missing session from missing contact binding | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-005 | HTTP channel flow binds a WeChat-verified phone then resolves contact server-side | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-006 | HTTP channel flow returns 503 without connection details when the channel database is unavailable | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-007 | HTTP channel flow clears contact on phone change and rejects stale contact resolver responses | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-008 | HTTP channel flow submits a verified email and business card and queues the review notification | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-009 | HTTP channel flow rejects a spoofed business-card MIME type | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-010 | HTTP channel flow invalidates binding if NDB no longer resolves the contact | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-011 | HTTP channel flow projects public meetings without private links or Task data | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-012 | HTTP channel flow returns the NDB-derived meeting banners without authentication | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-013 | HTTP channel flow forwards validated date and month calendar filters to NDB | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-014 | HTTP channel flow serves the V2 content, topic and public expert catalog without private fields | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-015 | HTTP channel flow derives a unique industry list from the public V2 catalog | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-016 | HTTP channel flow creates an expert interview request from the authenticated bound contact | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-017 | HTTP channel flow rejects an invalid interview idempotency key before calling NDB | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-018 | HTTP channel flow returns my meetings from NDB using bound contact | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-019 | HTTP channel flow forwards user idempotency key and derives contact from session | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-020 | HTTP channel flow cancels via NDB and keeps local finance absent | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-021 | HTTP channel flow keeps favorites and reminder preferences separate from registration/Task calls | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-022 | HTTP channel flow uses unified NDB minutes GET, PUT and mine DTOs without financial state or attend mutations | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-023 | HTTP channel flow projects one registration and Task across minutes-only, both intents, and attendance cancellation | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-024 | HTTP channel flow returns null from NDB despite a legacy minutes preference | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-025 | HTTP channel flow requires authenticated bound identity, validates keys, and refuses cancellation on /api/v2/meetings/1/minutes-subscription | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-026 | HTTP channel flow requires authenticated bound identity, validates keys, and refuses cancellation on /api/v2/notifications/subscriptions/1/minutes | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-027 | HTTP channel flow rejects a wrong-intent or wrong-owner mine result on /api/v2/meetings/my | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-028 | HTTP channel flow rejects a wrong-intent or wrong-owner mine result on /api/v2/meetings/minutes-reservations/mine | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-029 | HTTP channel flow rejects a wrong-intent or wrong-owner mine result on /api/v2/meetings/my | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-030 | HTTP channel flow passes explicit minutes keys and rejects stale identity and cross-contact upstream responses | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-031 | HTTP channel flow persists one no-contract refusal notice across both minutes paths without masking the rejection | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-032 | HTTP channel flow does not impose BFF time or pricing gates and preserves the NDB human-minutes refusal | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-033 | HTTP channel flow preserves NO_ACTIVE_CONTRACT even if the refusal cannot be persisted | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-034 | HTTP channel flow enforces ownership on favorites and message read operations | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-035 | HTTP channel flow retrieves join link with meeting:join scope only for a bound session | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-036 | HTTP channel flow hides join link on REGISTRATION_REQUIRED | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-037 | HTTP channel flow hides join link on MEETING_NOT_OPEN | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-038 | HTTP channel flow hides join link on JOIN_LINK_UNAVAILABLE | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-039 | HTTP channel flow guides contract errors and upstream downtime without exposing provider messages | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-040 | HTTP channel flow revokes all prior tokens on logout | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-041 | HTTP channel flow rejects expired JWT and legacy conference routes | http.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-042 | SQLite source preservation and database guard reads version 1 without upgrading it, preserving identities and defaulting new fields | sqlite-import.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-043 | SQLite source preservation and database guard preserves version 3 binary cards, verification state and retry counters | sqlite-import.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-044 | SQLite source preservation and database guard refuses an unsupported source version and never creates a missing file | sqlite-import.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-045 | SQLite source preservation and database guard rejects missing required source columns rather than inventing identity fields | sqlite-import.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-046 | SQLite source preservation and database guard refuses a non-channel connection target | sqlite-import.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-047 | SQLite source preservation and database guard refuses a non-channel connection target | sqlite-import.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-048 | SQLite source preservation and database guard refuses a non-channel connection target | sqlite-import.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-049 | NDB minutes business adapter uses a separate stable business key, fresh nonces and only the verified contact payload | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-050 | NDB minutes business adapter rejects malformed or cross-owner business facts {"meeting_id": 2} | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-051 | NDB minutes business adapter rejects malformed or cross-owner business facts {"client_contact_id": 21} | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-052 | NDB minutes business adapter rejects malformed or cross-owner business facts {"task_id": null} | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-053 | NDB minutes business adapter rejects malformed or cross-owner business facts {"minutes_requested": false} | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-054 | NDB minutes business adapter rejects malformed or cross-owner business facts {"created_at": "invalid"} | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-055 | NDB minutes business adapter returns authoritative null and read scope for state without writes | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-056 | NDB minutes business adapter projects attend-only as no minutes and retains minutes when attendance is cancelled | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-057 | NDB minutes business adapter maps published human-minutes and no-contract refusals without rewriting them | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-058 | NDB minutes business adapter does not automatically retry a timed-out business mutation | minutes-adapter.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-059 | identity state and contact events auto binds an initial or newly added number only after current NDB resolution | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-060 | identity state and contact events requires a full application after a WeChat phone change before accepting replacement number | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-061 | identity state and contact events blocks proactive auto binding during delayed MQ delivery of a replacement event | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-062 | identity state and contact events rejects a later replacement even when the same number was previously fully authenticated | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-063 | identity state and contact events does not let an old contact event revoke a newer completed authentication | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-064 | identity state and contact events keeps an unmatched application pending, then authorizes it when NDB adds the number | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-065 | identity state and contact events handles added and replaced contact events idempotently without undoing later full authentication | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-066 | identity state and contact events rejects an application if the verified phone changes away and back during NDB resolution | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-067 | identity state and contact events retries review notification submission with the same idempotency key | identity.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-068 | minutes refusal durable outbox marks missing configuration and resumes after restart without changing the refusal identity | minutes-outbox.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-069 | minutes refusal durable outbox persists missing service configuration across a retry tick, with no delivery claim | minutes-outbox.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-070 | minutes refusal durable outbox retries failures with the same dedup key after restart, applies backoff and honors the minutes recipient | minutes-outbox.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-071 | minutes refusal durable outbox deduplicates by meeting/contact across users without merging distinct meetings | minutes-outbox.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-072 | minutes refusal durable outbox additively upgrades version 4 without migrating legacy minutes into Tasks or notices | minutes-outbox.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-073 | WeChat boundary discards session_key and rejects absent openid | wechat-storage.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-074 | WeChat boundary maps expired codes and upstream network failure | wechat-storage.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-075 | WeChat boundary verifies phone watermark appid before binding | wechat-storage.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-076 | WeChat boundary coalesces token acquisition for concurrent phone requests | wechat-storage.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-077 | channel-only versioned PostgreSQL SQL contract preserves channel identities and favorite state over migration rerun | wechat-storage.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-078 | NDB transport and typed adapter accepts the real NDB envelope and strips Task state | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-079 | NDB transport and typed adapter sends a fresh nonce and stable business key for retries | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-080 | NDB transport and typed adapter returns original registration on duplicate conflict | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-081 | NDB transport and typed adapter fails closed on a cross-contact registration | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-082 | NDB transport and typed adapter returns null for no registration | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-083 | NDB transport and typed adapter maps MEETING_NOT_OPEN without leaking upstream text | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-084 | NDB transport and typed adapter maps NO_ACTIVE_CONTRACT without leaking upstream text | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-085 | NDB transport and typed adapter maps AMBIGUOUS_PROJECT without leaking upstream text | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-086 | NDB transport and typed adapter maps AMBIGUOUS_CONTRACT without leaking upstream text | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-087 | NDB transport and typed adapter maps IDEMPOTENCY_CONFLICT without leaking upstream text | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-088 | NDB transport and typed adapter maps upstream authentication 401 as server configuration, not user login | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-089 | NDB transport and typed adapter maps upstream authentication 403 as server configuration, not user login | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-090 | NDB transport and typed adapter maps upstream availability 429 | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-091 | NDB transport and typed adapter maps upstream availability 500 | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-092 | NDB transport and typed adapter maps upstream availability 503 | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-093 | NDB transport and typed adapter maps network timeout and does not blindly retry writes | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-094 | NDB transport and typed adapter rejects an incompatible contract {"data": [Array], "err": 0} | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-095 | NDB transport and typed adapter rejects an incompatible contract {"code": 200, "data": [Object]} | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-096 | NDB transport and typed adapter requires the confirmed public detail fields and excludes private expert data | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-097 | NDB transport and typed adapter reads the server-derived banner list with the conference read scope | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-098 | NDB transport and typed adapter maps an application-owned meeting miss to NOT_FOUND | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-099 | NDB transport and typed adapter refuses paths and scopes outside application credentials | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-100 | NDB transport and typed adapter validates catalog contracts and derives a stable interview idempotency key | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-101 | NDB transport and typed adapter deduplicates industries exposed by all public catalog collections | ndb-client.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-102 | NDB signature contract uses RFC3986, repeated keys, blanks and lexicographic key/value ordering | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-103 | NDB signature contract signs the exact six-line request and exact UTF-8 body | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-104 | NDB signature contract matches a vector generated by the existing NDB Python implementation | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-105 | NDB signature contract hashes an empty GET body | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-106 | NDB signature contract uses collision-safe tuple boundaries for business keys | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-107 | configuration and boundary validation accepts configured development | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-108 | configuration and boundary validation does not expose submitted secrets in validation errors | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-109 | configuration and boundary validation requires safe production configuration {"NDB_BASE_URL": "http://ndb.test"} | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-110 | configuration and boundary validation requires safe production configuration {"CHANNEL_DATABASE_URL": "sqlite://memory", "NDB_BASE_URL": "https://ndb.test"} | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-111 | configuration and boundary validation rejects non-origin NDB URL ftp://ndb.test | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-112 | configuration and boundary validation rejects non-origin NDB URL https://user:password@ndb.test | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-113 | configuration and boundary validation rejects non-origin NDB URL https://ndb.test/api | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-114 | configuration and boundary validation rejects non-origin NDB URL https://ndb.test/?secret=bad | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-115 | configuration and boundary validation rejects ID coercion and invalid idempotency headers | signature.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-116 | renderMiniProgramRichText converts Markdown into HTML supported by the mini program rich-text component | rich-text.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-117 | renderMiniProgramRichText keeps legacy HTML while removing unsafe markup and attributes | rich-text.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
| BFF-118 | renderMiniProgramRichText rejects unsafe links | rich-text.spec.ts / 隔离测试 | 命名场景断言全部成立 | 断言通过 | Pass | bff-results.json |
边界与后续
本轮未进行共享业务写入、真实收费 Task 创建或真实员工邮件投递。Backend 测试库已由 Django 销毁;独立测试容器停止后其 tmpfs 测试数据不保留。BFF pg-mem 不能证明真实 PostgreSQL锁、回滚或进程重启后磁盘持久性。Node fixture 不代替真实微信认证、用户操作与截图。未来自动纪要分流/通知未实现,不在本轮完成声明中。
MINI-060 为已知卡片背景色静态断言与现有 UI 冲突;保留 Fail,不回退 UI。成功预约真实流程尚需免费 fixture 审定;图文手册与 UI/项目校对未完成。整体 QA 尚未完成。