Skip to content

CLUE-341-group-docs-merge#2757

Merged
scytacki merged 232 commits intogroup-documentsfrom
CLUE-341-group-docs-merge
Mar 6, 2026
Merged

CLUE-341-group-docs-merge#2757
scytacki merged 232 commits intogroup-documentsfrom
CLUE-341-group-docs-merge

Conversation

@scytacki
Copy link
Member

@scytacki scytacki commented Feb 6, 2026

CLUE-341 Merge branch 'master' into group-documents

resolved conflicts in:

  • sort-document-utils.ts
  • document-group.ts
  • app-config-model.test.ts
  • history-view-panel.tsx
  • Canvas.js
  • single_student_canvas_test.js

emcelroy and others added 30 commits January 22, 2026 13:30
Replaces single Preview button with Student Preview and Teacher Preview
buttons that pass the appropriate fakeUser parameter to the runtime URL.

Adds PreviewUserType to distinguish between student and teacher previews
in the useAuthoringPreview hook.
The AI authoring page was correctly saving tags but was not updating the AI prompt categories array with the labels of the tags.
The Cypress tests would fail randomly when a document was created and took a while before it was actually opened on the right side of clue
…-preview

feat: Add separate student and teacher preview buttons [CLUE-301]
…categorization-authoring

fix: Setting of AI prompt categories in authoring [CLUE-342]
…me-toolbar-icon

fix: Update iframe interactive tile icon from placeholder icon
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
I also found an issue with the cypress tests trying to open the shared variable dialog. This test failing routinely locally but it used to pass remotely, so I'm pushing up this change to see if it still passes remotely.
…ating-new-docs

CLUE-386 Cypress: wait for new doc to open before continuing
lbondaryk and others added 21 commits February 25, 2026 16:42
…ow (CLUE-397)

Rating buttons (Yes/No/Not Sure) now appear below every comment text,
allowing any user to rate any comment. Ratings are stored per-user in
Firestore with security rules enforcing own-key-only writes. The old
Ada-specific agree button flow in comment-textbox has been removed.

Key changes:
- Move rating buttons below comment text (associated with comment, not author)
- Fix doubled Firestore root path in useUpdateCommentRating hook
- Add simplified path fallback for comments stored at non-prefixed paths
- Update Cypress tests to cover new rating button interactions
- Update design and implementation plan docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…er (CLUE-429)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…handling, fix tab layout

- Restrict Firestore rating updates to requester own entry via platform_user_id
- Await fallback updateRating call to prevent unhandled promise rejections
- Add commentId and ratingValue to rate log payload for analytics
- Remove blank space in tab bar when comment panel is open
- Update plan docs to reflect stricter security rules

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extend the Read Aloud feature to include comment threads from the chat
panel. When the comments panel is open on the left pane, Read Aloud now
reads all tiles in document order, announces "Comments" as a section
header, then reads each comment thread with "{author name} said:
{content}" attribution. When a tile is selected, it reads the tile
content followed by that tile's comment thread, then stops. When no
tiles are selected and the chat panel is open, a comments-only mode
reads just the comments.

Per-comment queue items (CommentReadAloudItem) replace the earlier
per-thread approach, enabling individual comment highlighting as each
is read aloud. Clicking a comment during active reading jumps to it
via jumpToItem(). Clicking a comment when idle sets a pendingCommentId
so the next Read Aloud start jumps directly to that comment without
selecting the associated tile.

Key changes:

Queue and service architecture:
- Add CommentReadAloudItem and SectionHeaderReadAloudItem types with
  type guards (read-aloud-queue-items.ts)
- Add buildReadAloudQueue() pure function that composes tile, section
  header, and per-comment items with pre-built speech text
- Add buildThreadHeaderText() and pushCommentItems() helpers
- Add replaceQueue() with position reconciliation by stable key
  (associatedTileId for tiles, commentId for comments)
- Add buildTargetedSubQueue() for workspace tile clicks during comment
  reading, with isTargetedOverride flag to prevent reactive rebuilds
- Add pendingCommentId and lastProgrammaticSelectionTime to service
  for comment selection and programmatic tile selection tracking
- Add TOOLBAR_READ_ALOUD_COMMENT_TRANSITION log event

Pane and state fixes:
- Thread explicit pane prop through EditableDocumentContent →
  DocumentToolbar → ToolbarComponent so left-pane documents without
  a section prop correctly report pane="left"
- Move isDocumentsView from ChatPanel local useState to persistentUI
  volatile property for cross-component observability
- Extract sortCommentsInDocumentOrder() into chat-comment-thread.ts
  as a shared utility

