Update project documentation and code comments to remove platform-specific references

Refactor documentation files and code comments to remove references to Replit, specific task numbers, and other platform-specific identifiers.
This commit is contained in:
Riyadh
2026-05-14 06:23:49 +00:00
parent f6fec16ea9
commit 0cee551f60
56 changed files with 335 additions and 151 deletions
@@ -1,4 +1,4 @@
// Task #517 E2E:
// E2E:
// 1) An app with an `image_url` renders that image (not a Lucide icon)
// on the launcher tile.
// 2) An app with `open_mode='external_tab'` opens its `external_url` in
@@ -23,7 +23,7 @@ function attendanceLabel(lang, kind) {
return val;
}
// E2E coverage for Task #204: the per-group attendee headers
// E2E coverage for: the per-group attendee headers
// ("Virtual Attendance / Internal Attendance / External Attendance")
// rendered above each attendee group in the schedule's attendee cell.
//
@@ -174,7 +174,7 @@ for (const lang of ["en", "ar"]) {
test(`Schedule [${lang}]: top "+ subheading" chip is NEVER rendered (empty / person-only / subheading-only / mixed)`, async ({
page,
}) => {
// Task #230: the top chip is gone in every state. We seed two
// the top chip is gone in every state. We seed two
// meetings that, between them, exercise all four cell states:
// meetingEmptyId: a brand-new meeting with zero attendees ⇒
// the cell is EMPTY.
@@ -272,7 +272,7 @@ for (const lang of ["en", "ar"]) {
// must be absent in every group. We prove all three groups
// mounted by checking each one's per-group trailing "+" person
// button is present (testid em-add-attendee-{addType}). NOTE:
// since Task #234, the trailing "+ subheading" chip is suppressed
// since, the trailing "+ subheading" chip is suppressed
// per group in split-mode cells and replaced by ONE cell-level
// chip (testid em-add-subheading-cell-{meetingId}) — so the
// per-group em-add-subheading-{addType} testids must NOT exist
@@ -773,7 +773,7 @@ for (const lang of ["en", "ar"]) {
test(`Schedule [${lang}]: split-mode cell shows ONE cell-level "+ subheading" chip and routes to the LAST visible group`, async ({
page,
}) => {
// Task #234: in a split-mode cell (≥2 attendance groups visible),
// in a split-mode cell (≥2 attendance groups visible),
// the trailing "+ عنوان فرعي" chip must NOT be rendered per group;
// a single cell-level chip below all groups is rendered instead.
// Clicking it adds the new subheading to the LAST visible group in
@@ -935,7 +935,7 @@ for (const lang of ["en", "ar"]) {
test(`Schedule [${lang}]: split-mode WITHOUT external — cell-level "+ subheading" chip routes to INTERNAL (last visible)`, async ({
page,
}) => {
// Task #234 fallback path. The "last visible group" rule resolves
// fallback path. The "last visible group" rule resolves
// the cell-level chip's target at click-time as
// external > internal > virtual. The previous test exercises the
// external-wins path; this one locks the internal-wins fallback by
@@ -14,7 +14,7 @@ function loadLocale(lang) {
}
const localeBundles = { en: loadLocale("en"), ar: loadLocale("ar") };
// E2E coverage for Task #207 — custom subheadings inside the attendees
// E2E coverage for — custom subheadings inside the attendees
// cell. Subheadings are user-defined section labels that live alongside
// person rows in a meeting's attendee list, but are NOT counted as
// attendees and do NOT advance the running "1-, 2-, 3-…" person index.
@@ -189,7 +189,7 @@ async function gotoSchedule(page, lang) {
// LTR (English) and RTL (Arabic) locales — since the bug originally
// surfaced on the Arabic schedule.
//
// Per Task #203 the index prefix is intentionally hidden when the
// the index prefix is intentionally hidden when the
// attendee group has only one entry, so this test scopes itself to
// rows that actually carry an `em-attendee-index-*` span.
for (const lang of ["en", "ar"]) {
@@ -260,7 +260,7 @@ for (const lang of ["en", "ar"]) {
}
});
// Task #203: when an attendee group has exactly one entry the
// when an attendee group has exactly one entry the
// leading `1-` index prefix is hidden because there is nothing to
// enumerate. Assert that for at least one solo-attendee row, no
// `em-attendee-index-*` span exists inside it, in BOTH locales.
@@ -708,7 +708,7 @@ test("Schedule keyboard: Tab from the title cell reaches the time cell in the sa
});
// -------------------------------------------------------------------
// Task #308: typing on the keyboard + Enter must save.
// typing on the keyboard + Enter must save.
//
// The historical bug: the time cell used <input type="time">, which
// only fires onChange when the value is a complete, canonical "HH:MM"
@@ -729,7 +729,7 @@ test("Schedule keyboard: Tab from the title cell reaches the time cell in the sa
// the same for end, press Enter, and wait for the PATCH + day GET
// refetch.
//
// Per task #315 the time cell is now a 12-hour picker — typing a
// the time cell is now a 12-hour picker — typing a
// 112 hour without first picking AM or PM is intentionally an
// ambiguous parse error (the fix for the "1:15 silently saved as
// AM" bug). For typed shapes that the picker can resolve on its
@@ -802,7 +802,7 @@ async function typeTimesAndSave(
// hour/minute so a test that accidentally passes by reading stale
// state (rather than the new value) would fail.
//
// `startPeriod` / `endPeriod` mirror task #315's "the picker has no
// `startPeriod` / `endPeriod` mirror's "the picker has no
// implicit default" rule: ambiguous typed shapes (112 hour, no
// marker) require the helper to click the AM/PM toggle, while
// shapes with an explicit marker or a 24h-only hour are resolved by
@@ -884,7 +884,7 @@ test("Schedule keyboard (AR): typing Arabic-Indic digits + Enter saves canonical
await gotoMeetingRow(page, meetingId, date);
// ٠٩:٣٠ -> 09:30, ١٠:٤٥ -> 10:45. Both are 112 hours so the
// picker requires an explicit AM/PM choice (task #315) — pass the
// picker requires an explicit AM/PM choice — pass the
// Arabic morning marker via the toggle so the helper clicks ص.
await typeTimesAndSave(page, meetingId, date, "٠٩:٣٠", "١٠:٤٥", "am", "am");
@@ -897,7 +897,7 @@ test("Schedule keyboard (AR): typing Arabic-Indic digits + Enter saves canonical
});
// -------------------------------------------------------------------
// Task #311: dragging a visible meeting must produce a chronologically-
// dragging a visible meeting must produce a chronologically-
// sorted visible list, even when the same day contains hidden cancelled
// meetings. Before the fix, cancelled meetings (filtered out of
// `orderedMeetings` for display) were still included in the reorder
@@ -1239,7 +1239,7 @@ test("Schedule keyboard: Tab walks start hour → start minute → start AM →
const endPm = page.getByTestId(`em-time-end-period-pm-${meetingId}`);
await expect(startInput).toBeFocused();
// Per task #315 each side has THREE controls: hour input, minute
// each side has THREE controls: hour input, minute
// input, AM/PM toggle. Tab walks through start hour → start minute
// → start AM → start PM → end hour → end minute → end AM → end PM.
// "7" + "15" is a 112 hour with no marker, so the picker requires
@@ -1429,7 +1429,7 @@ test.describe("Schedule mobile viewport (iPhone 375)", () => {
});
// -------------------------------------------------------------------
// Task #316: stop the snap-back race + collapse the editor instantly.
// stop the snap-back race + collapse the editor instantly.
// Three guards:
// 1. Save → immediate re-open of the editor must show the SAVED
// values pre-filled, not blank fields. (The bug the user
@@ -1727,8 +1727,8 @@ test("Schedule time editor: a failed PATCH rolls back the optimistic times and r
// ─── #317: optimistic-cache repaint for non-time inline editors ─────
//
// Task #316 made the time cell repaint instantly via an optimistic
// React Query cache write. Task #317 generalises that pattern to the
// made the time cell repaint instantly via an optimistic
// React Query cache write. generalises that pattern to the
// title, attendee-name, and merge-text editors. The three tests below
// mirror the time-cell tests for the title cell:
//
@@ -1,4 +1,4 @@
// E2E + UI coverage for the cell-merge feature added by task #152.
// E2E + UI coverage for the cell-merge feature added by.
//
// Two scenarios live here:
//
@@ -1,5 +1,5 @@
// Verifies the consolidated row-actions kebab menu introduced as part
// of task #191 — the three previously-separate row overlays (delete,
// of — the three previously-separate row overlays (delete,
// row color, merge cells) are now collapsed into a single menu so they
// no longer collide visually inside narrow cells. Each sub-action
// keeps its original testid, so the rest of the suite + any external
@@ -1,4 +1,4 @@
// Coverage for task #192 — quick-preview indicators on the row-actions
// Coverage for — quick-preview indicators on the row-actions
// kebab menu's main view:
//
// 1. The "Row color" item shows a tiny swatch reflecting the row's
@@ -595,7 +595,7 @@ test("Schedule: editing an attendee name with bold + color via the Tiptap toolba
// Seed a meeting with one attendee whose name is plain text. The
// attendee row uses the SAME EditableCell + Tiptap toolbar as titles
// (parent task #122), so applying bold + a color swatch and saving
// (parent), so applying bold + a color swatch and saving
// via the toolbar's check button must round-trip through the PUT
// attendees endpoint and survive a full reload, just like titles do.
const date = uniqueFutureDate(4);
@@ -1,4 +1,4 @@
// Task #512 e2e: per-recipient delete on the Inbox tab.
// e2e: per-recipient delete on the Inbox tab.
// Seeds three received notes for a recipient, opens Notes (Inbox is
// the default view), enters bulk-select mode, picks two cards,
// confirms the bulk delete, and verifies that the deleted recipient
@@ -1,4 +1,4 @@
// Task #438 e2e: a recipient toggles a checklist item directly from the
// e2e: a recipient toggles a checklist item directly from the
// incoming-note popup, and the change is visible to the sender (and
// persists server-side).
import { test, expect } from "@playwright/test";
@@ -1,4 +1,4 @@
// E2E test for Task #406: when a sender sends a note, the recipient (in
// E2E test for: when a sender sends a note, the recipient (in
// another browser context) sees the note pop up as a centered modal on
// their screen — wherever they are in the app — within ~seconds.
import { test, expect } from "@playwright/test";
@@ -225,7 +225,7 @@ test("recipient sees a popup modal when a note arrives in real time", async ({
}
});
// Task #410: when the recipient replies on a note, the *original sender*
// when the recipient replies on a note, the *original sender*
// (note owner) should see the same floating-card popup variant — pre-
// filled with the reply text + replier name — wherever they are in the
// app, with the same chime/vibration profile as the new-note alert.
@@ -373,7 +373,7 @@ test("sender sees a floating reply card when the recipient replies", async ({
}
});
// Task #433: a checklist note must render the inner sticky-note "as a
// a checklist note must render the inner sticky-note "as a
// real note" — i.e. the popup body shows a read-only checklist preview
// (not the plain text body), proving `noteKind` + `items` are forwarded
// from the backend through the socket payload into the popup.
@@ -1,4 +1,4 @@
// Task #427: on touch devices (iPad / phone), tapping a button on the
// on touch devices (iPad / phone), tapping a button on the
// floating note popup MUST work — even when other floating UI is on
// screen at the same time. The previous root cause was a full-viewport
// `fixed inset-0` wrapper at z-[110] that intermittently swallowed
@@ -1,4 +1,4 @@
// Task #472 e2e: multi-select + bulk-delete on the Sent notes tab.
// e2e: multi-select + bulk-delete on the Sent notes tab.
// Seeds three sent notes for a user, opens the Sent view, enters
// selection mode, picks two cards, confirms the bulk delete, and
// verifies that the count drops by two while the unselected note
@@ -1,6 +1,6 @@
// E2E test: the note thread dialog must cap its height instead of growing
// to fill the entire viewport when the conversation is long. Regression
// guard for task #417 (user reported the dialog covering the whole page).
// guard for (user reported the dialog covering the whole page).
import { test, expect } from "@playwright/test";
import pg from "pg";
@@ -1,4 +1,4 @@
// E2E test for Task #441: notification sounds use Web Audio so they
// E2E test for: notification sounds use Web Audio so they
// reliably play on iPad Safari after a single user gesture. Verifies
// (1) the AudioContext reaches `running` state after the user clicks
// the per-sound preview button in notification settings, (2) the play
@@ -1,5 +1,5 @@
// Playwright e2e for the per-card and bulk delete affordances on
// /orders/incoming added in task #397.
// /orders/incoming added in.
//
// Covers:
// - Bulk delete: receiver selects 2 unclaimed orders via per-card
@@ -1,4 +1,4 @@
// Task #438: lightweight render test for the upcoming-meeting alert
// lightweight render test for the upcoming-meeting alert
// entrance animation. Asserts the alert panel renders with the
// matching scale-in/opacity transition, an accent ring (boxShadow with
// the user's accent color), and a pulsing animate-ping halo around the