Shotcut is already open with /home/user/Documents/color_grade.mlt (1920x1080 30 fps). The project already contains one clip on the V1 timeline track referencing /home/user/Videos/landscape.mp4.

Add a 'Sepia Tone' filter and a 'Contrast' filter to the landscape.mp4 clip, both with default parameters. Save the project.

Project file exists

check-resolution /home/user/Documents/color_grade.mlt 1920 1080

Project resolution is 1920x1080

landscape.mp4 is still referenced

A sepia filter is present

A contrast filter is present

Project has exactly 2 filters


Shotcut is already open with /home/user/Documents/uhd_project.mlt (currently a 1920x1080 30 fps project). A source video exists at /home/user/Videos/drone.mp4.

Steps:
1. Open Settings > Video Mode > Custom > Add... and create a new custom video mode with resolution 3840x2160, frame rate 30 fps, aspect ratio 16:9, progressive. Select it so it becomes the active project video mode.
2. Import /home/user/Videos/drone.mp4 into the project.
3. Drag drone.mp4 onto the V1 timeline track so it becomes the only clip on the timeline.
4. Press Ctrl+S to save the project.

The saved project at /home/user/Documents/uhd_project.mlt must have a 3840x2160 profile at 30 fps and reference drone.mp4.

Project file exists

check-resolution /home/user/Documents/uhd_project.mlt 3840 2160

Project resolution is 3840x2160

Project frame rate is 30 fps

drone.mp4 is referenced in the project


A Shotcut project exists at /home/user/Documents/reels.mlt with vertical 1080x1920 resolution and 30 fps. The V1 timeline track contains one clip referencing /home/user/Videos/reels_source.mp4.

Export the timeline to a vertical MP4 file:
1. Use the default H.264 export preset.
2. The export must inherit the project's 1080x1920 resolution and 30 fps (do not override width/height/frame rate).
3. Set the output path to /home/user/Videos/reels_final.mp4.
4. Complete the export.

The output file /home/user/Videos/reels_final.mp4 must be a valid H.264 MP4 with 1080x1920 resolution.

Exported file exists

Exported file is a valid non-empty media file

check-export-codec /home/user/Videos/reels_final.mp4 h264 video

Exported video codec is h264

check-export-resolution /home/user/Videos/reels_final.mp4 1080 1920

Exported resolution is 1080x1920 (vertical 9:16)


Open the file /home/user/Documents/syllabus_draft.odt in LibreOffice Writer. The document contains a plain-text course syllabus with all paragraphs in Default Paragraph Style and no formatting.

Perform the following formatting and editing tasks:

1. Set the first paragraph 'Introduction to Computer Science - CS101' to Heading 1 style and make it bold.
2. Set the following paragraphs to Heading 2 style: 'Course Description', 'Prerequisites', 'Grading Policy', and 'Weekly Schedule'.
3. Set the following paragraphs to Heading 3 style: 'Midterm Exam' and 'Final Project'.
4. Use Find & Replace (Ctrl+H) to replace ALL occurrences of 'Prof.' with 'Professor'. There are 3 occurrences in the document.
5. Use Find & Replace (Ctrl+H) to replace ALL occurrences of 'TBA' with 'To Be Announced'. There are 4 occurrences in the document.
6. Add a page header with the text 'CS101 - Spring 2026' (Format > Page Style > Header tab, enable header, then type the text).
7. Save the file (Ctrl+S).

First paragraph has Heading 1 style

First paragraph is bold

check-heading-exists "Course Description" 2

'Course Description' is Heading 2

'Prerequisites' is Heading 2

'Grading Policy' is Heading 2

check-heading-exists "Weekly Schedule" 2

'Weekly Schedule' is Heading 2

'Midterm Exam' is Heading 3

'Final Project' is Heading 3

No occurrences of 'Prof.' remain

3 occurrences of 'Professor' in document

No occurrences of 'TBA' remain

4 occurrences of 'To Be Announced' in document

'CS101 - Spring 2026' in result.get('header_text', '')

Header contains 'CS101 - Spring 2026'


Open the file /home/user/Documents/sales_report.odt in LibreOffice Writer. The document has a heading 'Monthly Sales Report' in Heading 1 style and contains a table named 'Table1' with 5 rows and 4 columns of sales data. Some values are incorrect and need correction.

Perform the following edits:

1. In Table1, change cell (row 1, column 2) from '150' to '175'. This is the 'Units Sold' value for the 'North' region.
2. In Table1, change cell (row 2, column 2) from '200' to '210'. This is the 'Units Sold' value for the 'South' region.
3. In Table1, change cell (row 3, column 3) from '$45,000' to '$52,000'. This is the 'Revenue' value for the 'East' region.
4. In Table1, change cell (row 4, column 3) from '$38,000' to '$41,500'. This is the 'Revenue' value for the 'West' region.
5. Use Find & Replace (Ctrl+H) to replace ALL occurrences of 'Q3 2025' with 'Q4 2025' in the document text. There are 2 occurrences.
6. Add a page footer with the text 'Revised March 2026' (Format > Page Style > Footer tab, enable footer, then type the text).
7. Save the file (Ctrl+S).

Table1 (1,2) is '175'

Table1 (2,2) is '210'

Table1 (3,3) is '$52,000'

Table1 (4,3) is '$41,500'

Table1 header (0,0) still 'Region' (unchanged)

No occurrences of 'Q3 2025' remain

2 occurrences of 'Q4 2025' in document

'Revised March 2026' in result.get('footer_text', '')

Footer contains 'Revised March 2026'


Create a new document in LibreOffice Writer and build an employee directory.

1. Type 'Employee Directory' as the first paragraph and set it to Heading 1 style.
2. Type 'Last updated: March 2026' as the second paragraph (keep it in Default Paragraph Style).
3. Insert a table with 6 rows and 4 columns (Table > Insert Table, set Name to 'Table1', Rows=6, Columns=4).
4. Fill in the table as follows:
   - Row 0 (header): 'Name', 'Department', 'Extension', 'Email'
   - Row 1: 'Alice Johnson', 'Engineering', '1001', 'alice@company.com'
   - Row 2: 'Bob Smith', 'Marketing', '1002', 'bob@company.com'
   - Row 3: 'Carol Davis', 'Finance', '1003', 'carol@company.com'
   - Row 4: 'David Lee', 'Engineering', '1004', 'david@company.com'
   - Row 5: 'Eva Martinez', 'HR', '1005', 'eva@company.com'
