Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
First-party, versioned data contracts and transactional type packs for mdbase
collections.

Published contract schemas are immutable interoperability boundaries. A
catalog-listed starter type contains an inline snapshot of its starting schema
instead of inheriting that boundary. Once installed, the type belongs to the
collection: users can edit its fields and update the explicit contract mapping
without changing the published contract.

This repository is the canonical source. Its deterministic `dist/` output is
published at `https://mdbase.dev/contracts/`. A catalog entry is only a
discovery aid: every installable pack contains an exact manifest, embedded
Expand Down Expand Up @@ -48,4 +54,3 @@ A standards-oriented contract must identify its normative references and
state its profile scope. An mdbase contract is not presented as an official
schema from the referenced standards body unless that body actually publishes
it as such.

233 changes: 233 additions & 0 deletions dist/artifacts/types/jscontact-card/2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
---
kind: mdbase.type
name: jscontact-card
version: 2
description: An editable Markdown-backed JSContact 2.0 core Card
match:
where:
/@type: Card
version: "2.0"
schema:
dialect: json-schema-2020-12
value:
$schema: https://json-schema.org/draft/2020-12/schema
title: JSContact Card 2.0 core profile
description: A local starting shape for an IETF JSContact 2.0 Card.
type: object
required:
- "@type"
- version
properties:
"@type":
const: Card
version:
const: "2.0"
uid:
type: string
minLength: 1
kind:
enum:
- individual
- group
- org
- location
- device
- application
name:
$ref: "#/$defs/name"
emails:
type: object
propertyNames:
$ref: "#/$defs/id"
additionalProperties:
$ref: "#/$defs/emailAddress"
phones:
type: object
propertyNames:
$ref: "#/$defs/id"
additionalProperties:
$ref: "#/$defs/phone"
organizations:
type: object
propertyNames:
$ref: "#/$defs/id"
additionalProperties:
$ref: "#/$defs/organization"
notes:
type: object
propertyNames:
$ref: "#/$defs/id"
additionalProperties:
$ref: "#/$defs/note"
additionalProperties: false
$defs:
id:
type: string
minLength: 1
trueSet:
type: object
additionalProperties:
const: true
name:
type: object
properties:
"@type":
const: Name
components:
type: array
minItems: 1
contains:
type: object
required:
- kind
properties:
kind:
not:
const: separator
items:
$ref: "#/$defs/nameComponent"
full:
type: string
minLength: 1
isOrdered:
type: boolean
defaultSeparator:
type: string
anyOf:
- required:
- components
- required:
- full
additionalProperties: false
nameComponent:
type: object
required:
- kind
- value
properties:
"@type":
const: NameComponent
kind:
enum:
- credential
- generation
- given
- given2
- separator
- surname
- surname2
- title
value:
type: string
additionalProperties: false
emailAddress:
type: object
required:
- address
properties:
"@type":
const: EmailAddress
address:
type: string
format: email
contexts:
$ref: "#/$defs/trueSet"
pref:
type: integer
minimum: 1
label:
type: string
additionalProperties: false
phone:
type: object
required:
- number
properties:
"@type":
const: Phone
number:
type: string
minLength: 1
features:
$ref: "#/$defs/trueSet"
contexts:
$ref: "#/$defs/trueSet"
pref:
type: integer
minimum: 1
label:
type: string
additionalProperties: false
organization:
type: object
properties:
"@type":
const: Organization
name:
type: string
minLength: 1
units:
type: array
minItems: 1
items:
$ref: "#/$defs/orgUnit"
sortAs:
type: string
contexts:
$ref: "#/$defs/trueSet"
anyOf:
- required:
- name
- required:
- units
additionalProperties: false
orgUnit:
type: object
required:
- name
properties:
"@type":
const: OrgUnit
name:
type: string
minLength: 1
additionalProperties: false
note:
type: object
required:
- note
properties:
"@type":
const: Note
note:
type: string
created:
type: string
format: date-time
additionalProperties: false
collection:
display:
name_field: /name/full
implements:
- contract: mdbase.jscontact.card
version: 2.0.0
fields:
/@type: /@type
version: version
uid: uid
kind: kind
name: name
emails: emails
phones: phones
organizations: organizations
notes: notes
---

# JSContact Card

This starter type begins as a local copy of the JSContact core profile. Its
fields belong to the collection and can be added, renamed, or reshaped. Update
the explicit contract mapping whenever a compatible field moves.

The separately installed contract schema remains the portable boundary. Local
fields that are not mapped into that boundary remain collection-specific.
8 changes: 4 additions & 4 deletions dist/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@
"packs": [
{
"id": "mdbase.jscontact",
"version": "2.0.0",
"version": "2.0.1",
"name": "JSContact 2.0 starter",
"description": "The mdbase JSContact Card core contract and a direct Markdown implementation.",
"digest": "sha256:a037e46891244018b0cb6c8269bbba56e800d272f0d7591cf525f3661db877b3",
"provision": "./packs/mdbase.jscontact/2.0.0.json",
"description": "The mdbase JSContact Card core contract and an editable Markdown implementation.",
"digest": "sha256:c277f278b20acbd0b182d88e2c3c018220c2808aa57f73fa2da1b413383ed21c",
"provision": "./packs/mdbase.jscontact/2.0.1.json",
"provides": [
{
"id": "mdbase.jscontact.card",
Expand Down
Loading