Have something to say?

Tell us how we could make the product more useful to you.

Planned, but No Date

Identity resolver: case-insensitive matching at Tier 1

normalizeEmployeeId trims, strips domain, and strips leading zeros, but leaves case untouched, and Tier 1 matches employee_id exactly and case-sensitively. On qa, 39 of 51 corporate rows carry lowercase nickname employee ids, so a differently-cased SSO claim misses Tier 1 and falls through to Tier 1b, which compares on a lowered value. No lockouts today because Tier 1b catches every case, including the 7 rows with no federated_alias. This is tier degradation rather than an access failure. Fix is to lower-case within normalizeEmployeeId or add a lowered candidate to employeeIdCandidates, applied to both the TS module and the sidecar JS copy in server/alb-identity/claims.js. Source: verification of PR 189, Aug 16 2026.

Matt Britton about 21 hours ago

New Functionality

Planned, With Date

Cut off demo application access for North America and EU store managers

What is happening: Access to the demo application is being cut off for North America and EU store managers. Those users move to the production Coach Pulse application. The demo remains available for Asia, which runs SMC Macau on it. What to build Gate at login: a user whose market resolves to North America or EU cannot enter the demo application. Clear message, not a dead end: a blocked user sees a short message pointing them to the production application. No blank screen, no generic "account not set up" error. Market driven, not store number: scope off the market or region value on the user record so the rule holds for users sitting under a US store record. Reversible mechanism: preferred implementation is a config driven list of permitted markets that flips back without a code deploy. Accounts stay intact: access gate only. No account deletion, no removal of existing demo session history or scores. Assumed scope Surfaces: all demo surfaces, meaning coachpulsedemo.com plus vegas, futurenow and gcx subdomains. Markets retaining access: HK/Macau, Taiwan, Mainland China, Japan, Korea, Singapore, Malaysia, ANZ. Untouched: the production application, and every Asia market path including the Macau SMC build. Timing: launch is Aug 22. This needs to land before launch so no North America or EU manager is sitting on demo when production goes live. Release window Aug 17 to 21. Open items Store managers only, or all North America and EU roles including associates. Whether corporate, admin and FutureProof accounts keep demo access for testing and client demos. Exact wording of the blocked message, and whether it carries a link to the production application. Whether EU is defined by the market field or by store country. Whether the cut off applies to every demo subdomain or only the main demo site.

Matt Britton 3 days ago

New Functionality

UAT Approved.

Roleplay results relabel: What to Celebrate / Where to Lean In

**What is happening:** The two section labels on the roleplay results screen are being relabeled. This wording is final and supersedes the earlier candidates ("Where to Celebrate", "Where to lean in" in sentence case, "Focus areas", "Wins"). - Strength / Strengths becomes **What to Celebrate** - Opportunity / Opportunities becomes **Where to Lean In** Title case exactly as shown, capital I in "In". The new labels have no plural form. The asymmetry is intentional as written: "What" on the first label, "Where" on the second. **Environments:** Coach Pulse QA and Coach Pulse Demo. Each environment has its own change spec. **Where it lands** - Roleplay results screen (Consumer PWA, Train), including the results summary strip, session history rows and the results card preview - Coach Feedback and session summary copy, including prompt-side wording so generated feedback does not reintroduce the old terms - Localized strings for every language in the picker. Translations come from each market; Greater China follows the GC AI Localization Guide and lands in Traditional Chinese for HKMO and TW - My Team "Strengths & Opportunities" label. Code-only in QA where My Team is hidden and locked for launch; user-visible on Demo - Admin session detail, filter labels and column headers - Export column headers and reporting dimension display names - Other demo surfaces, including the session logs pages - No change to API field names, database columns, scoring rubric criteria or analysis output keys. Display layer only, no backfill and no rescoring - User guide and training materials **Out of scope:** scoring and rubric logic, item counts per section, and any other copy change. The in-app disclaimer stays dropped and the user guide carries the explanation. **Verification:** English results screen, one localized language (must render in language rather than falling back to English), a string sweep of the consumer and admin bundles, admin and export headers, and a pre-change session rendering under the new labels with its scores intact. **Open items:** fallback behavior while a market translation is outstanding; who signs off each market translation and by when; whether any circulated deck, PDF or guide needs a reissue; release path given the Aug 13-14 blackout, the Aug 17-21 window and the Aug 22 launch. **Docs:** CoachPulse_QA_ChangeSpec_v2.docx and CoachPulse_Demo_ChangeSpec_v2.docx. v1 of each is superseded by the celebrate-label correction. **Related, Demo only:** ELX framework scores currently render with decimal points and should render as whole numbers. That change is specified in the Demo doc and is tracked separately from this relabel.

Matt Britton 3 days ago

New Functionality

UAT Approved.

Hide My Team for launch - QA (temporary, code retained)

