SatelliteHR e2e — bugs found

14 Oct 2026, 20:42 IST · qa.satellitehr.com · Attendance & Leave suite · full test report · BUGS.md

3 new failures · 12 open bugs · 7 sheet gaps · 2 now passing

65 passed · 22 failed · 2 skipped · run failed

New failures — drift or new bugs 3

Not tied to a logged issue in the test. A baseline failure means the tenant configuration changed: the diff shows what. Triage each one: log it in ISSUES.md, revert the change, or accept it by updating the baseline.

leave policies @pr › policy set matches the reviewed baseline

tests/contract/policies.spec.ts:21

Error: expect(string).toMatchSnapshot(expected) failed

  @@ -144,11 +144,11 @@
       "name": "Paid Time Off — handbook 16.1",
       "accrual": {
         "rate": 1.25,
         "frequency": "monthly",
         "proration": true,
  -      "waitingDays": 30
  +      "startNextMonth": true
       },
       "carryForward": {
         "maxDays": 30
       },

regularization @journey › missed punch: manager approves and the day is rewritten (rows 4–5)

tests/journeys/al01-al02-attendance.spec.ts:100

TimeoutError: locator.click: Timeout 45000ms exceeded.
Call log:
  - waiting for getByRole('dialog').filter({ hasText: /Correct a day|Which day/ }).last().getByRole('button', { name: 'Send for approval' })
    - locator resolved to <button disabled type="submit" class="inline-flex shrink-0 items-center justify-center gap-1.5 whitespace-nowrap select-none rounded-md font-medium transition-colors duration-150 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 bg-brand text-on-brand hover:bg-brand-hover active:bg-brand-active shadow-xs h-8 px-3 text-sm [&_svg]:size-4">Send for approval</button>
  - attempting click action
    2 × waiting for element to be visible, enabled and stable
      - element is not enabled
    - retrying click action
    - waiting 20ms
    2 × waiting for element to be visible, enabled and stable
      - element is not enabled
    - retrying click action
      - waiting 100ms
    87 × waiting for element to be visible, enabled and stable
screenshot at failure

long leave routing @journey › leave of 3 days or more goes to the department head after the manager (row 14; was ISS-436, fixed 14 Oct)

tests/journeys/al04-al05-leave.spec.ts:164

Error: e1 POST /api/me/leave → 409 {"message":"Overlaps an existing pending/approved request"}

Open bugs — still reproduce 12

Logged in ISSUES.md. Each assertion states the correct behaviour; the error shows what the platform did instead.

known bugs: data integrity @pr @known-bug › ISS-422 · punch times are stored as real UTC

ISS-422: the server stores IST wall time with a Z suffix (5h30 ahead)

ISS-422 · tests/contract/data-integrity.spec.ts:15

Error: server "now" 2026-10-14T20:42:53Z vs real UTC 2026-10-14T15:12:53.891Z

expect(received).toBeLessThan(expected)

Expected: < 10
Received:   329.98515

known bugs: data integrity @pr @known-bug › ISS-440 · nobody is credited leave types restricted to another gender, or more than the yearly entitlement

ISS-440: male employees hold Maternity Leave; Wedding/Floating/Bereavement credited twice

ISS-440 · tests/contract/data-integrity.spec.ts:22

Error: expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   "Aarav Krishnamurthy.: maternity 182",
+   "Kavya Raghunathan: paternity 5",
+   "Test Interviewer One: paternity 5",
+   "Test Interviewer Two: maternity 182",
+ ]

known bugs: data integrity @pr @known-bug › ISS-445 · "Your shift" shows the shift on a working day, not "Off today"

ISS-445: the panel says "Off today — enjoy the day" on working days

ISS-445 · tests/contract/data-integrity.spec.ts:62

Error: expect(locator).toHaveCount(expected) failed

Locator:  locator('#main-content').getByText(/Off today/)
Expected: 0
Received: 1
Timeout:  30000ms

Call log:
  - Expect "toHaveCount" locator('#main-content').getByText(/Off today/) with timeout 30000ms
  - waiting for locator('#main-content').getByText(/Off today/)
    63 × locator resolved to 1 element
       - unexpected value "1"
screenshot at failure

known bugs: data integrity @pr @known-bug › ISS-447 · the Service Leave policy form shows its rule without a validation error

ISS-447: blank accrual and "Entitlement can't be negative" on open

ISS-447 · tests/contract/data-integrity.spec.ts:73

Error: expect(locator).toHaveCount(expected) failed

Locator:  getByRole('dialog').filter({ hasText: /Edit policy/ }).last().getByText(/Entitlement can't be negative/)
Expected: 0
Received: 1
Timeout:  30000ms

Call log:
  - Expect "toHaveCount" getByRole('dialog').filter({ hasText: /Edit policy/ }).last().getByText(/Entitlement can't be negative/) with timeout 30000ms
  - waiting for getByRole('dialog').filter({ hasText: /Edit policy/ }).last().getByText(/Entitlement can't be negative/)
    63 × locator resolved to 1 element
       - unexpected value "1"
screenshot at failure

known gaps: permissions @pr @known-bug › ISS-444 · mgr can save the roster it is shown (rows 36–37)

ISS-444: reporting managers, department heads and HR SPOC are refused (403) on roster saves

ISS-444 · tests/contract/permissions.spec.ts:41

Error: expect(received).toBe(expected) // Object.is equality

Expected: false
Received: true

known gaps: permissions @pr @known-bug › ISS-444 · dh can save the roster it is shown (rows 36–37)

ISS-444: reporting managers, department heads and HR SPOC are refused (403) on roster saves

ISS-444 · tests/contract/permissions.spec.ts:41

Error: expect(received).toBe(expected) // Object.is equality

Expected: false
Received: true

known gaps: permissions @pr @known-bug › ISS-444 · spoc can save the roster it is shown (rows 36–37)

ISS-444: reporting managers, department heads and HR SPOC are refused (403) on roster saves

ISS-444 · tests/contract/permissions.spec.ts:41

Error: expect(received).toBe(expected) // Object.is equality

Expected: false
Received: true

leave policies @pr › PTO: 1.25 days a month after 30 days, carry-forward 30, LOP fallback (rows 48–51, 60)

ISS-450: since 14 Oct the PTO policy has startNextMonth instead of the 30-day waiting period

ISS-450 · tests/contract/policies.spec.ts:28

Error: expect(received).toMatchObject(expected)

- Expected  - 1
+ Received  + 0

  Object {
    "frequency": "monthly",
    "rate": 1.25,
-   "waitingDays": 30,
  }

known bugs: workflows @pr @known-bug › ISS-452 · the long-leave threshold used by leave approval is a visible parameter

ISS-452: routing works since 14 Oct, but param lv.long_leave_days is still not defined, so the 3-day threshold is a hidden default no one can see or change

ISS-452 · tests/contract/workflows.spec.ts:105

Error: expect(received).toContain(expected) // indexOf

Expected value: "lv.long_leave_days"
Received array: ["ext.ceo_pack_sla", "ext.clearance_trigger", "ext.counteroffer_issue_sla", "ext.counteroffer_response_sla", "ext.damage_assessment_sla", "ext.escalate_to_hr_sla", "ext.exit_docs_sla", "ext.ffs_clear_sla", "ext.ffs_gratuity_target", "ext.ffs_l1", …]

known bugs: workflows @pr @known-bug › ISS-441 · earning comp-off does not require an existing comp-off balance

ISS-441: Comp-Off Request rejects when employee.balance <= 0 and debits the ledger on approval

ISS-441 · tests/contract/workflows.spec.ts:112

Error: expect(received).toBe(expected) // Object.is equality

Expected: false
Received: true

known bugs: leave @journey @known-bug › ISS-437/439 · approved leave with confirmed unpaid days is posted and stays approved (row 15)

ISS-437/439: post_ledger fails with "Insufficient balance" and the request ends rejected

ISS-437 · ISS-439 · tests/journeys/al04-al05-leave.spec.ts:181

Error: e1 POST /api/me/leave → 409 {"message":"Overlaps an existing pending/approved request"}

known bugs: comp-off @journey @known-bug › ISS-441 · a request to earn comp-off for a weekend reaches the manager (rows 29–30)

ISS-441: Request comp-off is rejected for having no comp-off balance

ISS-441 · tests/journeys/al08-al09-compoff-balances.spec.ts:35

Error: timed out waiting for manager task

Gaps against the workflow sheet 7

The Attendance & Leave sheet asks for this; the platform does not do it (GAPS.md).

known gaps: permissions @pr @known-bug › GAPS row 33 · HR SPOC can adjust special leave balances

HR SPOC has no balance-adjust right on this tenant (GAPS.md row 33)

GAPS.md row 33 · tests/contract/permissions.spec.ts:46

Error: expect(received).toBe(expected) // Object.is equality

Expected: false
Received: true

known gaps: permissions @pr @known-bug › GAPS row 34 · HR SPOC can change leave configuration

HR SPOC is view-only on leave policies on this tenant (GAPS.md row 34)

GAPS.md row 34 · tests/contract/permissions.spec.ts:50

Error: expect(received).toBe(expected) // Object.is equality

Expected: false
Received: true

known gaps: configuration @pr @known-bug › GAPS row 1 · days under 8 hours count as half days

Half-day cut-off is 4 hours on this tenant; the sheet asks for 8 (GAPS.md row 1)

tests/contract/policies.spec.ts:76

Error: expect(received).toBe(expected) // Object.is equality

Expected: 8
Received: 4

known gaps: work from home @journey @known-bug › GAPS row 22 · back-dated work from home is refused

Back-dated WFH is accepted and sent to the manager (GAPS.md row 22)

GAPS.md row 22 · tests/journeys/al06-wfh.spec.ts:79

Error: expect(received).toBeGreaterThanOrEqual(expected)

Expected: >= 400
Received:    201

known gaps: work from home @journey @known-bug › GAPS row 25 · long WFH gets an HR SPOC review

No HR SPOC step in the WFH workflow (GAPS.md row 25)

GAPS.md row 25 · tests/journeys/al06-wfh.spec.ts:87

Error: timed out waiting for HR SPOC task

known gaps: shifts @journey @known-bug › GAPS row 43 · the teammate is asked to accept a swap first

No peer acceptance: the swap goes straight to the manager (GAPS.md row 43)

GAPS.md row 43 · tests/journeys/al10-al11-shifts.spec.ts:87

Error: timed out waiting for teammate task

known gaps: shifts @journey @known-bug › GAPS row 42 · a swap between identical shifts is refused

Eligibility does not check identical shifts (GAPS.md row 42)

GAPS.md row 42 · tests/journeys/al10-al11-shifts.spec.ts:100

Error: expect(received).toBeGreaterThanOrEqual(expected)

Expected: >= 400
Received:    201

Now passing — bug no longer reproduces 2

Confirm the fix, close the issue, and keep the test as a regression check.

known bugs: data integrity @pr @known-bug › ISS-446 · no PTO is credited before the policy’s waiting period ends

ISS-446: a 1 Oct joiner was credited October PTO on 9 Oct, inside the waiting period (waitingDays 30, now startNextMonth)

ISS-446 · tests/contract/data-integrity.spec.ts:45

known bugs: regularization @journey @known-bug › ISS-451 · a refused correction tells the employee why

ISS-451: the drawer stays open with no message when the server refuses (e.g. NOT_EMPLOYED for a day before joining)

ISS-451 · tests/journeys/al01-al02-attendance.spec.ts:130