5. Save the file as /home/user/Documents/employee_directory.odt (File > Save As, navigate to /home/user/Documents/, enter filename 'employee_directory', select ODF Text format).

check-heading-exists "Employee Directory" 1

'Employee Directory' exists as Heading 1

check-text-contains "Last updated: March 2026"

Document contains 'Last updated: March 2026'

Table 'Table1' exists

result['tables'][0]['rows'] == 6 and result['tables'][0]['cols'] == 4

Table has 6 rows and 4 columns

Table header (0,0) is 'Name'

Table header (0,1) is 'Department'

Table header (0,2) is 'Extension'

Table header (0,3) is 'Email'

check-table-cell Table1 1 0 "Alice Johnson"

Row 1 col 0 is 'Alice Johnson'

Row 3 col 1 is 'Finance'

check-table-cell Table1 5 3 eva@company.com

Row 5 col 3 is 'eva@company.com'

Row 2 col 2 is '1002'

File saved at /home/user/Documents/employee_directory.odt


Open the file /home/user/Documents/draft_article.odt in LibreOffice Writer. The document is a draft article about AI written with British English spellings that need to be converted to American English. It also has no heading structure.

Perform the following:

1. Use Find & Replace (Ctrl+H) to replace all occurrences of 'colour' with 'color'. There are 5 occurrences (including 'colour-coded' which should become 'color-coded').
2. Use Find & Replace to replace all occurrences of 'analyse' with 'analyze'. There are 3 occurrences.
3. Use Find & Replace to replace all occurrences of 'organisation' with 'organization'. There are 4 occurrences.
4. Set the first paragraph 'The Future of Artificial Intelligence' to Heading 1 style.
5. Set the paragraphs 'Machine Learning Trends', 'Natural Language Processing', and 'Ethical Considerations' to Heading 2 style.
6. Save the file (Ctrl+S).

No occurrences of 'colour' remain

5 occurrences of 'color' in document

No occurrences of 'analyse' remain

3 occurrences of 'analyze' in document

No occurrences of 'organisation' remain

4 occurrences of 'organization' in document

check-heading-exists "The Future of Artificial Intelligence" 1

Title is Heading 1

check-heading-exists "Machine Learning Trends" 2

'Machine Learning Trends' is Heading 2

check-heading-exists "Natural Language Processing" 2

'Natural Language Processing' is Heading 2

check-heading-exists "Ethical Considerations" 2

'Ethical Considerations' is Heading 2


Open the file /home/user/Documents/reference_guide.odt in LibreOffice Writer. The document contains a reference guide with sections but no headings, no page layout changes, and all paragraphs in Default Paragraph Style.

Perform the following formatting and layout tasks:

1. Change the page orientation to Landscape (Format > Page Style > Page tab, set Orientation to Landscape).
2. Set the first paragraph 'API Reference Guide' to Heading 1 style and make it bold.
3. Set the following paragraphs to Heading 2 style: 'Authentication', 'Endpoints', 'Error Codes', and 'Rate Limits'.
4. Add a page header with the text 'API Reference v2.0' (Format > Page Style > Header tab, enable header, then type the text).
5. Add a page footer with the text 'Internal Use Only' (Format > Page Style > Footer tab, enable footer, then type the text).
6. Save the file (Ctrl+S).

result.get('orientation', '') == 'landscape'

Page orientation is landscape

First paragraph has Heading 1 style

First paragraph is bold

'Authentication' is Heading 2

'Endpoints' is Heading 2

'Error Codes' is Heading 2

'Rate Limits' is Heading 2

'API Reference v2.0' in result.get('header_text', '')

Header contains 'API Reference v2.0'

'Internal Use Only' in result.get('footer_text', '')

Footer contains 'Internal Use Only'


Open the file /home/user/Documents/meeting_notes.odt in LibreOffice Writer. It contains raw unformatted meeting minutes with all paragraphs in Default Paragraph Style.

Perform the following formatting and editing tasks:

1. Set the first paragraph 'Project Alpha Meeting Minutes' to Heading 1 style and make it bold.
2. Find the paragraphs that contain exactly the text 'Attendees', 'Agenda', 'Discussion', and 'Action Items' and set each of them to Heading 2 style.
3. Use Find & Replace (Ctrl+H) to replace ALL occurrences of 'TBD' with 'To Be Determined'. There are 5 occurrences in the document.
4. Add a page header with the text 'Project Alpha - Confidential' (via Format > Page Style > Header tab, enable header, then type the text).
5. Add a page footer with the text 'Page' (via Format > Page Style > Footer tab, enable footer, then type the text).
6. Save the file (Ctrl+S).

First paragraph has Heading 1 style

First paragraph is bold

'Attendees' is a Heading 2

'Agenda' is a Heading 2

'Discussion' is a Heading 2

'Action Items' is a Heading 2

No occurrences of 'TBD' remain

Document contains 'To Be Determined'

Exactly 5 occurrences of 'To Be Determined'

'Project Alpha - Confidential' in result.get('header_text', '')

Header contains 'Project Alpha - Confidential'

Footer contains 'Page'


Create a new document in LibreOffice Writer and build a warehouse inventory report with multiple tables.

1. Type 'Warehouse Inventory Report' as the first paragraph and set it to Heading 1 style.
2. Type 'Electronics' as the next paragraph and set it to Heading 2 style.
3. Insert a table with 4 rows and 3 columns (Table > Insert Table, set Name to 'Table1', Rows=4, Columns=3).
4. Fill in the table as follows:
   - Row 0 (header): 'Product', 'Quantity', 'Price'
   - Row 1: 'Laptop', '120', '$899'
   - Row 2: 'Monitor', '85', '$349'
   - Row 3: 'Keyboard', '200', '$79'
