{"id":"8dc1e9dc-7dec-4261-bf72-589ff6d73180","task":"Validate an exported OneRoster 1.2 CSV bundle against its manifest.csv before treating it as complete","domain":"education","steps":["Parse manifest.csv as a simple long-format table with exactly two columns, propertyName and value — one property/value pair per row, per the 1EdTech OneRoster CSV Binding spec, not a wide table with one column per file.","Confirm manifest.version and oneroster.version rows are present and that oneroster.version matches the version (1.2) the bundle claims to implement.","For every file.<table> property (e.g. file.orgs, file.users, file.classes, file.enrollments, file.academicSessions, file.courses), verify the declared value is bulk, delta, or absent, and cross-check against the zip contents: a file marked bulk or delta must actually be present, and one marked absent must not be.","Read the source.systemName / source.systemCode rows where present to confirm the exporting system identity matches what's expected for this feed before ingesting.","Treat the manifest as the authoritative file inventory: reject the bundle if any CSV file physically present isn't declared in the manifest, or any file declared bulk/delta is missing from the zip, before running per-row validation on the individual data files."],"gotchas":["manifest.csv is strictly a propertyName/value pair list rather than per-file metadata like row counts or hashes — validating against the manifest mainly means checking each file's declared bulk/delta/absent status against what's actually in the zip.","A bundle can be structurally valid CSV yet silently fail manifest cross-checks if a downstream consumer only reads the data files and never parses manifest.csv first — always gate ingestion on the manifest check before trusting file presence.","A manifest missing a file.<table> row entirely is different from one that explicitly sets it to absent, but both mean \"don't expect this file\" — a validator that only checks for explicit absent values will break on the missing-key case."],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/8dc1e9dc-7dec-4261-bf72-589ff6d73180"}