Project Schema Contract

A minimal, flat project manifest. Describes what the project is and where it lives — nothing more. Validate payloads against this schema before processing.

Schema URL: https://driftsys.github.io/schemas/project/v1.json

Every project carries a project.yaml (or .toml / .json) that declares its canonical name, version, domain, and optional metadata like category and license. Tools read this manifest to identify the project, resolve dependencies, and configure build pipelines. The schema is intentionally small and flat — no nesting, no tool-specific fields.

Discovery Protocol

  1. Detect a project.yaml, project.toml, or project.json file.
  2. Resolution order: YAML → TOML → JSON (first found wins).
  3. Validate against project/v1.json before reading fields.
  4. Parse required fields (name, version) first.
  5. Parse optional fields second.
  6. Treat the schema as closed (additionalProperties: false).

Schema Index

Schema pathWhat it describesStable key
v1.jsonProject manifestname

Validation Contract

Validate early so downstream logic stays predictable.

  1. Validation must happen before any business logic.
  2. Missing required fields (name, version) means hard failure.
  3. Unknown properties must be rejected (schema is closed).
  4. If schema fetch fails, return a schema-unavailable error.

Properties

PathTypeRequiredDescription
namestringyesReverse-domain project identifier (^[a-z][a-z0-9.-]*$)
versionstringyesCanonical version — single source of truth
categorystring \string[]Project classification (see values below)
descriptionstringOne-line summary
licensestringSPDX license expression
keywordsstring[]Discovery tags (free text)
labelsstring[]Process-defined labels (validated at compile time)
authorsstring[]Authors in Name format
homepagestring (uri)Project website or documentation portal URL
bugsstring (uri)Issue tracker URL
repositorystring (uri)Source repository URL
upstreamstringUpstream repo URL for forks (#branch suffix)
processprojectRef[]Process projects this project conforms to
dependenciesprojectRef[]Projects this project uses (full traceability expected)
referencesprojectRef[]Registries and external sources cited (traceability leaf)
classificationstringData classification level (default: unclassified)
metadataobjectFreeform key-value block for org-specific info

projectRef

Each entry in process, dependencies, and references has this shape:

PathTypeRequiredDescription
urlstring (uri)yesRepository or published site URL
versionstringVersion of the referenced project
namestringShort display name

Category values (examples)

Values are informative and may be defined by a process project. Common values include:

ValueDescription
manifestIntegration root — assembles components, ships to customer
specificationRequirements, features, safety concepts
applicationDeployable end-user product
serviceBackend service or API
libraryReusable dependency
toolDeveloper tool, CLI, build plugin (source code)
binaryPrecompiled executables, firmware, vendor tools
distributionRelease artifacts, install packs
configurationGraphic assets, system config, calibration data

Classification values

ISO 27001 / government compatible. Ascending sensitivity:

ValueSharing scope
unclassifiedNo restrictions (default)
internalOrganization only
confidentialNamed recipients
restrictedNeed-to-know
secretCleared personnel
top-secretCompartmented access

Dependency model

Three fields declare project-level relationships:

constraints, and policies. Multiple processes supported; constraints accumulate (most restrictive wins).

expects entries to link across the boundary and warns on coverage gaps.

traceability leaves — the compiler resolves links to them but expects no deeper chain.

Failure Modes

Version Policy

Quick Example

Input: project.yaml\ Schema: project/v1.json

name: io.acme.braking-features
version: "1.0.0"
category: specification
description: Braking system feature requirements
classification: confidential

process:
  - url: https://github.com/acme/process-v2
    version: "2.1"
    name: ACME Process

dependencies:
  - url: https://github.com/acme/abs-component
    version: "0.3"
    name: ABS

references:
  - url: https://driftsys.github.io/refhub
    name: RefHub
  1. Validate payload against schema.
  2. Parse name and version (required).
  3. Parse optional fields (category, description, license, etc.).
  4. Parse process, dependencies, references for dependency resolution.
  5. Reject if unknown properties are present.