5. After the table, type 'Furniture' as the next paragraph and set it to Heading 2 style.
6. Insert a second table with 4 rows and 3 columns (Table > Insert Table, set Name to 'Table2', Rows=4, Columns=3).
7. Fill in the second table as follows:
   - Row 0 (header): 'Product', 'Quantity', 'Price'
   - Row 1: 'Desk', '45', '$450'
   - Row 2: 'Chair', '60', '$299'
   - Row 3: 'Bookshelf', '30', '$189'
8. Save the file as /home/user/Documents/inventory_report.odt (File > Save As, navigate to /home/user/Documents/, enter filename 'inventory_report', select ODF Text format).

check-heading-exists "Warehouse Inventory Report" 1

'Warehouse Inventory Report' is Heading 1

'Electronics' is Heading 2

'Furniture' is Heading 2

Table 'Table1' exists

Table1 (0,0) is 'Product'

Table1 (0,1) is 'Quantity'

Table1 (0,2) is 'Price'

Table1 (1,0) is 'Laptop'

Table1 (2,1) is '85'

Table1 (3,2) is '$79'

Table 'Table2' exists

Table2 (1,0) is 'Desk'

Table2 (2,1) is '60'

Table2 (3,2) is '$189'

File saved at /home/user/Documents/inventory_report.odt


Open the file /home/user/Documents/catalog_data.odt in LibreOffice Writer. The document contains product descriptions with no tables and no formatting (all paragraphs in Default Paragraph Style).

Perform the following formatting and table insertion tasks:

1. Set the first paragraph 'Spring 2026 Product Catalog' to Heading 1 style.
2. Set the paragraphs 'Outdoor Collection' and 'Indoor Collection' to Heading 2 style.
3. Place your cursor after the paragraph under 'Outdoor Collection' that ends with '...perfect for any garden.' (before the blank line above 'Indoor Collection'). Insert a table with 4 rows and 4 columns (Table > Insert Table, set Name to 'Table1', Rows=4, Columns=4).
4. Fill in Table1 as follows:
   - Row 0 (header): 'Item', 'Material', 'Color', 'Price'
   - Row 1: 'Garden Chair', 'Teak', 'Natural', '$149'
   - Row 2: 'Patio Table', 'Aluminum', 'White', '$299'
   - Row 3: 'Sun Umbrella', 'Polyester', 'Blue', '$89'
5. Place your cursor after the paragraph under 'Indoor Collection' that ends with '...designed for modern living.' (before the blank line). Insert a table with 4 rows and 4 columns (Table > Insert Table, set Name to 'Table2', Rows=4, Columns=4).
6. Fill in Table2 as follows:
   - Row 0 (header): 'Item', 'Material', 'Color', 'Price'
   - Row 1: 'Sofa', 'Leather', 'Brown', '$1,200'
   - Row 2: 'Coffee Table', 'Oak', 'Walnut', '$450'
   - Row 3: 'Floor Lamp', 'Steel', 'Black', '$175'
7. Add a page footer with the text 'Catalog - Confidential' (Format > Page Style > Footer tab, enable footer, then type the text).
8. Save the file (Ctrl+S).

check-heading-exists "Spring 2026 Product Catalog" 1

'Spring 2026 Product Catalog' is Heading 1

check-heading-exists "Outdoor Collection" 2

'Outdoor Collection' is Heading 2

check-heading-exists "Indoor Collection" 2

'Indoor Collection' is Heading 2

any(t['name'] == 'Table1' for t in result.get('tables', []))

Table 'Table1' exists in saved file

any(t['name'] == 'Table1' and t.get('rows') == 4 and t.get('cols') == 4 for t in result.get('tables', []))

Table1 has 4 rows and 4 columns

any(t['name'] == 'Table1' and len(t.get('data', [])) > 0 and len(t['data'][0]) > 0 and t['data'][0][0] == 'Item' for t in result.get('tables', []))

Table1 (0,0) is 'Item'

any(t['name'] == 'Table1' and len(t.get('data', [])) > 1 and len(t['data'][1]) > 1 and t['data'][1][1] == 'Teak' for t in result.get('tables', []))

Table1 (1,1) is 'Teak'

any(t['name'] == 'Table1' and len(t.get('data', [])) > 2 and len(t['data'][2]) > 2 and t['data'][2][2] == 'White' for t in result.get('tables', []))

Table1 (2,2) is 'White'

any(t['name'] == 'Table1' and len(t.get('data', [])) > 3 and len(t['data'][3]) > 3 and t['data'][3][3] == '$89' for t in result.get('tables', []))

Table1 (3,3) is '$89'

any(t['name'] == 'Table2' for t in result.get('tables', []))

Table 'Table2' exists in saved file

any(t['name'] == 'Table2' and t.get('rows') == 4 and t.get('cols') == 4 for t in result.get('tables', []))

Table2 has 4 rows and 4 columns

any(t['name'] == 'Table2' and len(t.get('data', [])) > 1 and len(t['data'][1]) > 0 and t['data'][1][0] == 'Sofa' for t in result.get('tables', []))

Table2 (1,0) is 'Sofa'

any(t['name'] == 'Table2' and len(t.get('data', [])) > 2 and len(t['data'][2]) > 2 and t['data'][2][2] == 'Walnut' for t in result.get('tables', []))

Table2 (2,2) is 'Walnut'

any(t['name'] == 'Table2' and len(t.get('data', [])) > 3 and len(t['data'][3]) > 3 and t['data'][3][3] == '$175' for t in result.get('tables', []))

Table2 (3,3) is '$175'

'Catalog - Confidential' in result.get('footer_text', '')

Footer contains 'Catalog - Confidential'


Open the file /home/user/Documents/project_data.odt in LibreOffice Writer. The document contains plain text about a project with no formatting or structure. Add structure, a table, and headers/footers as follows:

