Skip to content

The worked example fails its own validator, and CI cannot see it #14

Description

@jaakla

examples/tartu-development is advertised in the README as "a fully-worked reproducible project" and is the reference artifact the skill points agents at. It currently fails two checks.

$ openmapstack verify examples/tartu-development
FAIL validation.run_record_matches: inventory hash mismatch: pipeline.py
FAIL qgis.groups_match_manifest: manifest layer groups absent from the .qgz layer tree:
     ['candidates_tier1', 'candidates_tier2', 'candidates_highway', 'catchments',
      'education_pois', 'user_overrides', 'infrastructure']
     (found: ['Analysis Results', 'Educational Accessibility',
              'Transportation & Overrides', 'Basemaps'])
FAILED (38 passed, 0 warnings, 2 not testable, 2 failed)

1. Stale run record

pipeline.py was changed after the last recorded run, so the run record's input inventory hash no longer matches the file. openmapstack validate reports this too:

FAIL runs.latest [runs/run-20260825-202839.json]: run input hash mismatch: pipeline.py;
     inputs_hash does not match the real canonical file-set hash in ['manifest', 'report', 'run']

Why CI never caught it: .github/workflows/evals.yml smoke-tests the example with openmapstack validate --preflight, and --preflight skips exactly the output, report and run-record checks that fail here. The example has therefore never been fully validated in CI.

Fix: re-run the pipeline to regenerate the run record, then drop --preflight from the smoke test so this cannot regress. (Worth checking first whether the pipeline can regenerate offline — it fetches from an ArcGIS FeatureServer, so the CI step may need to stay preflight and gain a separate scheduled full-validation job instead.)

2. Manifest/QGIS layer-group drift

The manifest declares 7 semantic layer groups; the .qgz layer tree organises the same layers into 4 thematic ones. The check accepts either a group's id or its title, case- and separator-insensitively, so this is a genuine mismatch rather than a naming-convention artifact.

This is the failure mode mutation case 912 exists for at the dashboard level — the manifest claiming something the delivered product does not have. Fix by reconciling one to the other; the manifest's grouping is the semantic one, so the .qgz tree should probably follow it.

Why this matters beyond the example

The skill teaches that a manifest's claims must be true of the delivered product, and this is the artifact it holds up as the model. Only openmapstack verify (#13, B2) catches the second one at all — validate does not inspect the .qgz against the manifest.

Refs #13.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions