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
Follow-ups from the fresh-context review of PR #2679 (head 2df5d4c39), all non-blocking under the severity bar; none is a correctness defect in a shipped row. Test-only, the three files PR #2673 created.
Header pointer (MEDIUM in the review, doc precision).tests/e2e/route-affordances.spec.ts:36 says which defence applies to each walked response row is "stated per row in the inventory". The header's own two-bullet enumeration is accurate for all ten walked response rows, but home.quick-capture-submit, inbox.archive and review.approve carry no comment in routeAffordanceInventory.ts, and calendar.next-month's comment explains only the exact-string post-condition. Either add the per-row note to those four rows or drop the "stated per row" clause.
Token-substitution doc names the wrong surfaces (LOW).routeAffordanceInventory.ts:72-75 says the tokens are substituted in url and response pattern strings; {openingMonthLabel} appears only in text.text and textChangedFrom.from, and fillTokens is applied to value.value, text.text, textChangedFrom.from and role-selector name, not to attribute.*, enabled.selector, node/focus test ids or css selectors. State the real list, or apply fillTokens uniformly.
assertEnabled reads are dead branches (LOW). The guarded status variant declares assertEnabled: true as a required literal, so the guard's !== true throw and the walk's if (affordance.status.assertEnabled) cannot take their false branch, and the assertion-8 docblock describes a per-row choice the type forecloses; unlike the response branch (assertion 9), the check has no canary. Either widen the type to boolean with a canary, or say in both places that the type is the enforcement and the runtime read is belt-and-braces.
textChangedFrom is a negated matcher (LOW, hypothesis to confirm).expect(locator).not.toHaveText(x) is expected to pass when the locator resolves to zero elements. Assertion 8 classifies the kind as element-asserted and offers it for guarded rows. The shipped calendar.previous-month row is masked by calendar.next-month's positive text check one row later. Confirm the zero-element semantics; if confirmed, pair the kind with an explicit toHaveCount(1) (or toBeVisible()) on the same locator before the negation.
The calendar mount read is armed without the parked-outcome handler (LOW).route-affordances.spec.ts:542-547 arms the calendar GET before page.goto and awaits it on the next line; if page.goto throws, the 30 s waitForResponse rejection has no handler. The metrics, notifications and home mount reads predate PR test(e2e): exhaustive consequence dispatch, calendar mount consumption and truthful post-condition docs in the route walk #2679 and have the same shape. Apply the parking pattern from activate to all four.
Also noted, informational: a postCondition: { kind: 'response' } on any row passes typecheck and the vitest guard and throws only inside E2E Smoke (expectConsequence's response case); that is the documented design, recorded here so the limit of the cheap gate is written down.
Follow-ups from the fresh-context review of PR #2679 (head
2df5d4c39), all non-blocking under the severity bar; none is a correctness defect in a shipped row. Test-only, the three files PR #2673 created.tests/e2e/route-affordances.spec.ts:36says which defence applies to each walkedresponserow is "stated per row in the inventory". The header's own two-bullet enumeration is accurate for all ten walkedresponserows, buthome.quick-capture-submit,inbox.archiveandreview.approvecarry no comment inrouteAffordanceInventory.ts, andcalendar.next-month's comment explains only the exact-string post-condition. Either add the per-row note to those four rows or drop the "stated per row" clause.routeAffordanceInventory.ts:72-75says the tokens are substituted inurlandresponsepattern strings;{openingMonthLabel}appears only intext.textandtextChangedFrom.from, andfillTokensis applied tovalue.value,text.text,textChangedFrom.fromand role-selectorname, not toattribute.*,enabled.selector,node/focustest ids orcssselectors. State the real list, or applyfillTokensuniformly.assertEnabledreads are dead branches (LOW). The guarded status variant declaresassertEnabled: trueas a required literal, so the guard's!== truethrow and the walk'sif (affordance.status.assertEnabled)cannot take their false branch, and the assertion-8 docblock describes a per-row choice the type forecloses; unlike theresponsebranch (assertion 9), the check has no canary. Either widen the type tobooleanwith a canary, or say in both places that the type is the enforcement and the runtime read is belt-and-braces.textChangedFromis a negated matcher (LOW, hypothesis to confirm).expect(locator).not.toHaveText(x)is expected to pass when the locator resolves to zero elements. Assertion 8 classifies the kind as element-asserted and offers it for guarded rows. The shippedcalendar.previous-monthrow is masked bycalendar.next-month's positivetextcheck one row later. Confirm the zero-element semantics; if confirmed, pair the kind with an explicittoHaveCount(1)(ortoBeVisible()) on the same locator before the negation.route-affordances.spec.ts:542-547arms the calendar GET beforepage.gotoand awaits it on the next line; ifpage.gotothrows, the 30 swaitForResponserejection has no handler. The metrics, notifications and home mount reads predate PR test(e2e): exhaustive consequence dispatch, calendar mount consumption and truthful post-condition docs in the route walk #2679 and have the same shape. Apply the parking pattern fromactivateto all four.Also noted, informational: a
postCondition: { kind: 'response' }on any row passes typecheck and the vitest guard and throws only inside E2E Smoke (expectConsequence'sresponsecase); that is the documented design, recorded here so the limit of the cheap gate is written down.Refs #1949, #2678, PR #2673, PR #2679.