Reactive queue rebuilding:
- Add MobX reaction in ReadAloudButton that rebuilds the queue when
  document structure, comments, panel state, or Documents View toggle
  changes (debounced 800ms, structural comparison)
- Immediate rebuild on hookComments change (React Query, not MobX)
- Stop Read Aloud when toggling to Documents View

Comment UI integration:
- Add per-comment .reading CSS class with pale yellow background
- Add pendingCommentId .pending CSS class with charcoal outline
- Add click handlers on individual comments for jump-to and pending
  selection
- Add scroll-into-view for currently-reading comments
- Pass readingCommentId, pendingCommentId, and onCommentClick through
  ChatThread → ChatThreadItem → CommentCard
- Clear pendingCommentId on workspace tile click via MobX reaction,
  with timestamp guards to ignore programmatic selections
- When starting from a pending comment, skip tile selection so the
  comment remains the visual focus

Tests:
- Add comprehensive tests for buildReadAloudQueue() covering
  sequential, targeted, comments-only, and edge cases (473 lines)
- Add pendingCommentId and replaceQueue tests to service test suite
- Update ReadAloudButton test for comments integration
- Fix lint warning: break long line in editable-document-content.tsx
- Consolidate confusing buildTileSpeechText tests into one clear test
  that verifies text tile titles are excluded due to hiddenTitle
- Add isReadingPane(pane) method to ReadAloudService and use it across
  all callers for improved readability
ReadAloudButton's comment hooks call useFirestore() unconditionally, which
crashes in the doc-editor context where db.stores is undefined. Skip rendering
ReadAloudButton when DISABLE_FIREBASE_SYNC is set since Read Aloud with
comments is not relevant in the authoring context.
Extend buildTileSpeechText() to extract readable content from sketch
tiles (text annotations via depth-first traversal) and table tiles
(column headers + row values with "blank" for empty cells).

Add extractSketchText() for recursive object traversal with
punctuation-aware joining, and extractTableText() for column/row
speech composition. Both use structural type checks to avoid .tsx
imports in the service layer.

Add 27 unit tests covering sketch text extraction, table text
extraction, and queue builder integration with comments.
… joining

Expand the punctuation-aware regex in extractSketchText() to recognize
sentence-ending punctuation (.!?…...) followed by trailing closing
characters ("')]). Previously, `She said "hello!"` would incorrectly
get a period appended before the next text object.
…oud-for-comments

feat: Add Read Aloud support for comments [CLUE-418]
- Replace `any` types with `IAttribute` in extractTableText and
  `DrawingContentModelType` in buildTileSpeechText per reviewer suggestion
- Expand punctuation test to cover multiple text objects with ! and ?
…for-sketch-comments

feat: Add Read Aloud support for sketch text and table data [CLUE-417]
…lbar-events

Clue 429 cleanup rollbar events
…ai-comments

Resolve conflict in comment-card.tsx: use master's CommentItem component
with branch's renderRatingButtons replacing renderAgreeWithAi.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove unnecessary RowListType cast (type guard suffices)
- Use DEFAULT_PROGRAM_ZOOM constant instead of hardcoded values
- Move dataflow delete tool to app-config.json, remove fallback infrastructure
- Update misleading comment in tileSnapshotForCopy

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…mbs-up-or-down-on-non-ai-comments

Clue 397 comment thumbs up or down on non ai comments
…es-cannot-be-resized-in-questions-and-cant-be-deleted

Clue 415 program tiles cannot be resized in questions and cant be deleted
Resolved conflicts in:
- document-file-menu.tsx (combined useMemo from master with group doc option)
- document-file-menu.test.tsx (combined both test suites - basic menu ops and group doc visibility)
- document-utils.ts (kept GroupDocument import, removed duplicate imports)
- document-group.ts (kept inline byGroup with GroupDocument handling, added upperWords)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@scytacki scytacki mentioned this pull request Mar 4, 2026
@scytacki scytacki marked this pull request as ready for review March 5, 2026 17:47
@scytacki
Copy link
Member Author

scytacki commented Mar 5, 2026

@tealefristoe the changes in this PR don't need to be reviewed. They are showing all the changes to master since the group-documents branch was started. They also include the merge conflicts that were resolved. But it is really hard to see them, so I think it is fine to skip this.

However the main point is that the tests are passing. This PR includes all of the changes from #2753 and the tests are passing.

Base automatically changed from CLUE-341-group-doc-live to group-documents March 6, 2026 03:04
@scytacki scytacki merged commit 2a81880 into group-documents Mar 6, 2026
28 of 45 checks passed
@scytacki scytacki deleted the CLUE-341-group-docs-merge branch March 6, 2026 03:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants