New schemas:
- Added Identifiers service schema (exported as
iscc_schema.Identifiers) for registry/gateway responses listing external identifiers for an asset, with optionalisccsubject binding.
Metadata:
- Widened
IsccMeta.identifierfromstr | list[str]to accept a typed identifier object or a mixed list of strings and objects. Legacy string forms remain valid. - Added the
iscc_schema.Identifieritem model for constructing typed identifier objects withscheme,code, optionalscope, and optionalprimary. - Identifier objects are bare when nested in
IsccMetaorIdentifiers: no nested@context,$schema, or@typeis emitted.
Service metadata:
- Added optional
isccto standaloneGenAI, aligning it withTDMandIdentifiersas a subject-bearing service record. - Made all Service objects forward-compatible with extension fields (
additionalProperties: true), including standalone and inlineGenAI. - Preserved falsy extension-field values on Service objects, so values such as
0.0,[],{},"", andfalseare no longer normalized away. - Made
recover_context(..., schema="<name>-<version>.json")work with bare versioned standalone schema names. - Rejected empty string entries inside
IsccMeta.identifierlists; the published JSON Schema also marks identifier string branches withminLength: 1. - Tightened the published JSON Schema's
identifierarray branch to validate every element instead of only the first; strict external validators may now reject payloads they previously accepted. The Pydantic model already validated all elements, so runtime behavior is unchanged.
This release adds the Protocol schema category (ISCC Discovery Protocol wire records) alongside
the existing Metadata, Seed, and Service categories, introduces an STM seed schema for scholarly
works, makes compact self-describing JSON the default for seed and protocol records, and version-pins
the $schema and @context of every standalone schema. The $schema reference makes compact data
recoverable to JSON-LD on demand, conformant with IEP-0002 which accepts both application/json and
application/ld+json as meta element formats.
Breaking changes:
IsccMetais unaffected. It still defaults told=Trueand serializes full JSON-LD exactly as before. The breaking changes below apply only to the standalone Seed/Service/Protocol models.- Seed models (ISBN, ISRC, STM) now default to compact JSON (
ld=False):.dict(),.json(), and.jcs()emit$schemaonly, with no@context/@type. Passld=Trueto restore full JSON-LD. - Standalone schema
$schemaURLs are now version-pinned (e.g.…/isbn-0.7.0.json,…/tdm-0.7.0.json,…/iscc-note-0.7.0.json). Code that matched the old unversioned$schemastring must account for the-X.Y.Zsuffix.recover_context()resolves both forms, so v0.6.0 records still recover. $schemais now a required field on the ISBN, ISRC, STM, and IsccNote schemas (auto-populated from its const default on construction, so existing construction code keeps working).
New schemas:
- Added IsccNote protocol schema (exported as
iscc_schema.IsccNote) — the permanent ISCC Declaration log record for the ISCC Discovery Protocol HUB, and the first member of the new Protocol category. Serializes to compact JSON by default and requires$schemaas the sole version anchor;$schemais part of the signedjcs()bytes, pinning the schema version into the signed record. Required:$schema,iscc_code,datahash,nonce,signature. - Added STM seed schema (exported as
iscc_schema.STM) — Scientific/Technical/Medical seed metadata for DOI-identified scholarly works, for interoperable Meta-Code generation (IEP-0002). Required:doi,resource_type,title,publisher,pubyear. Optional:version_type(NISO JAV stage),container_title,issn.resource_typecarries 17 DataCite-style work-type tokens mapped to resolvable schema.org/FaBiO class IRIs.
Serialization:
- Added
ldparameter to.dict(),.json(),.jcs()for controlling JSON-LD output - Seed models (ISBN, ISRC, STM) default to
ld=False(compact JSON with$schemaonly) - Service models (TDM, GenAI) default to
ld=True(full JSON-LD for registry/gateway interop) - Protocol model (IsccNote) defaults to
ld=False(compact JSON,$schemaas version anchor) - IsccMeta defaults to
ld=True(full JSON-LD, backward compatible) - Changed seed metadata examples to compact recoverable JSON format (no
@context/@type) - Added "Recommended Format" documentation to ISBN and ISRC schema pages
- Added code-gen post-processing for const field defaults and
_default_ldclass attribute .json()now accepts anindentargument for pretty-printing compact records and forwardsexclude_unset, so the compact path offers the same formatting controls as the JSON-LD path
Fixes:
- End-anchored the IsccNote
gatewayURL pattern ($) so values with embedded whitespace or trailing characters are rejected rather than silently accepted into a permanent declaration record - Corrected the IsccNote
@typedescription ("service metadata" → "protocol metadata")
Versioning:
- All standalone schemas (seed, service, protocol) now uniformly version both
$schemaand the default@context, and write a version-pinned archive (<name>-0.7.0.json) next to the latest file; the latest file keeps an unversioned$id - Added
x-iscc-jsonldextension to every standalone JSON Schema documenting the JSON-LD upgrade path (versioned context URL,@type, human-readable recipe) for compact records - Versioned the
@context/$schemaURLs shown in the main IsccMeta docs example
Field status & tooling:
- Promoted
$schema,nonce,signature,generator, andtdm_reservationtostable - Documented the field-stability contract (stable/draft, one-way promotion) and the bump-first release workflow in the versioning guide
- Added a release-archive build guard: the schema and context builds abort if a git tag already exists for the current version, preventing silent mutation of released archives (fails open when git is unavailable)
Documentation:
- Templated the version string in hand-written docs (guide, examples, versioning) via Zensical's
macrosextension, so version-pinned example URLs derive fromiscc_schema.__version__and never go stale on a release bump; the{{ version }}variable is supplied bytools/docs_macros.py - Made the README version-free (it renders on GitHub/PyPI where macros do not run) and taught the
llms-full.txtgenerator to resolve the version token
- Replaced five per-category TDM fields (train, inference, derive, search, analyze) with two W3C TDMRep-conformant fields (tdm_reservation, tdm_policy)
- Added
tdm_reservationinteger field (0/1) bound tohttp://www.w3.org/ns/tdmrep#reservation - Added
tdm_policyURI field bound tohttp://www.w3.org/ns/tdmrep#policy - Changed embedded
tdmwrapper to use JSON-LD@nestsemantics (no intermediate blank node in RDF expansion) - Added
isccfield to standalone TDM schema for binding declarations to content by ISCC-CODE or ISCC-ID - Embedded and standalone TDM objects now allow additional properties for backward compatibility with v0.5.0 payloads
- Fixed
empty_string_to_defaultvalidator coercing integer 0 to None (now only exempts int, not bool/list/dict) - Per-category fields deferred until IETF AIPREF vocabulary stabilizes (target August 2026)
- Migrated documentation from mkdocs-material to zensical
- Added ISCC brand theming (header, footer, dark mode, logo)
- Added copy-page button for LLM-friendly markdown export
- Added ISCC-AI copilot widget integration
- Added llms.txt and per-page markdown generation for LLM consumption
- Added "For Coding Agents" reference page
- Added GitHub Pages deployment workflow
- Added navigation icons and short titles to all doc pages
- Added Open Graph and Twitter Card meta tags
- Added Plausible analytics via theme override
- Added
x-iscc-status(stable/draft) to all fields across YAML schemas - Rendered
x-iscc-statusin generated schema docs, vocabulary page, and terms includes - Added
datasizefield for data processed size when ISCC is computed over sub-file data (e.g., bioimage planes) - Added GenAI Service Metadata schema for generative AI disclosure signals (involvement, ai_system, digital_source_type)
- Added
genaifield to IsccMeta for embedding AI transparency signals in content metadata - Moved
tdmfield from iscc-embeddable to iscc-extended (structured objects don't belong in media-embeddable metadata) - Added
formfield for content-kind classification using Schema.org CreativeWork subtypes - Pydantic models now emit versioned
$schemaand@contextURLs (e.g.,http://purl.org/iscc/schema/0.5.0.json) - Standalone schema models (ISBN, ISRC, TDM) now emit versioned
@contextURLs - Added versioning documentation page
- Embedded JSON-LD
@contextdirectly into JSON Schema files for self-contained validation and semantic mapping - Added schema-specific
@contextto standalone schemas (isbn, isrc, tdm) with only their relevant terms - Patched
@contextproperty in JSON Schemas to accept both URI string and inline object per JSON-LD spec - Added
recover_context()function for schema-driven JSON-LD context recovery from plain JSON data - Added generated
contexts.pymodule with bundled context data and type-to-schema mappings - Reordered build pipeline so
buildcontextruns beforebuildschema - Added ISBN and ISRC Seed Metadata schemas for interoperable Meta-Code generation (IEP-0002)
- Added TDM Service Metadata schema for machine-readable TDM reservation signals (train, inference, derive, search, analyze)
- Added
tdmfield to IsccMeta for embedding TDM reservation metadata in content descriptions - Reframed TDM schema as reservation policy signals aligned with EU DSM Directive Art. 4 opt-out
- Made TDM fields optional (omitted field = reservation status not determined)
- Added
additionalProperties: falseto TDM schema for strict validation - Replaced legally loaded terminology in TDM field descriptions (e.g., "derivative works" → "content transformation")
- Introduced three-category schema framework: ISCC Metadata, Seed Metadata, Service Metadata
- Added per-schema documentation pages with JSON Schema links and field reference tables
- Added Seed and Service Metadata terms to JSON-LD context and vocabulary documentation
- Fixed misleading ISCC Metadata description (content vocabulary, not declaration schema)
- Added
x-iscc-standardextension field to mark ISO 24138:2024 properties in YAML schemas - Surfaced ISO 24138:2024 annotations in generated schema docs, vocabulary page, and terms includes
- Added
iscc_codefield as explicit alternative to the compactisccfield - Added
noncefield for cryptographic replay protection - Added
signaturefield to IsccMeta for iscc-crypto compatibility (EdDSA/JCS signing) - Added
unitsfield for individual ISCC-UNITs that make up a composite ISCC-CODE - Added
textfield for extracted plaintext of digital content - Widened
partsfield to accept both strings and objects - Added
minLength: 1tonameanddescriptionfields - Fixed
keywordsdescription typo ("sting" → "string") - Eliminated
iscc-collection.yamlduplication; JSON Schema is now auto-generated from individual schema files - Fixed JSON-LD identifier collision:
iscc_idandmedia_idnow have distinct ISCC term mappings - Fixed URI-typed fields in JSON-LD context to use
@type: @idfor proper linked data processing - Added missing
modefield to JSON-LD context - Fixed stale 0.3.2 version defaults in generator reference schema
- Fixed missing
x-iscc-statusandx-iscc-contextannotations in JSON Schema output - Exported
Signaturemodel from package - Migrated from Poetry to uv with hatchling build backend
- Dropped Pydantic v1, migrated to native Pydantic v2 (closes #36)
- Require Python >=3.10,<3.15
- Added Python 3.13 and 3.14 to CI test matrix
- Switched CI to ubuntu-latest
- Suppressed datamodel-code-generator warnings and cleaned up build output
- Updated .gitignore to comprehensive Python template
- Added
credentials-field - Updated dependencies
- Add pydantic v2 compatibility
- Added test for error on extra fields
- Added typing information to IsccMeta.iscc_obj property
- Updated definition of
meta-field - Updated dependencies
- Fixed identifier element to support stings and list of strings
- Add string/list support for creators and keywords fields
- Updated dependencies
- Updated dependencies
- Refactor NFT reference to support CAIP-22 and CAIP-29 standards
- Added new nft_chain, nft_contract, nft_token fields
- Moved changelog
- Updated examples
- Use customized BaseModel for IsccMeta
- Convert empty strings to
None - Exclude
Noneand unset in IsccMeta.dict() by default - Exclude
Noneand use by_alis in IsccMeta.json() - Added IsccMeta.jcs() serialization
- Added IsccMEta.iscc_obj property
- Fixed JSON Schema code generation
- Moved thumbnail field to the bottom
- Added
media_idvendor identifier - Added
iscc_idfield - Updated OpenAPI definitions.
- Added custom field AnyUrl to support Data-URLs
- Fix typo in NftFrozen
- Change endpoint /freeze to /nft/freeze
- Mark stable fields
- Change
isccfield to not required - Add schema.org context to
thumbnailfield - Updated dependencies
- Fixed typo in
acquirefield - Renamed main schema class
ISCCtoIsccMeta - Import schemas to package top-level
- Updated dependencies
- Redesigned Generator API model
- Added
modeelement - Added
thumbnailelement - Added versioned context and schema URIs
- Added
$schemaelement to context - Renamed
verifytoverifications
- Fixed packaging error
- Added draft API for ISCC Generator Service
- Added new collection schema
- Updated dependencies
- Added new terms: verify, original, redirect
- Tweak code generator
- Cleanup dependencies
- Added generator field
- Changed properties field to support base64
- Changed iscc validation to support Semantic-Code
- Initial release