This repo defines a JSON eventstream format for interspecies AIC device interactions. Currently it's practical and operational (button_press events from FluentPet devices), but needs evolution toward a more robust, extensible, species-agnostic standard.
- Eventstream: {id, provenance, start, end, agents[], events[]}
- Agent: {id, species}
- Event: {id, type, agent, start, end, content, other_data}
- Formal JSON Schema for the eventstream format
additionalProperties: trueon all objects (allow extension without breaking)- Required vs optional fields clearly defined
- Schema version field (
$schemaorschema_version) on every eventstream
- Optional
metadataobject on Agent for: breed, age, sex, name, training_method - Optional
group_idfor multi-agent scenarios (packs, households) - Optional
rolefield (e.g., "learner", "teacher", "observer") - Keep existing fields unchanged
- Optional
contextobject for environmental data (location, who_present, preceding_event_id) - Optional
confidencefield (0-1) for automated/inferred events - Optional
media_refsarray for linked video/audio recordings - Optional
annotationsarray for researcher-added metadata - Scoped type namespacing: document the
provenance.schema.typeconvention already hinted at
- Explicit schema version in every file (add
schema_version: "1.1.0"to eventstream) - Semver policy: patch = docs, minor = additive fields, major = breaking changes
- Unknown field handling policy: "must-ignore and preserve" (readers MUST NOT reject unknown fields)
- Backward/forward compatibility guarantees
- Document how to propose new event types, agent properties, or context fields
- Darwin Core-style: minimal universal core + domain-specific extensions
- Examples: ethogram extensions, video annotation extensions, multi-modal signal extensions
- Reference the JSON Schema
- Add versioning section
- Link to EXTENSIONS.md and VERSIONING.md
- Keep existing content, add to it
- Simple Python script that validates an eventstream JSON against the schema
- Usage:
python validate.py data_sample/cleverpet.1.json - Reports errors clearly
- Store-and-forward resilience (intermittent connectivity)
- Namespace flexibility via scoped IDs
- Open extensibility via community contribution
- Species-agnosticism (no assumptions about sensory modality or temporal resolution)
- ALL changes must be backward-compatible with existing data_sample/ files
- Existing files must validate against the new schema without modification
- No breaking changes to current field names or types
- Python 3.10+ only, no external dependencies for validate.py
- Keep it simple — this is an academic/research tool, not enterprise software