Skip to main content

Research Documentation

This directory contains research, analysis, and strategic insights generated during the development and improvement of Teams for Linux.

Research Context

These documents capture in-depth analysis and strategic insights that inform development decisions and provide context for major features.

Contents​

Everything listed here describes work that has not fully shipped. Once a piece of research is fully implemented or rejected, its decision moves to an ADR and the research document is deleted, with git history preserving the investigation.

Open Work​

No research is open at the moment. New investigations are added here while they are active.

Implemented Features (Research Removed)​

Research documents are deleted once their decision has moved to an ADR, whether the feature shipped, was rejected, or has remaining phases tracked in the roadmap. The ADRs and git history preserve the decisions and context.

FeatureVersionReference
Config Schema as Single Source of Truthv2.12.0 onwardsPhases 0 to 2, 3a and 4 shipped (#2597); decision in ADR-029; the in-app settings window (3b) stays in the roadmap
Graph API Integrationv2.6.17Phase 1 shipped (PR #1958); token route recorded in ADR-030, implementation reference in app/graphApi/README.md; Phases 2 and 3 parked in the roadmap
Custom Stickersv2.11.0Local-folder MVP plus HTTPS URL import and a one-level subfolder scan shipped (#2476, PR #2550); the closed Telegram and GIPHY attempts and the untried generation idea are recorded in the roadmap
FIDO2 Touch Promptv2.18.0Prompt shown around the security-key call, with a Cancel that aborts the fido2 child; decision folded into ADR-021 (#2631, PR #2779)
System Performance Audit---Ten findings closed as fixed, fixed differently, or not planned. Decision in ADR-026
Configuration Organization---Decision-only closeout (no feature shipped): naming convention and the resolved flat-to-nested rename mapping now live in ADR-025; migration stays opportunistic, docs-site/static/config-schema.json is the live inventory
Smartcard / NSS PIN Dialogv2.14.0Opt-in PIN dialog behind auth.clientCertificate.pinDialog.enabled, built on app/_shared/securePrompt.js. Decision in ADR-024 (#2639)
Custom Notification Systemv2.6.16Phase 1 toast shipped, Phase 2 notification centre dropped as unverifiable. Decision in ADR-022
Release Automation Tooling---release-please adopted, release-it and Beads rejected. Decision in ADR-023
WebAuthn / FIDO2 Hardware Keys---Opt-in beta behind auth.webauthn.enabled; the implementation plan is superseded by ADR-021
MQTT Extended Statusv2.10.0 onwardsMicrophone, camera, screen-sharing and incoming-call topics plus Home Assistant auto-discovery all shipped; the roadmap carries the per-PR status
Join Meeting Window Takeover---Same-origin navigation plus the Return to Teams menu item (app/menus/index.js) (#2322)
MQTT Microphone Statev2.10.0Speaking-indicator driven microphone state (speaking/silent/muted/off) published to MQTT. See PR #2497
Notification Sound Player (inline replacement for node-sound)v2.7.10Phase 1 of the notification-sound research shipped — paplay/pw-play/aplay/afplay detection in app/audio/player.js. See PR #2306
Cross-Distro CI Smoke Testv2.7.xWorkflow .github/workflows/cross-distro-smoke.yml ships the design proposed in the original research. Umbrella decision in ADR-016
Electron 41 Upgradev2.8.0Repo skipped Electron 40 entirely and jumped 39.8.2 → 41.x via dependabot PR #2347, with follow-up bumps to 41.5.0; the Electron 40 migration research is therefore obsolete
Issue-PR Release Linkingv2.7.11GraphQL closingIssuesReferences query; closes: metadata in changelog files. See PR #2317
Codebase Review (March 2026)v2.7.xCode quality, maintainability, performance, and DX review; findings addressed incrementally
Issue Triage Botv2.7.xAll four phases implemented; migrated to standalone Go service. See ADR-018 and github-issue-triage-bot
Dependency Cleanupv2.7.10Removed node-sound, lodash, electron-positioner; project now has 6 production deps
Speaking Indicatorv2.7.11WebRTC getStats() for three-state mute/speaking detection. See PR #2299
Electron-Updater Auto-Updatev2.7.6ADR-011; research covered electron-updater integration
External Changelog Generationv2.7.xADR-005; fork detection + release automation shipped
Screen Lock Media Privacy---Closed (#2106); no user interest; work preserved in branch
Tray Icon Logout Indicator---Archived (#1987); user not responding; work preserved in branch
External Browser Authentication---Not feasible; Teams manages OAuth internally (#2017)
GNOME Search Provider---Not recommended; latency too high for acceptable UX (#2075)
Code Quality Hardening (Phases 1-3)v2.7.5Logging hygiene, resilience, input handling, IPC hardening, CI/CD gates
Wayland/X11 Ozone Platformv2.7.4Force X11 by default due to Electron 38+ Wayland regressions; re-affirmed June 2026 after #2601 and #2508 were closed, decision now in ADR-031
Quick Chat / Chat Modalv2.7.4ADR-014, ADR-015
PII Log Sanitizationv2.7.2ADR-013
DOM Access Restorationv2.5.2Hybrid API + DOM approach for React compatibility
Architecture Modernization---Rejected (DDD too complex) --- incremental refactoring adopted instead
MQTT Commandsv2.6.xBidirectional MQTT support for toggle-mute, toggle-video, etc.
Calendar Data Exportv2.6.xMQTT get-calendar command
useSystemPicker---Rejected --- ADR-008

Purpose​

These documents capture strategic insights, comprehensive analysis, research findings, and context that inform development decisions and provide rationale for major features.

Document Lifecycle​

Research documents follow this lifecycle:

  1. Active Research Phase: Document findings, analysis, and recommendations
  2. Decision Phase: Use research to inform final decisions (implemented or rejected)
  3. Archive Phase: Move content to appropriate location after decision:
    • Implemented features: Create ADR if significant, update feature docs, delete research
    • Rejected features: Create/update ADR with concise decision record, delete research
    • Superseded research: Close with reference to superseding document
  4. History: Git commit history preserves full investigation context

Contributing Research​

When adding new research documents:

  1. Follow naming convention: Use descriptive, kebab-case filenames
  2. Include context: Date, scope, and purpose of analysis
  3. Link related documents: Cross-reference relevant files
  4. Update this index: Add entries for new research documents
  5. Provide actionable outcomes: Include clear recommendations or decisions