{"bundle_type":"pith_open_graph_bundle","bundle_version":"1.0","pith_number":"pith:2015:5FHKBF6DCDTGH5WJYKGBFPR4TU","short_pith_number":"pith:5FHKBF6D","canonical_record":{"source":{"id":"1509.03556","kind":"arxiv","version":1},"metadata":{"license":"http://arxiv.org/licenses/nonexclusive-distrib/1.0/","primary_cat":"cs.CY","submitted_at":"2015-09-11T15:31:39Z","cross_cats_sorted":[],"title_canon_sha256":"6fca7db5f3dddfa96bf4645fb64b6c1d0df973a9f1ec3763756f9e3125d86a72","abstract_canon_sha256":"93426447db5d3a32c78925ffe4aea0fc4d3000eb37de5670c3743bfc4b3e1f4b"},"schema_version":"1.0"},"canonical_sha256":"e94ea097c310e663f6c9c28c12be3c9d28d3f4ae34f443bddee109edcdf9a53c","source":{"kind":"arxiv","id":"1509.03556","version":1},"source_aliases":[{"alias_kind":"arxiv","alias_value":"1509.03556","created_at":"2026-05-18T01:33:17Z"},{"alias_kind":"arxiv_version","alias_value":"1509.03556v1","created_at":"2026-05-18T01:33:17Z"},{"alias_kind":"doi","alias_value":"10.48550/arxiv.1509.03556","created_at":"2026-05-18T01:33:17Z"},{"alias_kind":"pith_short_12","alias_value":"5FHKBF6DCDTG","created_at":"2026-05-18T12:29:05Z"},{"alias_kind":"pith_short_16","alias_value":"5FHKBF6DCDTGH5WJ","created_at":"2026-05-18T12:29:05Z"},{"alias_kind":"pith_short_8","alias_value":"5FHKBF6D","created_at":"2026-05-18T12:29:05Z"}],"events":[{"event_type":"record_created","subject_pith_number":"pith:2015:5FHKBF6DCDTGH5WJYKGBFPR4TU","target":"record","payload":{"canonical_record":{"source":{"id":"1509.03556","kind":"arxiv","version":1},"metadata":{"license":"http://arxiv.org/licenses/nonexclusive-distrib/1.0/","primary_cat":"cs.CY","submitted_at":"2015-09-11T15:31:39Z","cross_cats_sorted":[],"title_canon_sha256":"6fca7db5f3dddfa96bf4645fb64b6c1d0df973a9f1ec3763756f9e3125d86a72","abstract_canon_sha256":"93426447db5d3a32c78925ffe4aea0fc4d3000eb37de5670c3743bfc4b3e1f4b"},"schema_version":"1.0"},"canonical_sha256":"e94ea097c310e663f6c9c28c12be3c9d28d3f4ae34f443bddee109edcdf9a53c","receipt":{"kind":"pith_receipt","key_id":"pith-v1-2026-05","algorithm":"ed25519","signed_at":"2026-05-18T01:33:17.546069Z","signature_b64":"WGcHT96lI74m3zSWAi2uFk2s2XRzn9haWWrncPKJV+jP1knVyruwlB+bKGMzv6YCoPP1w91FwI3dGHLeEE3dDQ==","signed_message":"canonical_sha256_bytes","builder_version":"pith-number-builder-2026-05-17-v1","receipt_version":"0.3","canonical_sha256":"e94ea097c310e663f6c9c28c12be3c9d28d3f4ae34f443bddee109edcdf9a53c","last_reissued_at":"2026-05-18T01:33:17.545427Z","signature_status":"signed_v1","first_computed_at":"2026-05-18T01:33:17.545427Z","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54"},"source_kind":"arxiv","source_id":"1509.03556","source_version":1,"attestation_state":"computed"},"signer":{"signer_id":"pith.science","signer_type":"pith_registry","key_id":"pith-v1-2026-05","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54"},"created_at":"2026-05-18T01:33:17Z","supersedes":[],"prev_event":null,"signature":{"signature_status":"signed_v1","algorithm":"ed25519","key_id":"pith-v1-2026-05","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54","signature_b64":"dNz8fH0W20F7AaXik+jhoUYIZMM6Kbri3cezvxDSzC9mlAVIJueRgDtYpVJwYjLtk5NTJDtvSdg0HpBl2wevAw==","signed_message":"open_graph_event_sha256_bytes","signed_at":"2026-05-27T20:50:22.838505Z"},"content_sha256":"3044382029ff4cc90c2e30b46b658b0e4d2fa56fa4ba75711ac14fc55255e808","schema_version":"1.0","event_id":"sha256:3044382029ff4cc90c2e30b46b658b0e4d2fa56fa4ba75711ac14fc55255e808"},{"event_type":"graph_snapshot","subject_pith_number":"pith:2015:5FHKBF6DCDTGH5WJYKGBFPR4TU","target":"graph","payload":{"graph_snapshot":{"paper":{"title":"Teaching Python programming with automatic assessment and feedback provision","license":"http://arxiv.org/licenses/nonexclusive-distrib/1.0/","headline":"","cross_cats":[],"primary_cat":"cs.CY","authors_text":"Anil Prabhakar, Arti Kashyap, Hans Fangohr, Neil O'Brien","submitted_at":"2015-09-11T15:31:39Z","abstract_excerpt":"We describe a method of automatic feedback provision for students learning programming and computational methods in Python. We have implemented, used and refined this system since 2009 for growing student numbers, and summarise the design and experience of using it. The core idea is to use a unit testing framework: the teacher creates a set of unit tests, and the student code is tested by running these tests. With our implementation, students typically submit work for assessment, and receive feedback by email within a few minutes after submission. The choice of tests and the reporting back to "},"claims":{"count":0,"items":[],"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57"},"source":{"id":"1509.03556","kind":"arxiv","version":1},"verdict":{"id":null,"model_set":{},"created_at":null,"strongest_claim":"","one_line_summary":"","pipeline_version":null,"weakest_assumption":"","pith_extraction_headline":""},"references":{"count":0,"sample":[],"resolved_work":0,"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57","internal_anchors":0},"formal_canon":{"evidence_count":0,"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57"},"author_claims":{"count":0,"strong_count":0,"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57"},"builder_version":"pith-number-builder-2026-05-17-v1"},"verdict_id":null},"signer":{"signer_id":"pith.science","signer_type":"pith_registry","key_id":"pith-v1-2026-05","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54"},"created_at":"2026-05-18T01:33:17Z","supersedes":[],"prev_event":null,"signature":{"signature_status":"signed_v1","algorithm":"ed25519","key_id":"pith-v1-2026-05","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54","signature_b64":"1aCsAjS5w6mvcc0CiDmMzWWo5MurDepkY/TuyP6cCCj6ODunGmk9kHz6Xrm5pG4jR4nlsOw36cCX/nG+hWvBCQ==","signed_message":"open_graph_event_sha256_bytes","signed_at":"2026-05-27T20:50:22.839178Z"},"content_sha256":"19ec1b472b51ebbe17b50852474cc9694f6ace1d90aa60fd161c4e8f5123daf2","schema_version":"1.0","event_id":"sha256:19ec1b472b51ebbe17b50852474cc9694f6ace1d90aa60fd161c4e8f5123daf2"}],"timestamp_proofs":[],"mirror_hints":[{"mirror_type":"https","name":"Pith Resolver","base_url":"https://pith.science","bundle_url":"https://pith.science/pith/5FHKBF6DCDTGH5WJYKGBFPR4TU/bundle.json","state_url":"https://pith.science/pith/5FHKBF6DCDTGH5WJYKGBFPR4TU/state.json","well_known_bundle_url":"https://pith.science/.well-known/pith/5FHKBF6DCDTGH5WJYKGBFPR4TU/bundle.json","status":"primary"}],"public_keys":[{"key_id":"pith-v1-2026-05","algorithm":"ed25519","format":"raw","public_key_b64":"stVStoiQhXFxp4s2pdzPNoqVNBMojDU/fJ2db5S3CbM=","public_key_hex":"b2d552b68890857171a78b36a5dccf368a953413288c353f7c9d9d6f94b709b3","fingerprint_sha256_b32_first128bits":"RVFV5Z2OI2J3ZUO7ERDEBCYNKS","fingerprint_sha256_hex":"8d4b5ee74e4693bcd1df2446408b0d54","rotates_at":null,"url":"https://pith.science/pith-signing-key.json","notes":"Pith uses this Ed25519 key to sign canonical record SHA-256 digests. Verify with: ed25519_verify(public_key, message=canonical_sha256_bytes, signature=base64decode(signature_b64))."}],"merge_version":"pith-open-graph-merge-v1","built_at":"2026-05-27T20:50:22Z","links":{"resolver":"https://pith.science/pith/5FHKBF6DCDTGH5WJYKGBFPR4TU","bundle":"https://pith.science/pith/5FHKBF6DCDTGH5WJYKGBFPR4TU/bundle.json","state":"https://pith.science/pith/5FHKBF6DCDTGH5WJYKGBFPR4TU/state.json","well_known_bundle":"https://pith.science/.well-known/pith/5FHKBF6DCDTGH5WJYKGBFPR4TU/bundle.json"},"state":{"state_type":"pith_open_graph_state","state_version":"1.0","pith_number":"pith:2015:5FHKBF6DCDTGH5WJYKGBFPR4TU","merge_version":"pith-open-graph-merge-v1","event_count":2,"valid_event_count":2,"invalid_event_count":0,"equivocation_count":0,"current":{"canonical_record":{"metadata":{"abstract_canon_sha256":"93426447db5d3a32c78925ffe4aea0fc4d3000eb37de5670c3743bfc4b3e1f4b","cross_cats_sorted":[],"license":"http://arxiv.org/licenses/nonexclusive-distrib/1.0/","primary_cat":"cs.CY","submitted_at":"2015-09-11T15:31:39Z","title_canon_sha256":"6fca7db5f3dddfa96bf4645fb64b6c1d0df973a9f1ec3763756f9e3125d86a72"},"schema_version":"1.0","source":{"id":"1509.03556","kind":"arxiv","version":1}},"source_aliases":[{"alias_kind":"arxiv","alias_value":"1509.03556","created_at":"2026-05-18T01:33:17Z"},{"alias_kind":"arxiv_version","alias_value":"1509.03556v1","created_at":"2026-05-18T01:33:17Z"},{"alias_kind":"doi","alias_value":"10.48550/arxiv.1509.03556","created_at":"2026-05-18T01:33:17Z"},{"alias_kind":"pith_short_12","alias_value":"5FHKBF6DCDTG","created_at":"2026-05-18T12:29:05Z"},{"alias_kind":"pith_short_16","alias_value":"5FHKBF6DCDTGH5WJ","created_at":"2026-05-18T12:29:05Z"},{"alias_kind":"pith_short_8","alias_value":"5FHKBF6D","created_at":"2026-05-18T12:29:05Z"}],"graph_snapshots":[{"event_id":"sha256:19ec1b472b51ebbe17b50852474cc9694f6ace1d90aa60fd161c4e8f5123daf2","target":"graph","created_at":"2026-05-18T01:33:17Z","signer":{"key_id":"pith-v1-2026-05","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54","signer_id":"pith.science","signer_type":"pith_registry"},"payload":{"graph_snapshot":{"author_claims":{"count":0,"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57","strong_count":0},"builder_version":"pith-number-builder-2026-05-17-v1","claims":{"count":0,"items":[],"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57"},"formal_canon":{"evidence_count":0,"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57"},"paper":{"abstract_excerpt":"We describe a method of automatic feedback provision for students learning programming and computational methods in Python. We have implemented, used and refined this system since 2009 for growing student numbers, and summarise the design and experience of using it. The core idea is to use a unit testing framework: the teacher creates a set of unit tests, and the student code is tested by running these tests. With our implementation, students typically submit work for assessment, and receive feedback by email within a few minutes after submission. The choice of tests and the reporting back to ","authors_text":"Anil Prabhakar, Arti Kashyap, Hans Fangohr, Neil O'Brien","cross_cats":[],"headline":"","license":"http://arxiv.org/licenses/nonexclusive-distrib/1.0/","primary_cat":"cs.CY","submitted_at":"2015-09-11T15:31:39Z","title":"Teaching Python programming with automatic assessment and feedback provision"},"references":{"count":0,"internal_anchors":0,"resolved_work":0,"sample":[],"snapshot_sha256":"258153158e38e3291e3d48162225fcdb2d5a3ed65a07baac614ab91432fd4f57"},"source":{"id":"1509.03556","kind":"arxiv","version":1},"verdict":{"created_at":null,"id":null,"model_set":{},"one_line_summary":"","pipeline_version":null,"pith_extraction_headline":"","strongest_claim":"","weakest_assumption":""}},"verdict_id":null}}],"author_attestations":[],"timestamp_anchors":[],"storage_attestations":[],"citation_signatures":[],"replication_records":[],"corrections":[],"mirror_hints":[],"record_created":{"event_id":"sha256:3044382029ff4cc90c2e30b46b658b0e4d2fa56fa4ba75711ac14fc55255e808","target":"record","created_at":"2026-05-18T01:33:17Z","signer":{"key_id":"pith-v1-2026-05","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54","signer_id":"pith.science","signer_type":"pith_registry"},"payload":{"attestation_state":"computed","canonical_record":{"metadata":{"abstract_canon_sha256":"93426447db5d3a32c78925ffe4aea0fc4d3000eb37de5670c3743bfc4b3e1f4b","cross_cats_sorted":[],"license":"http://arxiv.org/licenses/nonexclusive-distrib/1.0/","primary_cat":"cs.CY","submitted_at":"2015-09-11T15:31:39Z","title_canon_sha256":"6fca7db5f3dddfa96bf4645fb64b6c1d0df973a9f1ec3763756f9e3125d86a72"},"schema_version":"1.0","source":{"id":"1509.03556","kind":"arxiv","version":1}},"canonical_sha256":"e94ea097c310e663f6c9c28c12be3c9d28d3f4ae34f443bddee109edcdf9a53c","receipt":{"algorithm":"ed25519","builder_version":"pith-number-builder-2026-05-17-v1","canonical_sha256":"e94ea097c310e663f6c9c28c12be3c9d28d3f4ae34f443bddee109edcdf9a53c","first_computed_at":"2026-05-18T01:33:17.545427Z","key_id":"pith-v1-2026-05","kind":"pith_receipt","last_reissued_at":"2026-05-18T01:33:17.545427Z","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54","receipt_version":"0.3","signature_b64":"WGcHT96lI74m3zSWAi2uFk2s2XRzn9haWWrncPKJV+jP1knVyruwlB+bKGMzv6YCoPP1w91FwI3dGHLeEE3dDQ==","signature_status":"signed_v1","signed_at":"2026-05-18T01:33:17.546069Z","signed_message":"canonical_sha256_bytes"},"source_id":"1509.03556","source_kind":"arxiv","source_version":1}}},"equivocations":[],"invalid_events":[],"applied_event_ids":["sha256:3044382029ff4cc90c2e30b46b658b0e4d2fa56fa4ba75711ac14fc55255e808","sha256:19ec1b472b51ebbe17b50852474cc9694f6ace1d90aa60fd161c4e8f5123daf2"],"state_sha256":"0e1bfcd122c84d72a530dcdb8c6be5d3df7b4feb6f32e397ec8eb3ef314344db"},"bundle_signature":{"signature_status":"signed_v1","algorithm":"ed25519","key_id":"pith-v1-2026-05","public_key_fingerprint":"8d4b5ee74e4693bcd1df2446408b0d54","signature_b64":"LwqJPzKH2dM+Aj426ANuIA5RtODE9ZjQJksE5wKX0cmDw/KYtD4s0wHGeD/o5dEVyJbROCWPBqs9Yk+sbyBVCg==","signed_message":"bundle_sha256_bytes","signed_at":"2026-05-27T20:50:22.842738Z","bundle_sha256":"f6ab6e619e40c9e1494e58ac84a0ab2106bef77a76a1f2a1ef5a28b5e15b1c7e"}}