You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Fix empty-state text from "Created manually — no capture provenance." to
"No capture provenance available." (actual CardModal.vue text) across
STATUS.md, IMPLEMENTATION_MASTERPLAN.md, and MANUAL_TEST_CHECKLIST.md
- Fix logical contradiction in MANUAL_TEST_CHECKLIST.md flash-regression check
- Fix webhook header from X-Taskdeck-Signature to X-Taskdeck-Webhook-Signature
(+ X-Taskdeck-Webhook-Timestamp) in TESTING_GUIDE.md manual validation step
- Update telemetry event name examples from old snake_case to canonical noun.verb
format matching docs/product/TELEMETRY_TAXONOMY.md
- Replace non-existent OutboundWebhookConnectCallbackTests and
OutboundWebhookDeliveryWorkerReliabilityTests with actual webhook test file
listing (78 tests across 9 files, not 161 across 4)
- Correct test count inconsistency: 78 total webhook tests (not 161);
net new from wave 3 ~50+; fix API integration breakdown arithmetic
- Reconcile STATUS.md SSRF claims with what is actually present in the
checked-in test suite (drop CGNAT/cloud-metadata/dynamic-DNS specifics
since ConnectCallback tests were not merged)
Copy file name to clipboardExpand all lines: docs/MANUAL_TEST_CHECKLIST.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -153,10 +153,10 @@ Manual-only checks (non-automatable in generic local script):
153
153
154
154
**Manual card provenance empty state (PR #754):**
155
155
- Open a card that was created manually (not via capture/inbox).
156
-
- Expected: card detail shows "Created manually — no capture provenance." in the provenance area. No error shown. No blank/broken provenance section.
156
+
- Expected: card detail shows "No capture provenance available." in the provenance area. No error shown. No blank/broken provenance section.
157
157
- Open a card created via the capture/inbox flow.
158
-
- Expected: card detail shows full capture provenance (source, timestamp, original capture text). The "Created manually" message does NOT appear for captured cards.
159
-
-If card was created manually, verify the provenance empty state does not flash "Created manually" during the initial load of a captured card's modal.
158
+
- Expected: card detail shows full capture provenance (source, timestamp, original capture text). The "No capture provenance available." message does NOT appear for captured cards.
159
+
-For captured cards, verify the provenance empty state does not flash during the initial load of the captured card's modal.
160
160
- Expected: empty state is only shown after load completes and provenance is confirmed absent.
161
161
162
162
11. Edit title/description, set due date, block with reason, assign labels.
Copy file name to clipboardExpand all lines: docs/STATUS.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -81,13 +81,13 @@ Current constraints are mostly hardening and consistency:
81
81
- Post-adversarial-review hardening and test expansion wave (2026-04-04, PRs `#741`–`#756`, 9 issues):
82
82
-**Product telemetry taxonomy** (`#341`/`#741`): `docs/product/TELEMETRY_TAXONOMY.md` defines 35+ named events across 7 categories (Capture, Proposal/Review, Board, Auth, Navigation, Agent, Error) with `noun.verb` naming convention, universal envelope, privacy guardrails (bucketed counts, no PII), and R1/R2/R3 launch gate anchors; telemetry is opt-in and not yet implemented
83
83
-**Board header presence label fixed** (`#683`/`#744`): `normalizePresenceMembers()` in `BoardView.vue` now replaces current user's SignalR `displayName` with locally-known username, eliminating email/username flip on card open; 3 new tests
84
-
-**Manual card provenance empty state** (`#680`/`#754`): `cardsApi.getCardProvenance()` now returns null only for "Capture provenance not found" 404s (not all 404s); CardModal shows "Created manually — no capture provenance." with `loadedCaptureProvenanceCardId` guard against flash; 4 new tests; adversarial review caught and fixed 3 bugs (overly broad 404 catch, global Axios log-level regression, empty-state flash)
84
+
-**Manual card provenance empty state** (`#680`/`#754`): `cardsApi.getCardProvenance()` now returns null only for "Capture provenance not found" 404s (not all 404s); CardModal shows "No capture provenance available." with `loadedCaptureProvenanceCardId` guard against flash; 4 new tests; adversarial review caught and fixed 3 bugs (overly broad 404 catch, global Axios log-level regression, empty-state flash)
85
85
-**WIP-limit duplicate toast regression** (`#686`/`#745`): 7 regression tests in `boardStore.wipLimit.spec.ts` guard against future double-toast on WIP limit violations for createCard and moveCard
86
86
-**Auth-flow toast regression coverage** (`#685`/`#742`): 20 tests in `sessionStore.authToast.spec.ts` covering login/register/OAuth failure and success toast lifecycle, isolation, and auto-removal; adversarial review fixed timer leak, mock isolation, and inverted assertion
87
87
-**Route and workspace-state stability** (`#687`/`#748`): `authGuard.spec.ts` (auth guard decision table) and `workspaceRouteStability.spec.ts` (mode persistence, hydration drift, resetForLogout) with 12-route exhaustive guard table; also fixed pre-existing `AuthControllerEdgeCaseTests.cs` compile error
88
88
-**Inbox triage action visibility** (`#688`/`#743`): 21 new tests in `InboxView.spec.ts` covering single-item triage action states and bulk action bar visibility with DOM-level assertions
89
89
-**Webhook HMAC signature verification** (`#726`/`#750`): 11 tests in `OutboundWebhookHmacDeliveryTests.cs` covering header format, HMAC round-trip, wrong-key rejection, secret rotation, large payload, and timing-safe comparison; adversarial review fixed rotation test and replaced BCL-testing stubs with real domain property tests
90
-
-**Webhook delivery reliability and SSRF boundary** (`#710`/`#756`): 161 webhook tests across 4 files; SSRF coverage includes all private IPv4/IPv6 ranges, CGNAT, cloud metadata endpoint (169.254.169.254), dynamic DNS embedding (nip.io/sslip.io), fail-closed DNS; delivery reliability covers retry/backoff, dead-letter, concurrent delivery, HMAC at worker boundary; `HttpClient` resource leak fixed in tests
90
+
-**Webhook delivery reliability and SSRF boundary** (`#710`/`#756`): 78 webhook tests across 7 files (endpoint guard, service, signature, delivery worker, HMAC delivery, repository, domain); SSRF coverage via `OutboundWebhookEndpointGuardTests` includes private IPv4/IPv6 ranges; delivery reliability covers retry/backoff, dead-letter, concurrent delivery, HMAC at worker boundary; `HttpClient` resource leak fixed in tests
91
91
92
92
Target experience metrics for the capture direction:
93
93
- capture action to saved artifact should feel under 10 seconds in normal use
Copy file name to clipboardExpand all lines: docs/TESTING_GUIDE.md
+17-13Lines changed: 17 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,22 +12,22 @@ Companion Active Docs:
12
12
13
13
## Current Verified Totals (2026-04-04)
14
14
15
-
- Backend: ~3010+ passing (estimated based on ~300 new tests from PRs `#732`–`#739` + ~586 new tests from PRs `#740`–`#755` + ~60-80 net new tests from PRs `#750`/`#756`)
15
+
- Backend: ~2990+ passing (estimated based on ~300 new tests from PRs `#732`–`#739` + ~586 new tests from PRs `#740`–`#755` + ~50+ net new webhook tests from PRs `#750`/`#756`)
16
16
- Domain: ~620+ (174 new entity state machine tests + 45 archive lifecycle domain tests)
- backend totals are estimated after three 2026-04-04 waves; wave 1 (`#732`–`#739`, ~300 new tests), wave 2 (`#740`–`#755`, ~586 new tests with adversarial review), and wave 3 (`#750`/`#756`, ~60-80 net new webhook tests); each PR verified green individually; full-suite recertification needed
26
+
- backend totals are estimated after three 2026-04-04 waves; wave 1 (`#732`–`#739`, ~300 new tests), wave 2 (`#740`–`#755`, ~586 new tests with adversarial review), and wave 3 (`#750`/`#756`, ~50+ net new webhook tests: 11 HMAC + endpoint guard extensions + service/signature/worker/domain tests); each PR verified green individually; full-suite recertification needed
27
27
- frontend unit totals: **1592 passing** as of 2026-04-04 post-wave 3 (up from 1496 pre-wave); verified via `npx vitest --run` after adversarial review fixes
@@ -52,7 +52,7 @@ High-signal additions and delivered guardrails:
52
52
Telemetry and release-gate follow-through from the expanded blueprint:
53
53
54
54
- product telemetry/event taxonomy delivered in `#341`/`#741` — see `docs/product/TELEMETRY_TAXONOMY.md`; reuses `#77` as baseline; `#328` provides the delivered first-run guardrail
55
-
- keep event names privacy-safe and product-shaped (for example `home_loaded`, `today_loaded`, `capture_created`, `proposal_opened`, `proposal_approved`, `board_action_capture_here_clicked`, `workspace_mode_changed`, `agent_run_started`, `agent_run_completed`, `agent_run_failed`)
55
+
- keep event names privacy-safe and product-shaped using the canonical `noun.verb` format from `docs/product/TELEMETRY_TAXONOMY.md`(for example `capture.modal_opened`, `capture.submitted`, `proposal.approved`, `proposal.dismissed`, `card.created`, `board.loaded`, `auth_session.started`, `agent_run.completed`, `agent_run.failed`)
56
56
- treat launch framing as evidence gates, not marketing labels:
-`OutboundWebhookDeliveryWorkerReliabilityTests` (new): successful 2xx delivery, HTTP 5xx/429 retry scheduling, network timeout retry, max-retries dead-letter, SSRF guard at worker boundary (no dispatch for private IPs), HMAC value verification, delivery/subscription ID headers, concurrent delivery independence
899
-
-`OutboundWebhookEndpointGuardTests` (extended): 30+ new cases including all private ranges, CGNAT, IPv6 link-local/unique-local, dynamic DNS (nip.io/sslip.io), blocked hostname suffixes, public IP allowlist, mixed-DNS resolution contract, error message hygiene
900
-
901
-
Total webhook tests across all files: 161.
896
+
New test coverage across webhook test suite (78 tests total across 9 files):
Key adversarial review fix: `HttpClient` resource leaks across 9 test methods.
904
908
905
-
Manual validation recommended: configure a webhook endpoint with a known secret and verify that (a) the `X-Taskdeck-Signature` header is present and verifiable with HMAC-SHA256, and (b) a webhook targeting `http://localhost/` or `http://10.0.0.1/` is rejected at the SSRF guard.
909
+
Manual validation recommended: configure a webhook endpoint with a known secret and verify that (a) the `X-Taskdeck-Webhook-Signature` header (alongside `X-Taskdeck-Webhook-Timestamp`) is present and verifiable with HMAC-SHA256, and (b) a webhook targeting `http://localhost/` or `http://10.0.0.1/` is rejected at the SSRF guard.
0 commit comments