addedInput schema / properties / intent / properties / capability_contract
Added value: +{
+ "additionalProperties": false,
+ "properties": {
+ "approval_id": {
+ "default": "",
+ "maxLength": 160,
+ "type": "string"
+ },
+ "approved_by": {
+ "default": "",
+ "maxLength": 160,
+ "type": "string"
+ },
+ "artifact_id": {
+ "maxLength": 160,
+ "minLength": 3,
+ "type": "string"
+ },
+ "behavioral_promise": {
+ "description": "The whole promise, complete. If the promise names six lifecycle stages, all six are in scope for green.",
+ "maxLength": 4000,
+ "minLength": 40,
+ "type": "string"
+ },
+ "capability_name": {
+ "description": "What a person calls it.",
+ "maxLength": 160,
+ "minLength": 3,
+ "type": "string"
+ },
+ "claims": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "claim_id": {
+ "maxLength": 120,
+ "minLength": 2,
+ "type": "string"
+ },
+ "host_evidence": {
+ "default": [],
+ "items": {
+ "maxLength": 400,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 60,
+ "type": "array"
+ },
+ "kinds": {
+ "items": {
+ "enum": [
+ "happy-path",
+ "failure-path",
+ "boundary",
+ "lifecycle",
+ "provenance",
+ "integration"
+ ],
+ "type": "string"
+ },
+ "maxItems": 6,
+ "minItems": 1,
+ "type": "array"
+ },
+ "lifecycle_stage": {
+ "default": "",
+ "maxLength": 120,
+ "type": "string"
+ },
+ "observable_acceptance": {
+ "description": "How anyone else would tell whether this claim holds. Not 'it works' — the observation that decides it.",
+ "maxLength": 2000,
+ "minLength": 10,
+ "type": "string"
+ },
+ "owned_capabilities": {
+ "default": [],
+ "items": {
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 60,
+ "type": "array"
+ },
+ "requirement": {
+ "default": "required",
+ "description": "Optional claims may remain incomplete without blocking green — but only if they were marked optional before the build began.",
+ "enum": [
+ "required",
+ "optional"
+ ],
+ "type": "string"
+ },
+ "statement": {
+ "description": "What the capability does, stated so it can be observed.",
+ "maxLength": 2000,
+ "minLength": 10,
+ "type": "string"
+ }
+ },
+ "required": [
+ "claim_id",
+ "statement",
+ "kinds",
+ "observable_acceptance"
+ ],
+ "type": "object"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "type": "array"
+ },
+ "contract_version": {
+ "const": "SHPBL-CAPABILITY-CONTRACT/1.0.0",
+ "default": "SHPBL-CAPABILITY-CONTRACT/1.0.0",
+ "type": "string"
+ },
+ "failure_behavior": {
+ "description": "What it does when it cannot do what it promised. Silence is not failure behaviour.",
+ "maxLength": 4000,
+ "minLength": 10,
+ "type": "string"
+ },
+ "host_behaviors": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "behavior": {
+ "description": "What the host repository already does, in behavioural terms.",
+ "maxLength": 2000,
+ "minLength": 10,
+ "type": "string"
+ },
+ "must_preserve": {
+ "default": "",
+ "description": "The mechanics of this host behaviour the artifact must actually reconstruct, not merely reference.",
+ "maxLength": 2000,
+ "type": "string"
+ },
+ "source_lines": {
+ "default": [],
+ "items": {
+ "minimum": 1,
+ "type": "integer"
+ },
+ "maxItems": 60,
+ "type": "array"
+ },
+ "source_paths": {
+ "description": "The host files this behaviour was read from. A behaviour with no cited path is prose, not evidence.",
+ "items": {
+ "maxLength": 400,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 60,
+ "minItems": 1,
+ "type": "array"
+ },
+ "source_symbols": {
+ "default": [],
+ "description": "The functions, classes or exports inside those files, where you can name them.",
+ "items": {
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 60,
+ "type": "array"
+ }
+ },
+ "required": [
+ "behavior",
+ "source_paths"
+ ],
+ "type": "object"
+ },
+ "maxItems": 60,
+ "minItems": 1,
+ "type": "array"
+ },
+ "host_repository": {
+ "maxLength": 300,
+ "minLength": 3,
+ "type": "string"
+ },
+ "inputs": {
+ "items": {
+ "maxLength": 400,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 80,
+ "minItems": 1,
+ "type": "array"
+ },
+ "lifecycle_stages": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "entered_from": {
+ "default": "",
+ "maxLength": 120,
+ "type": "string"
+ },
+ "stage": {
+ "maxLength": 120,
+ "minLength": 2,
+ "type": "string"
+ },
+ "what_happens": {
+ "maxLength": 1000,
+ "minLength": 5,
+ "type": "string"
+ }
+ },
+ "required": [
+ "stage",
+ "what_happens"
+ ],
+ "type": "object"
+ },
+ "maxItems": 40,
+ "type": "array"
+ },
+ "optional_enhancements": {
+ "default": [],
+ "description": "Declared before the build. An enhancement invented afterwards to explain a gap is not optional, it is missing.",
+ "items": {
+ "maxLength": 600,
+ "minLength": 3,
+ "type": "string"
+ },
+ "maxItems": 60,
+ "type": "array"
+ },
+ "outputs": {
+ "items": {
+ "maxLength": 400,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 80,
+ "minItems": 1,
+ "type": "array"
+ },
+ "owned_capabilities": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "capability_id": {
+ "maxLength": 200,
+ "minLength": 2,
+ "type": "string"
+ },
+ "primitive": {
+ "default": "",
+ "maxLength": 80,
+ "type": "string"
+ },
+ "role": {
+ "default": "support",
+ "enum": [
+ "lead",
+ "support"
+ ],
+ "type": "string"
+ },
+ "unit_class": {
+ "default": "UNKNOWN",
+ "enum": [
+ "PURE",
+ "SEAMED",
+ "PORTED",
+ "UNKNOWN"
+ ],
+ "type": "string"
+ },
+ "what_it_contributes": {
+ "default": "",
+ "maxLength": 2000,
+ "type": "string"
+ }
+ },
+ "required": [
+ "capability_id"
+ ],
+ "type": "object"
+ },
+ "maxItems": 60,
+ "minItems": 1,
+ "type": "array"
+ },
+ "provenance_behavior": {
+ "description": "What lineage the artifact itself records at runtime, and what it can answer about where it came from.",
+ "maxLength": 4000,
+ "minLength": 10,
+ "type": "string"
+ },
+ "seams": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "kind": {
+ "enum": [
+ "state",
+ "io",
+ "model",
+ "randomness",
+ "network",
+ "filesystem",
+ "persistence",
+ "time",
+ "concurrency"
+ ],
+ "type": "string"
+ },
+ "port": {
+ "default": "",
+ "maxLength": 200,
+ "type": "string"
+ },
+ "test_strategy": {
+ "default": "recorded",
+ "enum": [
+ "real",
+ "recorded",
+ "injected-fake"
+ ],
+ "type": "string"
+ },
+ "what": {
+ "maxLength": 1000,
+ "minLength": 5,
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "what"
+ ],
+ "type": "object"
+ },
+ "maxItems": 40,
+ "type": "array"
+ }
+ },
+ "required": [
+ "artifact_id",
+ "capability_name",
+ "behavioral_promise",
+ "host_repository",
+ "host_behaviors",
+ "owned_capabilities",
+ "inputs",
+ "outputs",
+ "failure_behavior",
+ "provenance_behavior",
+ "claims"
+ ],
+ "type": "object"
+}
addedInput schema / properties / intent / properties / reuse_declaration
Added value: +{
+ "additionalProperties": false,
+ "properties": {
+ "carry_into_artifact": {
+ "default": [],
+ "description": "The licence and notice files copied into the artifact's `LICENSES/` folder.",
+ "items": {
+ "maxLength": 400,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 40,
+ "type": "array"
+ },
+ "declaration_version": {
+ "const": "SHPBL-REUSE-DECLARATION/1.0.0",
+ "default": "SHPBL-REUSE-DECLARATION/1.0.0",
+ "type": "string"
+ },
+ "declared_by": {
+ "description": "The person who made that declaration. A model, an agent, a policy or a default is refused.",
+ "maxLength": 160,
+ "minLength": 2,
+ "type": "string"
+ },
+ "license": {
+ "description": "The licence as detected in the tree or as stated by the upstream project — e.g. `MIT`, `Apache-2.0`, `AGPL-3.0`.",
+ "maxLength": 200,
+ "minLength": 2,
+ "type": "string"
+ },
+ "license_files": {
+ "default": [],
+ "description": "The licence and notice files found in the scoped tree.",
+ "items": {
+ "maxLength": 400,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 40,
+ "type": "array"
+ },
+ "note": {
+ "default": "",
+ "maxLength": 2000,
+ "type": "string"
+ },
+ "obligations": {
+ "default": [],
+ "description": "What must be preserved: attribution, notice retention, source disclosure, licence propagation.",
+ "items": {
+ "maxLength": 600,
+ "minLength": 2,
+ "type": "string"
+ },
+ "maxItems": 40,
+ "type": "array"
+ },
+ "reuse_permitted": {
+ "description": "The human declaration. False is a legal answer and stops the composition; absent is not an answer at all.",
+ "type": "boolean"
+ },
+ "upstream_project": {
+ "description": "The project the behaviour is being reused from, as `owner/repo` or its published name.",
+ "maxLength": 300,
+ "minLength": 3,
+ "type": "string"
+ }
+ },
+ "required": [
+ "upstream_project",
+ "license",
+ "reuse_permitted",
+ "declared_by"
+ ],
+ "type": "object"
+}