1. Set the first paragraph 'Project Phoenix Status Report' to Heading 1 style.
2. Set the paragraphs 'Timeline', 'Budget Summary', and 'Team Assignments' to Heading 2 style.
3. Place your cursor after the paragraph under 'Budget Summary' that starts with 'The overall project budget is $95,000...' and before the blank line above 'Team Assignments'. Insert a table with 5 rows and 3 columns (Table > Insert Table, name it 'Table1').
4. Fill the table with budget data:
   - Row 0 (header): 'Item', 'Budgeted', 'Actual'
   - Row 1: 'Development', '$50,000', '$48,500'
   - Row 2: 'Testing', '$15,000', '$16,200'
   - Row 3: 'Infrastructure', '$20,000', '$19,800'
   - Row 4: 'Training', '$10,000', '$9,500'
5. Add a page header with the text 'Project Phoenix - Status Report' (Format > Page Style > Header tab, enable header, type the text).
6. Add a page footer with the text 'Confidential' (Format > Page Style > Footer tab, enable footer, type the text).
7. Save the file (Ctrl+S).

check-heading-exists "Project Phoenix Status Report" 1

'Project Phoenix Status Report' is Heading 1

'Timeline' is Heading 2

'Budget Summary' is Heading 2

check-heading-exists "Team Assignments" 2

'Team Assignments' is Heading 2

Table 'Table1' exists in saved file

any(t['name'] == 'Table1' and t['rows'] == 5 and t['cols'] == 3 for t in result.get('tables', []))

Table1 has 5 rows and 3 columns

(lambda d: len(d) > 0 and len(d[0]) > 0 and d[0][0] == 'Item')(next((t for t in result.get('tables', []) if t['name'] == 'Table1'), {}).get('data', []))

Table (0,0) is 'Item'

(lambda d: len(d) > 0 and len(d[0]) > 1 and d[0][1] == 'Budgeted')(next((t for t in result.get('tables', []) if t['name'] == 'Table1'), {}).get('data', []))

Table (0,1) is 'Budgeted'

(lambda d: len(d) > 0 and len(d[0]) > 2 and d[0][2] == 'Actual')(next((t for t in result.get('tables', []) if t['name'] == 'Table1'), {}).get('data', []))

Table (0,2) is 'Actual'

(lambda d: len(d) > 1 and len(d[1]) > 0 and d[1][0] == 'Development')(next((t for t in result.get('tables', []) if t['name'] == 'Table1'), {}).get('data', []))

Table (1,0) is 'Development'

(lambda d: len(d) > 2 and len(d[2]) > 1 and d[2][1] == '$15,000')(next((t for t in result.get('tables', []) if t['name'] == 'Table1'), {}).get('data', []))

Table (2,1) is '$15,000'

(lambda d: len(d) > 4 and len(d[4]) > 2 and d[4][2] == '$9,500')(next((t for t in result.get('tables', []) if t['name'] == 'Table1'), {}).get('data', []))

Table (4,2) is '$9,500'

'Project Phoenix - Status Report' in result.get('header_text', '')

Header contains 'Project Phoenix - Status Report'

'Confidential' in result.get('footer_text', '')

Footer contains 'Confidential'


Open the file /home/user/Documents/quarterly_report.odt in LibreOffice Writer. The document contains a quarterly report with all paragraphs in Default Paragraph Style (no headings, no formatting). Restructure and format it as follows:

1. Set the first paragraph 'Q4 2025 Quarterly Report' to Heading 1 style.
2. Set the following paragraphs to Heading 2 style: 'Revenue Overview', 'Expense Analysis', 'Key Achievements', 'Next Steps'.
3. Find the paragraph that reads 'Total Revenue: $2,450,000' and make it bold.
4. Find the paragraph that reads 'Total Expenses: $1,890,000' and make it bold.
5. Place the cursor at the end of the document (Ctrl+End). Insert a new table with 4 rows and 3 columns (Table > Insert Table, name it 'Table1').
6. Fill the table:
   - Row 0: 'Category', 'Amount', 'Change'
   - Row 1: 'Product Sales', '$1,200,000', '+8%'
   - Row 2: 'Services', '$850,000', '+12%'
   - Row 3: 'Licensing', '$400,000', '-3%'
7. Save the file (Ctrl+S).

check-heading-exists "Q4 2025 Quarterly Report" 1

'Q4 2025 Quarterly Report' is Heading 1

check-heading-exists "Revenue Overview" 2

'Revenue Overview' is Heading 2

check-heading-exists "Expense Analysis" 2

'Expense Analysis' is Heading 2

check-heading-exists "Key Achievements" 2

'Key Achievements' is Heading 2

'Next Steps' is Heading 2

'Total Revenue: $2,450,000' in result['text']

Document contains 'Total Revenue: $2,450,000'

'Total Expenses: $1,890,000' in result['text']

Document contains 'Total Expenses: $1,890,000'

any(t['name'] == 'Table1' for t in result.get('tables', []))

Table 'Table1' exists in saved file

any(t['name'] == 'Table1' and t.get('rows') == 4 and t.get('cols') == 3 for t in result.get('tables', []))

Table1 has 4 rows and 3 columns

any(t['name'] == 'Table1' and len(t.get('data', [])) > 0 and len(t['data'][0]) > 0 and t['data'][0][0] == 'Category' for t in result.get('tables', []))

Table1 (0,0) is 'Category'

any(t['name'] == 'Table1' and len(t.get('data', [])) > 1 and len(t['data'][1]) > 1 and t['data'][1][1] == '$1,200,000' for t in result.get('tables', []))

Table1 (1,1) is '$1,200,000'

any(t['name'] == 'Table1' and len(t.get('data', [])) > 3 and len(t['data'][3]) > 2 and t['data'][3][2] == '-3%' for t in result.get('tables', []))

Table1 (3,2) is '-3%'

any(t['name'] == 'Table1' and len(t.get('data', [])) > 2 and len(t['data'][2]) > 0 and t['data'][2][0] == 'Services' for t in result.get('tables', []))

Table1 (2,0) is 'Services'


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Enable Zoom's accessibility features for a low-vision user. Set EnableClosedCaptioning to true, set FontSize to exactly 3 (large), set HighContrast to true, and set AlwaysShowCaptions to true. Save the file in-place at the same path. Do not modify any other keys or sections.

