Thank you for your interest in contributing to the Global Type System (GTS) Specification! This document provides guidelines and information for contributors.
- Git for version control
- JSON Schema validator (optional, for testing schema examples)
- Python 3.8+ (optional, for running reference implementations)
- Your favorite editor (VS Code with JSON Schema support recommended)
# Clone the repository
git clone <repository-url>
cd gts-spec
# Optional: Install Python dependencies for reference implementations
pip install jsonschema
# Optional: Install JSON Schema validator
npm install -g ajv-cligts-spec/
├── README.md # Main specification document
├── CONTRIBUTING.md # This file
├── LICENSE # License information
└── examples/ # Example GTS Types and instances
├── events/ # Event-related examples
│ ├── types/ # GTS Type Schemas (JSON Schema documents)
│ └── instances/ # JSON instance examples
└── ... # Other domain examples
git checkout -b feature/your-feature-nameUse descriptive branch names:
feature/add-event-examplesfix/schema-validation-errordocs/clarify-chaining-rulesspec/minor-version-compatibility
Follow the specification standards and patterns described below.
# Validate all schemas in a directory
ajv compile --strict=false -s "examples/events/types/*.schema.json"
# Run Python reference implementation tests (if available)
python -m pytest tests/Follow a structured commit message format:
<type>(<module>): <description>
<type>: change category (see table below)<module>(optional): the area touched (e.g., spec, examples, schemas)<description>: concise, imperative summary
Accepted commit types:
| Type | Meaning |
|---|---|
| spec | Specification changes or clarifications |
| fix | Bug fixes in schemas or examples |
| docs | Documentation updates |
| examples | Adding or updating example schema representations and instances |
| test | Adding or modifying validation tests |
| style | Formatting changes (whitespace, JSON formatting, etc.) |
| chore | Misc tasks (tooling, scripts) |
| breaking | Backward incompatible specification changes |
Examples:
spec(versioning): clarify minor version compatibility rules
fix(schemas): correct `$id` pattern in event schema
examples(idp): add contact_created event instance
test(validation): add schema validation tests
Best practices:
- Keep the title concise (ideally ≤ 50 chars)
- Use imperative mood (e.g., "Fix schema", not "Fixed schema")
- Make commits atomic (one logical change per commit)
- Add details in the body when necessary (what/why, not how)
- For breaking changes, either use
spec!:or include aBREAKING CHANGE:footer
Specification development guidelines:
- Follow GTS identifier format rules strictly
- Ensure all schemas use correct
$idvalues - Validate schemas against JSON Schema Draft 7 or later
- Include both GTS Type Schemas (the canonical JSON definitions of types) and GTS Instance examples
- Document any deviations or implementation-specific choices
The specification version is declared in README.md via a machine-readable marker on the first line:
<!-- gts-spec-version: X.Y -->This marker is the canonical source of truth and is parsed by CI. The visible > **VERSION**: ... line below it is for human readers only and may be reworded freely, but its X.Y value MUST match the marker. When bumping the spec version, update both lines in the same change.
A versioned Docker image of the conformance test suite is published to GHCR on every git tag matching vX.Y.Z, where:
X.YMUST match the spec version declared inREADME.md. The release workflow enforces this and will fail the build on mismatch.Zincrements independently for changes to the test suite itself (additions, fixes, refactors) within the same spec version.
When the specification moves to the next minor version (e.g. 0.11 → 0.12), the README version line is updated in the same change, and the next release tag starts at vX.Y.0.
Releases are produced from github.com/GlobalTypeSystem/gts-spec. The workflow is restricted to that repository; pushing a tag from a fork has no effect.
git tag v0.11.3
git push origin v0.11.3The Release Tests Image workflow:
- Verifies the tag's
major.minormatches the spec version inREADME.md. - Builds the test runner image for
linux/amd64andlinux/arm64. - Pushes it to
ghcr.io/globaltypesystem/gts-spec-testswith two tags: the exact releasevX.Y.Zand the rolling per-spec-versionvX.Y. No floatinglatesttag is published — seetests/README.mdfor the rationale and consumer-side tag selection guidance. - Creates a GitHub Release with auto-generated notes.