What is happening: My Team is being hidden and locked in Coach Pulse QA. The section will not be available to users at launch. This is a pause, not a removal. Code, data pipeline and underlying scoring all stay in place; My Team is switched off at the surface only and will be switched back on later. No date is set for that. What to build Navigation: remove the My Team entry from navigation for all roles. Route: the My Team route should not resolve for a user who reaches it directly. No partial view and no empty state that signals a hidden section. Code retained: no deletion and no rollback. This is a visibility switch, not a teardown. Preferred mechanism: a configuration flag that can be flipped back without a code deploy, so re-enablement does not consume a release window. This is the only change Hiding My Team is the entire scope of this ticket. Nothing else in the application moves with it. No other section changes: Today, Culture, Train, Ask and You are untouched. No copy changes: the Strengths and Opportunities relabel is a separate item and is not bundled here. No data or scoring changes: collection, scoring and reporting continue exactly as they are. No cleanup work: no refactor, no deletion, no rollback taken on the back of this change. Timing Launch August 22, 2026. Must be hidden before that date. Release window August 17 to 21. Blackout August 13 to 14. Re-enablement has no date. Open items to confirm Whether the hide applies globally or is market scoped (global assumed). Whether any admin role retains a view, or the hide is absolute. The flag name and where it is configured, so re-enablement is a single step. Spec doc: CoachPulse_MyTeam_Hide_Spec_v4.docx

Matt Britton 4 days ago

New Functionality

UAT Approved.

Culture Feed video: second tap on the volume control pauses playback instead of re-muting

Surface: Consumer PWA Β· Culture Feed Β· video card. Environment: Production. Severity: P1. What is happening. Culture Feed videos begin playing with audio off. Tapping the volume control turns audio on and the video keeps playing, as intended. Tapping the volume control a second time β€” the associate’s attempt to turn audio back off β€” pauses playback rather than re-muting. Mute state and playback state are being changed by the same gesture. Why it happens. The volume control is nested inside the video card, and the card carries its own tap-to-play/pause handler, so a tap on the volume icon runs both the mute toggle and the playback toggle. The first tap looks correct only because the unmute path calls play() explicitly (browsers block unmuted autoplay, so unmute has to re-kick playback), which immediately undoes the pause the card handler just applied. The mute path has no equivalent play() call, so on the second tap the pause is the only change the associate sees. Steps to reproduce. Open the Culture Feed in the Consumer PWA and scroll to a video post. Video autoplays muted. Tap the volume control β€” audio turns on, playback continues. Tap the volume control again to turn audio off β€” the video pauses instead of muting. Proposed fix. Stop the volume control’s event from reaching the card: call stopPropagation() and preventDefault() in the mute toggle handler, and add nativeEvent.stopImmediatePropagation() if the card’s play/pause listener is attached natively rather than through React (React 17+ delegates at the root, so a native ancestor listener fires first and is not stopped by React’s stopPropagation alone). In the same pass, remove the play() call from the unmute path so mute state and playback state are fully independent. To confirm during the fix. Whether the card’s play/pause listener is a React onClick or a native addEventListener β€” that determines whether stopImmediatePropagation is also required. That the volume control is not nested inside a card-level link or anchor wrapper, which would introduce a third handler on the same tap. Verification on a physical iPhone in the installed PWA β€” iOS Safari can dispatch pointer and click events separately on some button configurations and reproduce the double-toggle even after propagation is handled. Reference: CoachPulse_CultureFeed_VideoAudio_QA_Findings_v1, finding F1.

Matt Britton 4 days ago

πŸ’‘

Feature Request:

Approved Through QA/Ready for UAT

Supported provisioning path for corporate and non-HR-feed accounts

Applies to Coach Pulse identity services and the sync-employees job, with an authoring surface in coach-pulse-admin-ui. Repository attribution to be confirmed before QA. **Problem.** Coach Pulse runs a two layer identity architecture. SSO through Cognito and AD handles authentication, but the application only trusts the profiles table, which is populated by the sync-employees job reading the Tapestry HR feed. Corporate and test accounts provisioned directly in AD but absent from the HR feed authenticate successfully and then resolve to nothing: blank name, default role display, no store assignment, no C360 data. Corporate, non store manager users have been the group most affected. **What already exists.** The July 29 identity and access rebuild shipped backfill migrations setting federated aliases for 38 corporate records and keying 50 unkeyed employee IDs, written against dev and QA, so production requires its own backfill pass. The rebuild also made the system fail closed: identities outside approved corporate domains or the HR roster now receive an "account not provisioned" denial rather than a wrong but working session. A break glass provisioning path exists behind QA_IDENTITY_BREAKGLASS and is auditable. **The gap.** Backfill migrations and break glass are both exception handling. Neither is a supported path. The provisioning gap recurs every time Tapestry stands up a new tester or corporate user outside the roster, and the July diagnosis carried a recommendation that FutureProof build a manual seeding path for non HR accounts. That path has been identified and not yet built. **Recommended action.** Build a supported, audited admin path to seed and maintain profile rows for corporate and non HR-feed identities, so the fail closed behavior stays intact while legitimate corporate users can be provisioned without a migration or a feature flag. **Acceptance criteria.** 1. An authorized admin can create a profile row for an identity that authenticates through SSO but does not appear in the HR feed. 2. A seeded profile carries name, role, region and store assignment, and renders identically to an HR sourced profile across Coach Pulse surfaces. 3. Seeded profiles are marked with their provenance so they are distinguishable from HR sourced records in audit. 4. A subsequent sync-employees run does not overwrite or orphan a seeded profile. 5. Every seed, edit and revoke is written to the audit log with actor, timestamp and before and after state. 6. Fail closed behavior is unchanged for identities that are neither seeded nor on the roster. 7. Break glass remains available but is no longer the routine path for corporate provisioning. **Dependencies and out of scope.** Production backfill pass is a prerequisite and is tracked separately. The open SSO token issue affecting corporate accounts is a separate defect and is not resolved by this work. The compliance question around approximately 4,500 indirect market users accessing outside SSO, with Sarah looping in Michael Pearson, is related but distinct and is out of scope here.

Harrison 7 days ago

New Functionality