zoomus.conf exists

[Accessibility] section exists

check-config Accessibility EnableClosedCaptioning true

[Accessibility]EnableClosedCaptioning == true

[Accessibility]FontSize == 3

check-config Accessibility HighContrast true

[Accessibility]HighContrast == true

check-config Accessibility AlwaysShowCaptions true

[Accessibility]AlwaysShowCaptions == true

check-config Accessibility ScreenReaderAlerts false

Other [Accessibility] keys untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Switch Zoom's default audio hardware and input levels. Set AudioDevice to exactly USBHeadset (one token, no spaces), set MicrophoneLevel to exactly 65, set SpeakerLevel to exactly 55, and set AutoAdjustMic to false. Save the file in-place at the same path. Do not modify any other keys or sections.

zoomus.conf exists

check-config Audio AudioDevice USBHeadset

[Audio]AudioDevice == USBHeadset

[Audio]MicrophoneLevel == 65

[Audio]SpeakerLevel == 55

[Audio]AutoAdjustMic == false

check-config Audio SuppressBackgroundNoise 2

Other [Audio] keys untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. MicrophoneLevel is currently 50 and SpeakerLevel is currently 50. Update BOTH keys: set MicrophoneLevel to exactly 80 and SpeakerLevel to exactly 90. Save the file in-place at /home/user/.config/zoomus.conf. Do not modify any other keys or sections.

zoomus.conf exists

[Audio]MicrophoneLevel == 80

[Audio]SpeakerLevel == 90

AudioDevice left untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Change the Zoom UI language to German by setting language=de-DE. Save the updated file in-place at /home/user/.config/zoomus.conf. Do not change any other keys.

zoomus.conf exists

UI language is de-DE

[General]language == de-DE


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Currently localRecordingPath=/home/user/Documents/Zoom. Do BOTH of the following: (1) change localRecordingPath of /home/user/.config/zoomus.conf to exactly /home/user/ZoomRecordings. (2) Create the directory /home/user/ZoomRecordings on disk so that it exists. Save the updated config file in-place. Do not change any other config keys.

zoomus.conf exists

Recording path is /home/user/ZoomRecordings

check-config General localRecordingPath /home/user/ZoomRecordings

[General]localRecordingPath matches

Recording directory exists on disk


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Harden the Zoom chat client by updating four keys. Set Theme to dark, EnableSpellCheck to false, ShowLinkPreview to false, and AutoDownloadFiles to false. Save in-place at /home/user/.config/zoomus.conf. Do not modify any other keys or sections.

zoomus.conf exists

[chat.client] section exists

[chat.client]Theme == dark

check-config chat.client EnableSpellCheck false

[chat.client]EnableSpellCheck == false

check-config chat.client ShowLinkPreview false

[chat.client]ShowLinkPreview == false

check-config chat.client AutoDownloadFiles false

[chat.client]AutoDownloadFiles == false

check-config chat.client EnableGiphy true

Unrelated [chat.client]EnableGiphy untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Theme is currently set to light. Change Theme to dark so that Zoom's chat client uses the dark theme. Save the file in-place at /home/user/.config/zoomus.conf. Do not modify any other keys.

zoomus.conf exists

[chat.client]Theme == dark


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Change autoStart to false so Zoom no longer starts automatically with the system. Save the file in-place at /home/user/.config/zoomus.conf. Do not modify any other keys.

zoomus.conf exists

[General]autoStart == false

language left untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Change mirrorMyVideo to false to disable the mirror effect on your video preview. Save the file in-place at /home/user/.config/zoomus.conf. Do not modify any other keys.

zoomus.conf exists

[Video]mirrorMyVideo == false

HDVideo left untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Change TouchUpMyAppearance to false so the 'Touch up my appearance' filter is disabled. Save the file in-place at /home/user/.config/zoomus.conf. Do not modify any other keys.

zoomus.conf exists

check-config Video TouchUpMyAppearance false

[Video]TouchUpMyAppearance == false

mirrorMyVideo left untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Change HDVideo to true to enable HD video. Save the file in-place at /home/user/.config/zoomus.conf. Do not modify any other keys.

zoomus.conf exists

[Video]HDVideo == true

mirrorMyVideo left untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Update ALL THREE keys so the in-meeting UI behaves as follows: set ShowTimer to false (hide the meeting timer), set ConfirmLeaveMeeting to false (skip the leave-meeting confirmation), and set ShowConnectTime to true (show connection time). Save the file in-place at the same path. Do not modify any other keys or sections.

zoomus.conf exists

[General.Meetings] section exists

check-config General.Meetings ShowTimer false

[General.Meetings]ShowTimer == false

check-config General.Meetings ConfirmLeaveMeeting false

[General.Meetings]ConfirmLeaveMeeting == false

check-config General.Meetings ShowConnectTime true

[General.Meetings]ShowConnectTime == true

check-config General.Meetings AlwaysShowMeetingControls false

Other [General.Meetings] keys left untouched

Unrelated [General] keys untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Localize Zoom to Simplified Chinese and relocate local recordings. Do ALL of the following: (1) Change language from en-US to zh-CN. (2) Change localRecordingPath to exactly /home/user/Videos/ZoomCN. (3) Create the directory /home/user/Videos/ZoomCN on disk so that it exists. Save the updated config file in-place at /home/user/.config/zoomus.conf. Do not modify any other config keys.

zoomus.conf exists

UI language is zh-CN

[General]language == zh-CN

Recording path is /home/user/Videos/ZoomCN

check-config General localRecordingPath /home/user/Videos/ZoomCN

[General]localRecordingPath matches

Recording directory exists

autoMuteMic untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Perform a comprehensive Zoom hardening pass that touches six keys across four sections. Update ALL of the following in /home/user/.config/zoomus.conf: (1) autoMuteMic = true, (2) autoTurnOffVideo = true, (3) SuppressBackgroundNoise = 2, (4) HDVideo = true, (5) Theme = dark, (6) ConfirmLeaveMeeting = true. Save the file in-place at the same path. Do not modify any other keys.

