A standardized JSON schema and template for documenting crew reports in space analog research missions, enabling structured data sharing, archival, and automated scientific analysis across international analog stations.
This project provides a universal JSON template (crew-report-template.json) for crew reports from space analog missions, such as those at the Mars Desert Research Station (MDRS), Flashline Arctic Research Station, or other simulated environments. The template is designed to capture essential mission data in a consistent, machine-readable format, promoting interoperability and collaboration in the analog research community.
- Standardized Data Sharing: Facilitate the exchange and archival of crew reports in a common format, reducing silos between analog stations and research teams.
- Enabling Automation: Support the development of tools for generating, searching, browsing, and analyzing reports—such as automated dashboards, AI-driven insights, or database integrations—to advance scientific research in space analogs.
Inspired by guidelines like the International Guidelines and Standards for Space Analogs (IGSA), this template emphasizes flexibility for various mission types while ensuring key elements (e.g., health & safety, resource usage) are captured uniformly.
- Role-Specific Data (
role_specific_data): New top-level field for typed, validated data specific to each report type. Replaces the pattern of stuffing role-specific fields intometadata.custom. The schema uses a discriminated union (if/thenonreport_type) so each report type has its own validated sub-schema withadditionalProperties: false. - Extended
report_typeEnum: Replaced the generic report type with 13 MDRS-specific types using canonical long forms:sol_summary,operations_report,greenhab_report,eva_report,eva_request,journalist_report,astronomy_report,photos_of_the_day,hso_checklist,science_report,end_of_mission_report,checkout_checklist,food_inventory. Short aliases (e.g.,operations,greenhab) are accepted by convention but the longer form is preferred for storage. - Typed Sub-Schemas: Each report type has a defined schema under
definitionsinreport_schema.json, covering fields like rover readings (operations), watering times and harvests (greenhab), equipment check matrices (hso_checklist), food inventory categories, and more. - Code of Conduct: Updated to the Mars Society Volunteer Code of Conduct.
- EVA Data Structure: Added
eva_datasection with planned and actual waypoints, UTM coordinates, sample collection details, and field observations for comprehensive EVA tracking. - Report UUID Field: Added
report_uuidfield using UUID v4 format for unique identification without requiring central authority coordination. - Equipment Assignment: Added
equipment_assignedarray to crew members for tracking mesh radios, GPS units, and other equipment assignments per person.
- JSON Template: A sample report structure with required and optional fields for easy adoption.
- Strict JSON Template:
crew_report_template_strict.jsonis a machine-parseable version of the template, with all comments removed. - JSON Schema: Validation rules in
report_schema.jsonto ensure data consistency, including conditional validation ofrole_specific_databased onreport_type. - Validation Script: A Python script (
validate_crew_report.py) for checking individual or batch reports against the schema. - Extensibility: Typed role-specific fields go in
role_specific_data; truly ad-hoc or station-specific extensions go inmetadata.custom.
- Python 3.x (for the validation script)
- Required Python libraries:
jsonschema(install viapip install jsonschema)
-
Clone the repository:
git clone https://github.com/marssociety/crew-report-template.git cd crew-report-template -
(Optional) Install dependencies for validation:
pip install jsonschema
There are two template files provided:
crew_report_template_strict.json: This is a strict, machine-parseable JSON file with no comments. Use this as a starting point for creating your own reports or for programmatic processing.crew_report_template.jsonc(if present): This file contains the same structure but includes comments for human reference. It is not valid JSON and should not be used directly in code.
The template defines a JSON object for a single crew report. It includes:
- Required Envelope Fields:
report_id,title,publish_date,author,station,mission_name,crew_number,mission_type,mission_start_date,mission_duration_day,report_date,report_type, andcontent. - Role-Specific Data:
role_specific_data— typed fields validated perreport_type(e.g., rover readings for operations, harvests for greenhab, equipment checks for hso_checklist). - Optional Fields: Arrays like
crew_members,categories,tags; objects likeeva_data,resource_usage,environmental_data,health_and_safety,metadata; and strings likeobjectives,outcomes. - Formatting: The
contentfield supports free-form text, including Markdown for rich narratives (e.g., headings, lists, links).
Example snippet:
{
"report_id": "123",
"report_type": "operations_report",
"title": "Operations Report - Sol 5",
"content": "Normal operations today. All systems nominal.",
"role_specific_data": {
"non_nominal_systems": "None",
"main_tank_level": "75%",
"rovers": [
{ "rover_name": "Spirit", "rover_used": "Yes", "hours": "152.3" }
]
}
}Note: If you copy from
crew_report_template.json, remove all comments before using in code or validation. For direct use, prefercrew_report_template_strict.json.
To create a report:
- Copy the template and fill in your data.
- Ensure dates use ISO 8601 format (e.g., "2025-07-15T17:45:00Z").
- For batch reports, create an array of these objects in a file like
reports.json.
Use the provided schema (report_schema.json) and validation script to ensure your JSON reports conform to the template.
- Individual report: Save as a single JSON object (e.g.,
sample_report.json). - Batch reports: Use a JSON array (e.g.,
reports.json):[ { "report_id": "123", /* ... */ }, { "report_id": "124", /* ... */ } ]
The script (validate_crew_report.py) checks reports against the schema. It supports command-line arguments for flexibility.
Example commands:
-
Validate default file (
reports.json):python validate_crew_report.py -
Validate a custom file:
python validate_crew_report.py --data my_reports.json --schema report_schema.json
Output example:
Report 1: VALID
Report 2: INVALID - 'content' is a required property
If validation fails, review the error messages and adjust your JSON to match the schema (e.g., add missing required fields).
Validation ensures reports are consistent, making them suitable for automated tools like search engines, data aggregators, or analysis scripts. This aligns with the project's goal of enabling community-wide data processing for scientific insights.
We welcome contributions from the analog research community! Whether it's schema enhancements, new examples, or tool integrations:
- Fork the repository.
- Create a feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by and pending submission to the International Guidelines and Standards for Space Analogs (IGSA).
- Built with open-source tools like JSON Schema and Python's
jsonschemalibrary. - Thanks to the Mars Society and analog mission participants for their pioneering work. This project was also inspired by the long-standing Mars Society ethos of "Hard Work, No Pay, Eternal Glory."
For questions or feedback, open an issue or contact jamesburk - Email.