Cartography & print layouts
Style layers and compose map layouts to a cartographic spec.
20 project-authored proposals · taxonomy v1.1 · 0 new benchmark runs. Verifiers and partial-credit rules below are designs, not executed results.
- Typical applications
- QGIS Layout Manager · ArcGIS Pro Layout
- Class GUI-need label
G2· GUI-essential
Task proposals · 20
Expand to inspect the complete original wording and proposed checks. Original proposal text remains English in both interfaces.
R07.06.01.04-T01 Compose an A4 population-density choropleth with legend, scale bar and north arrow
Original instruction
In QGIS 3.40 with fixtures/counties.gpkg (field pop_density, per km²) style counties as a 5-class Natural Breaks (Jenks) graduated map with the YlOrRd ramp, then create print layout 'Density_A4' (A4 portrait): map, legend titled 'People per km²', metric scale bar, north arrow, title and source text. Export out/density.pdf at 300 dpi.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickdrag· Drag & dropvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
Parse .qgz: graduated renderer, 5 classes, jenks mode, YlOrRd colors; layout items present on page within margins; PDF 210×297 mm, 300 dpi raster check; legend text via pdftotext; scale bar length vs map scale consistent ±2%. Python console disabled.
Proposed partial credit
35% symbology; 40% layout items; 25% export spec
R07.06.01.04-T02 Set rule-based labels with halos that appear only at larger scales
Original instruction
In fixtures/region.qgz label places by rule: cities (pop ≥100k) always, 11 pt bold; towns 9 pt only at scales larger than 1:50,000; villages 8 pt italic only larger than 1:25,000. All labels have a 1 mm white halo and avoid overlapping roads. Save the project and export the layout at 1:40,000 to out/labels_40k.png.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Project XML: rule-based labeling with 3 rules, filters and scale ranges exact; buffer 1 mm white; obstacle setting on roads; PNG OCR at 1:40k shows city+town names and no village names. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
40% rules/filters; 25% scale ranges; 15% halo; 20% rendered check
R07.06.01.04-T03 Add an inset locator map whose extent box tracks the main map
Original instruction
In layout 'Parks_A3' of fixtures/parks.qgz add an inset map (top right, 60×60 mm, frame 0.5 mm) showing the whole state with a red extent indicator (overview) linked to the main map, and lock its layers to state_outline only. Move the main map extent to the bookmark 'North Basin' and export out/parks.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
drag· Drag & dropclick· Point & clickgeom· Precise geometry- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Layout XML: second map item size/position ±1 mm with overview linked to main map; locked layers = state_outline; main map extent equals bookmark; PDF render shows red rectangle within inset at correct location (pixel check). QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
30% inset placement; 35% overview linked; 15% locked layers; 20% extent & export
R07.06.01.04-T04 Build a 24-page district atlas with dynamic titles and page numbers
Original instruction
In fixtures/districts.qgz create layout 'District_Atlas' with Atlas enabled on districts (sorted by name), map controlled by atlas with 10% margin, title expression showing district name and population, page number 'Page x of 24', and a hidden-coverage style. Export a single PDF out/atlas.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
PDF has 24 pages ordered by name; OCR'd titles match names/populations; each page map extent contains its district bbox with ~10% margin (from georeferenced PDF); page numbering correct; layout XML atlas settings. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
25% atlas config; 30% extents; 25% dynamic text; 20% export
R07.06.01.04-T05 Create a grid-index map series in ArcGIS Pro with adjacent-sheet labels
Original instruction
In ArcGIS Pro 3.4 open fixtures/utility.aprx. Create grid index features (2 km cells, 16 pages) over ServiceArea, set up a spatial map series on layout 'Atlas_A3' with page name/number dynamic text, an index locator map highlighting the current page, and adjacent-sheet labels on all four sides. Export the series to out/series.pdf.
- Platforms
win· Windows- Applications
- ArcGIS Pro Layout
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsdrag· Drag & drop- Work product
WP03· Visual layout- Conditions
licensed· Licensed pro app- Proposed difficulty
- 4 / 5
Proposed verifier
Grid index FC: 16 cells 2 km; .aprx map series settings; PDF 16 pages; page text matches index names; adjacent labels correct for 10 sampled pages (OCR); locator highlights current cell. ArcGIS Pro Python window, Notebooks and arcpy.mp are disabled for the agent; .aprx and exports written by any process other than ArcGIS Pro are flagged by a file audit log.
Proposed partial credit
20% grid index; 25% map series; 25% dynamic text & locator; 30% adjacent labels/export
R07.06.01.04-T06 Design a 3×3 bivariate choropleth with a custom square legend
Original instruction
Map income vs. broadband access for tracts in fixtures/tracts.gpkg as a 3×3 bivariate choropleth (tertiles of each variable) using the 9 colors in docs/bivariate_palette.json. Build a rotated square legend with axis labels in the QGIS layout and export out/bivariate.pdf (A4 landscape).
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickgeom· Precise geometryvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Each tract's rendered color (sampled from PDF raster at centroids) equals palette class from grader tertiles (ΔE2000 ≤3) for ≥97% of tracts; legend is 3×3 grid rotated 45° with both axis labels (vector parse). QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
25% tertile classification; 40% color accuracy; 25% legend; 10% export
R07.06.01.04-T07 Style a topographic map with hillshade blending and index contour labels
Original instruction
In QGIS style input/dem_10m.tif with an elevation color ramp, add a hillshade (azimuth 315, altitude 45) blended Multiply at 60% opacity, draw 10 m contours with every 50 m index contour thicker and labelled along the line (no upside-down labels), and export an A3 layout at 1:25,000 to out/topo.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickvis· Visual judgmenttype· Text & forms- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Project XML: hillshade renderer params, blend mode multiply, opacity 0.6; contour layer rule for index (elev%50==0) wider; curved labels on index only; PDF map scale 1:25,000 ±0.5%; label orientation check on sample. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
25% DEM + hillshade; 30% contour rules; 25% labels; 20% scale/export
R07.06.01.04-T08 Apply an agency style guide and export a layered GeoPDF from ArcGIS Pro
Original instruction
Restyle layout 'Evac_Routes' in fixtures/evac.aprx per docs/agency_style.pdf (route colors as given CMYK, fonts Source Sans 3, title block format, logo placement) and export out/evac_geo.pdf with layers and attributes and embedded georeference (GeoPDF), 300 dpi, CMYK.
- Platforms
win· Windows- Applications
- ArcGIS Pro Layout
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP03· Visual layout- Conditions
licensed· Licensed pro app- Proposed difficulty
- 3 / 5
Proposed verifier
PDF: color space CMYK; route stroke colors equal spec values ±1%; fonts embedded list includes Source Sans 3; OCG layer list matches map layers; GeoPDF measure dictionary present; logo bbox within spec ±2 mm. ArcGIS Pro Python window, Notebooks and arcpy.mp are disabled for the agent; .aprx and exports written by any process other than ArcGIS Pro are flagged by a file audit log.
Proposed partial credit
35% colors; 20% fonts; 20% layers/attributes; 25% georeference & layout spec
R07.06.01.04-T09 Place curved river labels without collisions using placement priorities
Original instruction
In fixtures/basin.qgz label rivers (curved, along line, repeat every 80 mm, 9 pt italic blue) with higher priority for order ≥4 streams, lakes inside polygons (centroid, wrap at 15 chars), and towns with offset from point. Ensure no label overlaps any other label or town symbol. Export out/basin.png at 1:100,000.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
G2· GUI-essential- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Project XML: placement modes and priorities; label results exported via the label engine (grader opens project and collects label positions): 0 overlaps; ≥95% of order≥4 rivers labelled; lakes labelled inside. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
30% river labels; 20% lakes; 15% towns; 35% no collisions
R07.06.01.04-T10 Make a proportional-symbol map with a nested circle legend
Original instruction
Map 2025 visitors per museum (fixtures/museums.gpkg) as proportional circles with Flannery compensation, max 20 mm diameter, semi-transparent fill and a nested legend showing 10k, 100k and 1M. Sort so small circles draw on top. Export A4 layout out/museums.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickvis· Visual judgmenttype· Text & forms- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Project: size assistant with Flannery method, max 20 mm; symbol levels/order by size descending; legend data-defined size collapsed (nested) with 3 classes; PDF circle diameters within 2% of expected for 10 sample museums. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
35% scaling method; 20% draw order; 30% nested legend; 15% export
R07.06.01.04-T11 Add a UTM grid with 1 km annotations and geographic ticks to a layout frame
Original instruction
In layout 'Survey_A2' of fixtures/survey.qgz add a map grid in EPSG:32617 every 1,000 m with coordinate annotations outside the frame (km, no decimals) and a second grid in EPSG:4326 showing 1' ticks only on the frame with DMS annotations. Export out/survey_grid.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Layout XML: two grids with CRS, intervals, styles (solid lines vs frame ticks), annotation formats; PDF text annotations match expected values at sampled positions ±0.5 mm. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
35% UTM grid; 35% geographic ticks; 30% annotations correct
R07.06.01.04-T12 Add dynamic text and an attribute table frame to an ArcGIS Pro layout
Original instruction
In fixtures/parcels.aprx layout 'Parcel_Report' add dynamic text for map scale, spatial reference and current date (yyyy-MM-dd), and a table frame listing parcels visible in the map frame (APN, Owner, Area_ac sorted desc), max 25 rows with 'continued' overflow. Export out/parcel_report.pdf.
- Platforms
win· Windows- Applications
- ArcGIS Pro Layout
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsdrag· Drag & drop- Work product
WP03· Visual layout- Conditions
licensed· Licensed pro app- Proposed difficulty
- 3 / 5
Proposed verifier
PDF text: scale and SR strings match map; date format; table rows equal parcels in map extent sorted desc (first 25) via pdftotext; aprx has table frame bound to map frame filter. ArcGIS Pro Python window, Notebooks and arcpy.mp are disabled for the agent; .aprx and exports written by any process other than ArcGIS Pro are flagged by a file audit log.
Proposed partial credit
35% dynamic text; 45% table content; 20% export
R07.06.01.04-T13 Restyle a land-use map so all classes are distinguishable under color-vision deficiency
Original instruction
The 9-class land-use map in fixtures/landuse.qgz uses red/green pairs. Choose new fills so every pair of classes differs by ΔE2000 ≥12 under simulated deuteranopia and protanopia (Machado 2009) while keeping water blue and forest a green hue. Save project and export out/landuse_cvd.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Read fills from project XML: pairwise ΔE2000 under both simulations ≥12; water hue 190-250°, forest hue 80-160°; PDF colors equal project colors. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
50% CVD separations (scaled); 20% hue constraints; 30% applied & exported
R07.06.01.04-T14 Apply exact brand colors, widths and fonts from a style sheet to a map
Original instruction
Style the transit map fixtures/transit.qgz per docs/brand_map_style.pdf: line colors (hex per route), 1.2 mm route width with 0.3 mm white casing, stations as 2 mm white circles with 0.4 mm black stroke, labels Inter 8 pt. Export out/transit.png at 300 dpi.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & forms- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
Project XML symbol layers equal spec (colors exact hex, widths ±0.01 mm, casing as second layer); font family Inter size 8; PNG dpi 300. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
40% route symbology; 30% stations; 20% labels; 10% export
R07.06.01.04-T15 Control pair of T01: build the density layout with a PyQGIS script
Original instruction
Control pair of T01. With PyQGIS only (qgis_process or standalone script), produce the same 5-class Jenks YlOrRd density layout with legend, scale bar, north arrow and title, and export out/density.pdf at 300 dpi.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- PyQGIS
- Interfaces
api· API/SDK- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
Same checks as T01. Compared with T01 for GUI vs script gap.
Proposed partial credit
35% symbology; 40% layout items; 25% export
R07.06.01.04-T16 Lay out three time-slice maps with identical classes and a shared legend
Original instruction
In ArcGIS Pro build layout 'Impervious_2005_2025' (tabloid landscape) with three map frames (2005, 2015, 2025 impervious % from fixtures/imperv.gdb) using identical manual class breaks 0/10/25/50/75/100 and colors, identical scale and extent, one shared legend, captions, and a footnote. Export out/imperv.pdf.
- Platforms
win· Windows- Applications
- ArcGIS Pro Layout
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickdrag· Drag & dropgeom· Precise geometry- Work product
WP03· Visual layout- Conditions
licensed· Licensed pro app- Proposed difficulty
- 4 / 5
Proposed verifier
aprx: 3 maps with identical renderers and breaks; map frames same scale/extent and aligned top edges ±1 mm; one legend; PDF sampled colors per class ΔE ≤3. ArcGIS Pro Python window, Notebooks and arcpy.mp are disabled for the agent; .aprx and exports written by any process other than ArcGIS Pro are flagged by a file audit log.
Proposed partial credit
35% consistent classes; 30% frame alignment/scale; 20% shared legend; 15% export
R07.06.01.04-T17 Make a dot-density map with one dot per 50 people by group
Original instruction
Create a dot-density map of fixtures/blocks.gpkg (fields pop_a, pop_b, pop_c) with one 0.4 mm dot per 50 people per group in three colors, random placement seeded (seed=7) within blocks, drawing order randomized across groups. Add legend '1 dot = 50 people' and export out/dots.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP03· Visual layout- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Project: random-marker/dot-density fill or generated point layer with per-block counts round(pop/50) exact per group; seed honored; legend text; PDF dot counts within 2% (vector parse). QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
45% dot counts per block; 20% colors/order; 15% legend; 20% export
R07.06.01.04-T18 Design a tourist map with SVG icons, callouts and conflict-free labels
Original instruction
Produce an A2 tourist map of the old town (fixtures/oldtown.qgz): POIs symbolized with the SVG set in input/icons/ by category, numbered callouts with leader lines for the 18 crowded POIs in the centre, a numbered index panel, walking-route styling, and no label/icon overlaps. Export out/tourist_A2.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
G2· GUI-essential- Interaction primitives
drag· Drag & dropgeom· Precise geometryvis· Visual judgment- Work product
WP03· Visual layout- Conditions
long· Long-horizon- Proposed difficulty
- 5 / 5
Proposed verifier
PDF vector parse: each POI category uses its SVG; 18 callouts with leaders ending within 1 mm of POI; index entries match numbers; 0 overlaps among labels/icons; VLM rubric (legibility, hierarchy) used only as 10% tie-breaker. QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
20% icons; 30% callouts/leaders; 20% index; 30% no overlaps & rubric
R07.06.01.04-T19 Compose an A0 research poster layout with maps, chart and size limit
Original instruction
In ArcGIS Pro build an A0 portrait poster from fixtures/heat_study.aprx: 4 map frames (city overview, 3 neighborhood zooms with extent indicators), a chart (temperature vs canopy), text blocks from docs/poster_text.docx, logos, and consistent 30 mm margins. Export out/poster.pdf at 150 dpi under 20 MB.
- Platforms
win· Windows- Applications
- ArcGIS Pro Layout · Word
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
drag· Drag & dropgeom· Precise geometrymulti· Cross-app- Work product
WP03· Visual layout- Conditions
licensed· Licensed pro appmultiapp· Multi-applong· Long-horizon- Proposed difficulty
- 5 / 5
Proposed verifier
PDF 841×1189 mm; size ≤20 MB; elements within 30 mm margins; 3 extent indicators match zoom frames; chart present with correct axis fields; text matches docx (diff ≤2%). ArcGIS Pro Python window, Notebooks and arcpy.mp are disabled for the agent; .aprx and exports written by any process other than ArcGIS Pro are flagged by a file audit log.
Proposed partial credit
25% page/margins; 30% map frames & indicators; 30% chart & text; 15% size limit
R07.06.01.04-T20 Repair a broken print layout: fonts, scale, legend sync and export settings
Original instruction
fixtures/broken_layout.qgz exports wrong: missing font (substituted), map at 1:23,412 instead of 1:25,000, legend shows layers not in the map and misses two that are, scale bar in miles, raster export instead of vector. Fix all five issues and export out/fixed.pdf.
- Platforms
mac· macOSwin· Windowslin· Linux- Applications
- QGIS Layout Manager
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP03· Visual layout- Conditions
hidden· Hidden/stale state- Proposed difficulty
- 4 / 5
Proposed verifier
PDF fonts embedded (target family, no substitution); map scale 1:25,000 exact; legend items equal visible layers; scale bar units km; PDF contains vector paths (not single image). QGIS Python console and qgis_process are disabled for the agent; the project and exports must be written by QGIS, as writes by other processes are flagged by a file audit log.
Proposed partial credit
20% fonts embedded; 20% map scale; 20% legend sync; 40% km scale bar & vector PDF (20 pts each)
Mapped research references
Existing benchmark-to-class links from the research catalog. They are not record-level annotations, executions or product endorsements.