zoomus.conf exists

[General]autoMuteMic == true

check-config General autoTurnOffVideo true

[General]autoTurnOffVideo == true

[Audio]SuppressBackgroundNoise == 2

[Video]HDVideo == true

[chat.client]Theme == dark

check-config General.Meetings ConfirmLeaveMeeting true

[General.Meetings]ConfirmLeaveMeeting == true

Unrelated keys untouched

Audio level untouched


A baseline Zoom configuration file exists at /home/user/.config/zoomus.conf. Change autoMuteMic to true so that Zoom will automatically mute the microphone whenever the user joins a meeting. Save the file in-place at /home/user/.config/zoomus.conf — do not write to any other path. Do not change any other keys.

zoomus.conf exists

[General]autoMuteMic is true

[General]language was not changed


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Lock down Zoom's auto-start, auto-answer, and telemetry surface. Set autoStart to false, set autoAnswer to false, set EnableCrashReport to false, and set SendFeedback to false. Save the file in-place at the same path. Do not modify any other keys or sections.

zoomus.conf exists

[General]autoStart == false

[General]autoAnswer == false

check-config General EnableCrashReport false

[General]EnableCrashReport == false

[General]SendFeedback == false

Other [General] keys untouched

check-config General HowlingDetection true

HowlingDetection untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Configure a complete local recording workflow that spans two sections and the filesystem. Do ALL of the following: (1) Change localRecordingPath to exactly /home/user/Recordings/Zoom. (2) Set RecordToNewFolder to true, AddTimestampToRecording to true, and AutoRecording to true. (3) Create the directory /home/user/Recordings/Zoom on disk. Save the updated config file in-place at /home/user/.config/zoomus.conf. Do not modify any other config keys.

zoomus.conf exists

[Recording] section exists

check-config General localRecordingPath /home/user/Recordings/Zoom

[General]localRecordingPath matches

Recording path resolves to /home/user/Recordings/Zoom

check-config Recording RecordToNewFolder true

[Recording]RecordToNewFolder == true

check-config Recording AddTimestampToRecording true

[Recording]AddTimestampToRecording == true

check-config Recording AutoRecording true

[Recording]AutoRecording == true

check-config Recording RecordingAudioOnly false

Other [Recording] keys untouched

Recording directory exists on disk


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Change autoTurnOffVideo to true so Zoom will turn the camera off whenever a meeting is joined. Save the updated file in place at /home/user/.config/zoomus.conf. Do not change any other keys.

zoomus.conf exists

[General]autoTurnOffVideo is true

autoMuteMic left untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Update FOUR keys: set HDVideo to true, set TouchUpMyAppearance to false, set mirrorMyVideo to false, and set AdjustForLowLight to true. Save the file in-place at the same path. Do not modify any other keys or sections.

zoomus.conf exists

[Video]HDVideo == true

[Video]TouchUpMyAppearance == false

[Video]mirrorMyVideo == false

check-config Video AdjustForLowLight true

[Video]AdjustForLowLight == true

Other [Video] keys untouched

check-config Video VideoDevice IntegratedWebcam

VideoDevice untouched


A baseline Zoom config file exists at /home/user/.config/zoomus.conf. Configure Zoom's virtual background feature so the user's background is blurred and hardware-accelerated. Update keys across two sections of /home/user/.config/zoomus.conf: Set EnableVirtualBackground to true, set VirtualBackgroundType to exactly blur, and set BlurStrength to exactly 50. Set EnableHWAccel to true. Save it in-place at the same path. Do not modify any other keys or sections.

zoomus.conf exists

check-config Video EnableVirtualBackground true

[Video]EnableVirtualBackground == true

check-config Video VirtualBackgroundType blur

[Video]VirtualBackgroundType == blur

[Video]BlurStrength == 50

[General]EnableHWAccel == true

Other [Video] keys untouched

check-config Video TouchUpMyAppearance true

TouchUpMyAppearance untouched


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Locate the item titled 'A Survey of RL Methods' (currently has a single author, Sutton) and select it. Add a SECOND author with first name exactly 'Andrew' and last name exactly 'Barto'. Make sure the existing Sutton author remains. After saving, the item must have exactly 2 creators total: Sutton and Barto. Leave Zotero running.

check-item-creator 'Survey of RL Methods' Barto

Survey has author Barto

check-item-creator 'Survey of RL Methods' Sutton

Survey still has author Sutton

check-item-creator-count 'Survey of RL Methods' 2

Survey has exactly 2 creators


Zotero is installed on this machine and a pre-seeded library has been placed at /home/user/Zotero/zotero.sqlite. Launch Zotero (for example by running `zotero` from a terminal, or via the Applications menu) and wait for the library to load. In the left-hand collections pane, under 'My Library', create a new top-level collection named exactly 'Literature Review' (no quotes, exactly that spelling and capitalization). Do not create it as a subcollection of any existing collection. Leave Zotero running after the collection has been created so the new collection is saved.

zotero.sqlite exists on disk

Collection 'Literature Review' exists

Original 'AI Research' collection still present


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. The library contains an item titled 'A Survey of RL Methods' which is currently only inside the 'Reinforcement Learning' collection. Add this item to the existing 'AI Research' collection as well — a single Zotero item can belong to multiple collections. You can do this by dragging the item from the middle pane onto the 'AI Research' collection in the left pane, or by right-clicking the item and using 'Add to Collection'. Leave the item in 'Reinforcement Learning' also. Leave Zotero running.

zotero.sqlite exists

check-collection-contains 'AI Research' 'Survey of RL Methods'

'AI Research' contains the survey item

check-collection-contains 'Reinforcement Learning' 'Survey of RL Methods'

Survey item still present in 'Reinforcement Learning'


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Find the book item titled 'Deep Learning' (by Goodfellow and Bengio) in the middle pane and select it. Add a child note to this item with the following text: 'foundational textbook on deep learning'. Save the note. Leave Zotero running so the note is persisted.

zotero.sqlite exists

Deep Learning item has a child note

check-note-contains 'foundational textbook on deep learning'

