diff --git a/services/web/app/src/Features/Project/ProjectController.js b/services/web/app/src/Features/Project/ProjectController.js index 7e98e1803f..57b093964c 100644 --- a/services/web/app/src/Features/Project/ProjectController.js +++ b/services/web/app/src/Features/Project/ProjectController.js @@ -544,7 +544,9 @@ const _ProjectController = { const showAiErrorAssistant = userId && Features.hasFeature('saas') && - (user.features?.aiErrorAssistant || user.alphaProgram) + (user.features?.aiErrorAssistant || user.alphaProgram) && + (privilegeLevel === PrivilegeLevels.READ_AND_WRITE || + privilegeLevel === PrivilegeLevels.OWNER) const template = detachRole === 'detached' diff --git a/services/web/frontend/js/features/pdf-preview/util/output-files.js b/services/web/frontend/js/features/pdf-preview/util/output-files.js index 17885f635f..0eca1e6aa0 100644 --- a/services/web/frontend/js/features/pdf-preview/util/output-files.js +++ b/services/web/frontend/js/features/pdf-preview/util/output-files.js @@ -153,7 +153,7 @@ export function buildLogEntryAnnotations(entries, fileTreeData, rootDocId) { logEntryAnnotations[entity._id] = [] } - logEntryAnnotations[entity._id].push({ + const annotation = { id: entry.key, entryIndex: logEntryAnnotations[entity._id].length, // used for maintaining the order of items on the same line row: entry.line - 1, @@ -161,10 +161,17 @@ export function buildLogEntryAnnotations(entries, fileTreeData, rootDocId) { text: entry.message, source: 'compile', // NOTE: this is used in Ace for filtering the annotations ruleId: entry.ruleId, - firstOnLine: !seenLine[entry.line], - }) + } - seenLine[entry.line] = true + // set firstOnLine for the first non-typesetting annotation on a line + if (entry.level !== 'typesetting') { + if (!seenLine[entry.line]) { + annotation.firstOnLine = true + seenLine[entry.line] = true + } + } + + logEntryAnnotations[entity._id].push(annotation) } } }