A note contains the required phrase


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Perform two tagging operations: (1) Create a new tag named exactly 'transformer-arch' (lowercase, with hyphen) and add it to BOTH 'Attention Is All You Need' and 'BERT: Pre-training of Deep Bidirectional Transformers'. After adding it on the first item it will appear in autocomplete for the second. (2) Add the existing tag 'important' to the BERT item (it currently has 'nlp' but not 'important'). Use the Tags tab on the right-hand pane for each item. Leave Zotero running.

Tag 'transformer-arch' exists

check-item-tag 'Attention Is All You Need' transformer-arch

Attention has transformer-arch tag

check-item-tag 'BERT: Pre-training' transformer-arch

BERT has transformer-arch tag

check-item-tag 'BERT: Pre-training' important

BERT has important tag


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Perform two actions: (1) Create a new top-level collection under 'My Library' named exactly 'Key Papers'. (2) Add the existing item titled 'Attention Is All You Need' to the 'Key Papers' collection (you can drag it from the main item list onto the new collection). The item should continue to belong to its existing collections as well. Leave Zotero running so the changes are saved.

zotero.sqlite exists

'Key Papers' collection exists

check-collection-contains 'Key Papers' 'Attention Is All You Need'

'Key Papers' contains the Attention paper


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Locate the item titled 'A Survey of RL Methods' in the middle pane and click it. Set the 'DOI' field to exactly this value: 10.1234/rl-survey-2020. Do not wrap it in quotes or add anything else. Press Enter / click away so Zotero saves the new DOI. Leave Zotero running so the edit persists.

zotero.sqlite exists

check-item-field 'Survey of RL Methods' DOI 10.1234/rl-survey-2020

Survey item DOI matches expected


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Locate the item titled 'BERT: Pre-training of Deep Bidirectional Transformers' in the middle pane and click it so its metadata appears. The item currently has a publicationTitle of 'NAACL' and a DOI but its Pages, Volume, and Publisher fields are empty. Set the following fields to the exact values shown: Pages = 4171-4186, Volume = 1, Publisher = Association for Computational Linguistics. Make sure each value is saved. Leave Zotero running so the edits persist.

check-item-field 'BERT: Pre-training' pages 4171-4186

BERT pages = 4171-4186

check-item-field 'BERT: Pre-training' volume 1

BERT volume = 1

check-item-field 'BERT: Pre-training' publisher 'Association for Computational Linguistics'

BERT publisher set


Zotero is installed and a pre-seeded library is available at /home/user/Zotero/zotero.sqlite. Open Zotero and wait for the library to load. Using the existing library contents, export the references contained in the collection 'Reinforcement Learning' to a BibTeX file. Save the result to: /home/user/Documents/rl_export.bib. The exported file must exist, contain exactly one BibTeX entry, and that entry's title must contain 'Survey of RL Methods'. Leave Zotero open after completing the task.

rl_export.bib exists on disk

BibTeX file has exactly 1 entry

check-bibtex-title /home/user/Documents/rl_export.bib 'Survey of RL Methods'

BibTeX file contains the survey paper title


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. This task has TWO parts that must both be completed. (1) Locate the journal article 'A Survey of RL Methods' and edit it: set its DOI field to exactly '10.1234/rl-survey-2020' and set its Pages field to exactly '1-42'. Make sure the edits are saved. (2) Then export the entire 'My Library' (all 4 items) to BibTeX format and save the file to exactly /home/user/Documents/full_library.bib. After both parts the .bib file must exist with exactly 4 entries including 'Survey of RL Methods', and the survey item must have the new DOI and pages values in the library. Leave Zotero running.

Survey DOI updated

check-item-field 'Survey of RL Methods' pages 1-42

Survey pages updated

BibTeX export file exists

BibTeX has 4 entries

check-bibtex-title /home/user/Documents/full_library.bib 'Survey of RL Methods'

BibTeX contains survey title


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. A PDF is provided at /home/user/Documents/deep_learning.pdf. Launch Zotero. First attach the PDF /home/user/Documents/deep_learning.pdf to the existing item 'Deep Learning'. Then add a child note to the 'Deep Learning' item whose body contains EXACTLY the phrases 'Chapter 1: Introduction' and 'key definitions'. Save by clicking elsewhere. After saving, 'Deep Learning' must have at least one child PDF attachment AND at least one child note mentioning both phrases. Leave Zotero running.

Deep Learning has an attachment

Deep Learning has a child note

check-note-contains 'Chapter 1: Introduction'

A note contains 'Chapter 1: Introduction'

A note contains 'key definitions'


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Find every item whose 'Item Type' is exactly 'Book'. Once the results appear, select all results and export them as BibTeX to the exact path /home/user/Documents/books_only.bib. After export the file must exist, contain exactly 1 BibTeX entry, and that entry's title must contain 'Deep Learning'. Leave Zotero running.

Export file exists

Exactly one BibTeX entry

check-bibtex-title /home/user/Documents/books_only.bib 'Deep Learning'

Entry title contains 'Deep Learning'


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. A PDF file is provided at /home/user/Documents/attention_paper.pdf. Launch Zotero and wait for the library to load. Locate the existing item titled 'Attention Is All You Need'. Attach the PDF /home/user/Documents/attention_paper.pdf to that item as a child attachment. After attaching, the item must have at least one PDF attachment child. Leave Zotero running.

check-item-attachment 'Attention Is All You Need'

Attention item has an attachment

check-item-exists 'Attention Is All You Need'

Attention item still exists


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Two companion bibliography files are provided: /home/user/Documents/bibliography.csv (human-readable source) and /home/user/Documents/bibliography.ris (the Zotero-importable conversion, 3 entries). Launch Zotero. Create a new top-level collection named exactly 'Imported Bibliography'. Then import /home/user/Documents/bibliography.ris into Zotero, ensuring the imported items end up inside the 'Imported Bibliography' collection. After completion the 'Imported Bibliography' collection must exist and contain at least 3 items. Leave Zotero running.

Collection exists

check-collection-count 'Imported Bibliography' 3

Collection has at least 3 items

check-item-exists 'Efficient Estimation of Word Representations'

Mikolov item imported

GloVe item imported


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. A BibTeX file with two entries is at /home/user/Documents/citations.bib. Launch Zotero. Import /home/user/Documents/citations.bib into the library. After import, both entries must appear in the library as new items: one titled 'LLaMA: Open and Efficient Foundation Language Models' and one titled 'PaLM: Scaling Language Modeling with Pathways'. Leave Zotero running.

LLaMA item imported

PaLM item imported


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. A single-record RIS file is at /home/user/Documents/new_papers.ris. Launch Zotero. Import the RIS file into the library. After import a new item titled 'GPT-4 Technical Report' (type journalArticle) must exist in the library and the total item count must be at least 5. Leave Zotero running.

check-item-exists 'GPT-4 Technical Report'

Imported GPT-4 item exists

check-item-type 'GPT-4 Technical Report' journalArticle

Type is journalArticle


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Three PDF files are provided under /home/user/Documents/: attention.pdf, bert.pdf, deep_learning.pdf. Launch Zotero. Attach each PDF to the matching existing item as a child attachment (Attach Stored Copy of File):
  - attention.pdf -> 'Attention Is All You Need'
  - bert.pdf -> 'BERT: Pre-training of Deep Bidirectional Transformers'
  - deep_learning.pdf -> 'Deep Learning'
After completion, each of the three items must have at least one child PDF attachment. Leave Zotero running.

Attention has an attachment

BERT has an attachment

Deep Learning has an attachment


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. A PDF is provided at /home/user/Documents/bert_paper.pdf. Launch Zotero. Do BOTH of the following on the existing item 'BERT: Pre-training of Deep Bidirectional Transformers':
  1. Attach the PDF /home/user/Documents/bert_paper.pdf to the BERT item as a child attachment.
  2. Add the tag 'important' to the BERT item.
After saving, the BERT item must have at least one PDF attachment child AND be tagged with 'important'. Leave Zotero running.

BERT has an attachment

BERT has 'important' tag


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. An RIS file with 2 entries is at /home/user/Documents/nlp_papers.ris (ELECTRA and RoBERTa). Launch Zotero. Create a new top-level collection named exactly 'NLP Imports'. Then import /home/user/Documents/nlp_papers.ris into Zotero, ensuring BOTH imported items are placed in the 'NLP Imports' collection. After completion the 'NLP Imports' collection must exist and contain at least 2 items, and both 'ELECTRA' and 'RoBERTa' items must exist in the library. Leave Zotero running.

Collection exists

Collection has at least 2 items

ELECTRA imported

RoBERTa imported


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. The item 'BERT: Pre-training of Deep Bidirectional Transformers' currently belongs to the 'Transformers' subcollection (under AI Research). Perform a MOVE: (1) Create a new top-level collection named exactly 'Language Models' under My Library. (2) Add the BERT item to the new 'Language Models' collection. (3) Remove BERT from the 'Transformers' collection. After all three steps, BERT must be in 'Language Models' and must NOT be in 'Transformers'. Leave Zotero running.

'Language Models' collection exists

check-collection-contains 'Language Models' BERT

Language Models contains BERT

Transformers no longer contains BERT

BERT item still exists in library


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. Locate the item titled 'A Survey of RL Methods' in the middle pane and move it to Trash. Do NOT empty the trash. After the action, the item should still exist in Zotero's Trash folder but should no longer be counted among the 4 regular library items - only 3 regular items should remain. Leave Zotero running.

zotero.sqlite exists

check-item-in-trash 'Survey of RL Methods'

Survey item is in trash

Non-deleted item count is 3


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. In the collections pane there is an existing top-level collection named 'Reinforcement Learning' which contains the item 'A Survey of RL Methods'. Change the collection name to exactly 'RL Papers'. After renaming, the collection 'Reinforcement Learning' must NOT exist any more, the collection 'RL Papers' must exist, and the survey item must still belong to 'RL Papers'. Leave Zotero running.

Renamed collection exists

Old collection name removed

check-collection-contains 'RL Papers' 'Survey of RL Methods'

Survey item is in renamed collection


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. The library currently has 4 active items in My Library plus one item in the Trash titled 'Generative Adversarial Networks'. Launch Zotero, click the 'Trash' entry in the left collections pane, locate the item 'Generative Adversarial Networks', and restore it to the library. After the restore the GAN item must NOT be in the trash, must exist among regular items, and the regular (non-trashed) item count must equal 5. Leave Zotero running.

check-item-in-trash 'Generative Adversarial Networks'

GAN item no longer in trash

check-item-exists 'Generative Adversarial Networks'

GAN item exists in regular library

Regular item count is 5


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. In the collections pane under 'My Library' there is an existing collection named 'AI Research'. Create a subcollection named exactly 'Neural Networks' as a direct child of 'AI Research', not a sibling. Leave Zotero running so the new subcollection is saved.

zotero.sqlite exists

'Neural Networks' collection exists

check-subcollection 'AI Research' 'Neural Networks'

'Neural Networks' is a subcollection of 'AI Research'


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. The library already has a tag named 'important' (used on one other item). Find the item whose title starts with 'BERT' (full title: 'BERT: Pre-training of Deep Bidirectional Transformers') and add the existing 'important' tag to it via the Tags tab on the right-hand pane. You can pick the tag from autocomplete so no new tag is created. Leave Zotero running.

zotero.sqlite exists

check-item-tag 'BERT: Pre-training' important

BERT item has 'important' tag


Zotero is installed and a pre-seeded library is at /home/user/Zotero/zotero.sqlite. Launch Zotero. In the library you will find an item titled 'Attention Is All You Need'. Open that item (click it) and add a new tag named exactly 'to-read' (lowercase, with a hyphen) via the Tags tab on the right. The tag does not exist yet — creating it on the item will also create it in the library. Leave Zotero running so the tag is saved.

zotero.sqlite exists on disk

Tag 'to-read' exists

check-item-tag 'Attention Is All You Need' to-read

Attention Is All You Need item has tag 'to-read'