consiliency-contract 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- consiliency_contract-0.1.0/.github/workflows/publish.yml +66 -0
- consiliency_contract-0.1.0/.gitignore +147 -0
- consiliency_contract-0.1.0/LICENSE +21 -0
- consiliency_contract-0.1.0/PKG-INFO +68 -0
- consiliency_contract-0.1.0/README.md +56 -0
- consiliency_contract-0.1.0/conformance/vectors/canonical-html-contract-loaded.json +15 -0
- consiliency_contract-0.1.0/conformance/vectors/interface-invalid-host-path.json +26 -0
- consiliency_contract-0.1.0/conformance/vectors/interface-valid-realized-and-promised.json +36 -0
- consiliency_contract-0.1.0/conformance/vectors/loop-gate-invalid-blocking-default.json +15 -0
- consiliency_contract-0.1.0/conformance/vectors/loop-gate-missing-doc-warns.json +16 -0
- consiliency_contract-0.1.0/conformance/vectors/manifest-invalid-absolute-path.json +20 -0
- consiliency_contract-0.1.0/conformance/vectors/manifest-invalid-certified-maturity.json +20 -0
- consiliency_contract-0.1.0/conformance/vectors/manifest-invalid-path-and-ref.json +20 -0
- consiliency_contract-0.1.0/conformance/vectors/manifest-invalid-unknown-archetype.json +18 -0
- consiliency_contract-0.1.0/conformance/vectors/manifest-valid-baseline-only.json +20 -0
- consiliency_contract-0.1.0/conformance/vectors/manifest-valid-product.json +21 -0
- consiliency_contract-0.1.0/conformance/vectors/version-skew-compatible.json +15 -0
- consiliency_contract-0.1.0/conformance/vectors/version-skew-incompatible-warns.json +15 -0
- consiliency_contract-0.1.0/consiliency_contract/__init__.py +64 -0
- consiliency_contract-0.1.0/core/canonical-html/contract-v1.json +459 -0
- consiliency_contract-0.1.0/core/canonical-html/provenance.json +22 -0
- consiliency_contract-0.1.0/core/contract.json +45 -0
- consiliency_contract-0.1.0/core/registries/archetypes.json +62 -0
- consiliency_contract-0.1.0/core/registries/document-classes.json +33 -0
- consiliency_contract-0.1.0/core/registries/maturity-labels.json +22 -0
- consiliency_contract-0.1.0/core/registries/required-documents.json +74 -0
- consiliency_contract-0.1.0/core/schemas/canonical-html-v1.schema.json +15 -0
- consiliency_contract-0.1.0/core/schemas/contract-version-status.schema.json +26 -0
- consiliency_contract-0.1.0/core/schemas/decision.schema.json +26 -0
- consiliency_contract-0.1.0/core/schemas/interface-declaration.schema.json +67 -0
- consiliency_contract-0.1.0/core/schemas/loop-gate-protocol.schema.json +25 -0
- consiliency_contract-0.1.0/core/schemas/loop-gate-scenario.schema.json +25 -0
- consiliency_contract-0.1.0/core/schemas/manifest.schema.json +97 -0
- consiliency_contract-0.1.0/core/schemas/version-skew-protocol.schema.json +32 -0
- consiliency_contract-0.1.0/core/schemas/version-skew-scenario.schema.json +13 -0
- consiliency_contract-0.1.0/docs/design/CS-0.2-contract-content-design.md +296 -0
- consiliency_contract-0.1.0/package.json +40 -0
- consiliency_contract-0.1.0/pyproject.toml +27 -0
- consiliency_contract-0.1.0/scripts/python_dump.py +32 -0
- consiliency_contract-0.1.0/src/index.d.ts +8 -0
- consiliency_contract-0.1.0/src/index.js +48 -0
- consiliency_contract-0.1.0/tests/contract.test.mjs +124 -0
- consiliency_contract-0.1.0/tests/package-content.test.mjs +31 -0
- consiliency_contract-0.1.0/tests/test_contract.py +50 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
# Tokenless dual publish via OIDC trusted publishing.
|
|
4
|
+
# - npm: requires the package's Trusted Publisher to be configured on npmjs.com
|
|
5
|
+
# (only possible after the first publish exists — bootstrapped locally).
|
|
6
|
+
# - PyPI: uses the pending/trusted publisher already registered, gated on the
|
|
7
|
+
# `pypi` GitHub environment.
|
|
8
|
+
on:
|
|
9
|
+
release:
|
|
10
|
+
types: [published]
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
verify:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
- uses: actions/setup-node@v4
|
|
21
|
+
with:
|
|
22
|
+
node-version: "22.14.0"
|
|
23
|
+
registry-url: "https://registry.npmjs.org"
|
|
24
|
+
- uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.12"
|
|
27
|
+
- run: python -m pip install --upgrade build
|
|
28
|
+
- run: npm test
|
|
29
|
+
- run: python -m unittest discover -s tests -p 'test_*.py'
|
|
30
|
+
|
|
31
|
+
publish-npm:
|
|
32
|
+
needs: verify
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
permissions:
|
|
35
|
+
id-token: write # npm OIDC trusted publishing (no NODE_AUTH_TOKEN)
|
|
36
|
+
contents: read
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v4
|
|
39
|
+
- uses: actions/setup-node@v4
|
|
40
|
+
with:
|
|
41
|
+
node-version: "22.14.0"
|
|
42
|
+
registry-url: "https://registry.npmjs.org"
|
|
43
|
+
- uses: actions/setup-python@v5
|
|
44
|
+
with:
|
|
45
|
+
python-version: "3.12"
|
|
46
|
+
- run: python -m pip install --upgrade build
|
|
47
|
+
- run: npm install -g npm@latest # ensure an OIDC-capable npm (>= 11.5)
|
|
48
|
+
- run: npm test
|
|
49
|
+
- run: npm publish
|
|
50
|
+
|
|
51
|
+
publish-pypi:
|
|
52
|
+
needs: verify
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
environment: pypi
|
|
55
|
+
permissions:
|
|
56
|
+
id-token: write # PyPI OIDC trusted publishing (no API token)
|
|
57
|
+
contents: read
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/checkout@v4
|
|
60
|
+
- uses: actions/setup-python@v5
|
|
61
|
+
with:
|
|
62
|
+
python-version: "3.12"
|
|
63
|
+
- run: python -m pip install --upgrade build
|
|
64
|
+
- run: python -m unittest discover -s tests -p 'test_*.py'
|
|
65
|
+
- run: python -m build
|
|
66
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Logs
|
|
2
|
+
logs
|
|
3
|
+
*.log
|
|
4
|
+
npm-debug.log*
|
|
5
|
+
yarn-debug.log*
|
|
6
|
+
yarn-error.log*
|
|
7
|
+
lerna-debug.log*
|
|
8
|
+
|
|
9
|
+
# Python
|
|
10
|
+
__pycache__/
|
|
11
|
+
*.py[cod]
|
|
12
|
+
|
|
13
|
+
# Diagnostic reports (https://nodejs.org/api/report.html)
|
|
14
|
+
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
|
15
|
+
|
|
16
|
+
# Runtime data
|
|
17
|
+
pids
|
|
18
|
+
*.pid
|
|
19
|
+
*.seed
|
|
20
|
+
*.pid.lock
|
|
21
|
+
|
|
22
|
+
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
23
|
+
lib-cov
|
|
24
|
+
|
|
25
|
+
# Coverage directory used by tools like istanbul
|
|
26
|
+
coverage
|
|
27
|
+
*.lcov
|
|
28
|
+
|
|
29
|
+
# nyc test coverage
|
|
30
|
+
.nyc_output
|
|
31
|
+
|
|
32
|
+
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
|
33
|
+
.grunt
|
|
34
|
+
|
|
35
|
+
# Bower dependency directory (https://bower.io/)
|
|
36
|
+
bower_components
|
|
37
|
+
|
|
38
|
+
# node-waf configuration
|
|
39
|
+
.lock-wscript
|
|
40
|
+
|
|
41
|
+
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
42
|
+
build/Release
|
|
43
|
+
|
|
44
|
+
# Dependency directories
|
|
45
|
+
node_modules/
|
|
46
|
+
jspm_packages/
|
|
47
|
+
|
|
48
|
+
# Snowpack dependency directory (https://snowpack.dev/)
|
|
49
|
+
web_modules/
|
|
50
|
+
|
|
51
|
+
# TypeScript cache
|
|
52
|
+
*.tsbuildinfo
|
|
53
|
+
|
|
54
|
+
# Optional npm cache directory
|
|
55
|
+
.npm
|
|
56
|
+
|
|
57
|
+
# Optional eslint cache
|
|
58
|
+
.eslintcache
|
|
59
|
+
|
|
60
|
+
# Optional stylelint cache
|
|
61
|
+
.stylelintcache
|
|
62
|
+
|
|
63
|
+
# Optional REPL history
|
|
64
|
+
.node_repl_history
|
|
65
|
+
|
|
66
|
+
# Output of 'npm pack'
|
|
67
|
+
*.tgz
|
|
68
|
+
|
|
69
|
+
# Yarn Integrity file
|
|
70
|
+
.yarn-integrity
|
|
71
|
+
|
|
72
|
+
# dotenv environment variable files
|
|
73
|
+
.env
|
|
74
|
+
.env.*
|
|
75
|
+
!.env.example
|
|
76
|
+
|
|
77
|
+
# parcel-bundler cache (https://parceljs.org/)
|
|
78
|
+
.cache
|
|
79
|
+
.parcel-cache
|
|
80
|
+
|
|
81
|
+
# Next.js build output
|
|
82
|
+
.next
|
|
83
|
+
out
|
|
84
|
+
|
|
85
|
+
# Nuxt.js build / generate output
|
|
86
|
+
.nuxt
|
|
87
|
+
dist
|
|
88
|
+
.output
|
|
89
|
+
|
|
90
|
+
# Gatsby files
|
|
91
|
+
.cache/
|
|
92
|
+
# Comment in the public line in if your project uses Gatsby and not Next.js
|
|
93
|
+
# https://nextjs.org/blog/next-9-1#public-directory-support
|
|
94
|
+
# public
|
|
95
|
+
|
|
96
|
+
# vuepress build output
|
|
97
|
+
.vuepress/dist
|
|
98
|
+
|
|
99
|
+
# vuepress v2.x temp directory
|
|
100
|
+
.temp
|
|
101
|
+
|
|
102
|
+
# Sveltekit cache directory
|
|
103
|
+
.svelte-kit/
|
|
104
|
+
|
|
105
|
+
# vitepress build output
|
|
106
|
+
**/.vitepress/dist
|
|
107
|
+
|
|
108
|
+
# vitepress cache directory
|
|
109
|
+
**/.vitepress/cache
|
|
110
|
+
|
|
111
|
+
# Docusaurus cache and generated files
|
|
112
|
+
.docusaurus
|
|
113
|
+
|
|
114
|
+
# Serverless directories
|
|
115
|
+
.serverless/
|
|
116
|
+
|
|
117
|
+
# FuseBox cache
|
|
118
|
+
.fusebox/
|
|
119
|
+
|
|
120
|
+
# DynamoDB Local files
|
|
121
|
+
.dynamodb/
|
|
122
|
+
|
|
123
|
+
# Firebase cache directory
|
|
124
|
+
.firebase/
|
|
125
|
+
|
|
126
|
+
# TernJS port file
|
|
127
|
+
.tern-port
|
|
128
|
+
|
|
129
|
+
# Stores VSCode versions used for testing VSCode extensions
|
|
130
|
+
.vscode-test
|
|
131
|
+
|
|
132
|
+
# pnpm
|
|
133
|
+
.pnpm-store
|
|
134
|
+
|
|
135
|
+
# yarn v3
|
|
136
|
+
.pnp.*
|
|
137
|
+
.yarn/*
|
|
138
|
+
!.yarn/patches
|
|
139
|
+
!.yarn/plugins
|
|
140
|
+
!.yarn/releases
|
|
141
|
+
!.yarn/sdks
|
|
142
|
+
!.yarn/versions
|
|
143
|
+
|
|
144
|
+
# Vite files
|
|
145
|
+
vite.config.js.timestamp-*
|
|
146
|
+
vite.config.ts.timestamp-*
|
|
147
|
+
.vite/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 The Consiliency
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: consiliency-contract
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Consiliency cross-repo contract package: shared JSON contract data, conformance vectors, and thin npm/PyPI readers.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Consiliency/consiliency-contract
|
|
6
|
+
Project-URL: Issues, https://github.com/Consiliency/consiliency-contract/issues
|
|
7
|
+
License: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Keywords: canonical-html,consiliency,contract,standardization
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
|
|
13
|
+
# @consiliency/contract
|
|
14
|
+
|
|
15
|
+
The Consiliency cross-repo **contract package** — the single, neutral rulebook that
|
|
16
|
+
`agent-harness` and `governed-pipeline` vendor (owned by neither). It defines:
|
|
17
|
+
|
|
18
|
+
- the `.consiliency/` layout + manifest schema
|
|
19
|
+
- the **archetype registry** — `product` / `service` / `library` / `infra` / `tooling-meta` / `experiment` / `document`, plus modifiers (`data-bearing` / `public` / `regulated` / `user-facing`), with `baseline-only` as a legal declaration
|
|
20
|
+
- the required-document sets per archetype (the 7 document classes)
|
|
21
|
+
- the interface-declaration schema (realized + promised cross-repo edges)
|
|
22
|
+
- the loop-gate protocol (presence / freshness / integrity / version-skew)
|
|
23
|
+
- the `canonical_html.v1` display schema
|
|
24
|
+
- the version-skew protocol
|
|
25
|
+
|
|
26
|
+
Dual-published: **npm** [`@consiliency/contract`](https://www.npmjs.com/package/@consiliency/contract) + **PyPI** [`consiliency-contract`](https://pypi.org/project/consiliency-contract/), from shared JSON data + conformance vectors so the two language readers stay byte-identical.
|
|
27
|
+
|
|
28
|
+
> **Status — `0.1.0` carries the first normative Phase-0 L0 contract content.**
|
|
29
|
+
> The shared JSON data lives under `core/` and `conformance/`; npm and PyPI
|
|
30
|
+
> readers are intentionally thin loaders over those same bytes.
|
|
31
|
+
|
|
32
|
+
## Reader API
|
|
33
|
+
|
|
34
|
+
JavaScript:
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
import {
|
|
38
|
+
CONTRACT,
|
|
39
|
+
CONTRACT_VERSION,
|
|
40
|
+
listVectors,
|
|
41
|
+
loadContract,
|
|
42
|
+
loadRegistry,
|
|
43
|
+
loadSchema,
|
|
44
|
+
loadVector,
|
|
45
|
+
} from "@consiliency/contract";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Python:
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from consiliency_contract import (
|
|
52
|
+
CONTRACT,
|
|
53
|
+
CONTRACT_VERSION,
|
|
54
|
+
list_vectors,
|
|
55
|
+
load_contract,
|
|
56
|
+
load_registry,
|
|
57
|
+
load_schema,
|
|
58
|
+
load_vector,
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Verification
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
npm test
|
|
66
|
+
python -m unittest discover -s tests -p 'test_*.py'
|
|
67
|
+
python -m build
|
|
68
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# @consiliency/contract
|
|
2
|
+
|
|
3
|
+
The Consiliency cross-repo **contract package** — the single, neutral rulebook that
|
|
4
|
+
`agent-harness` and `governed-pipeline` vendor (owned by neither). It defines:
|
|
5
|
+
|
|
6
|
+
- the `.consiliency/` layout + manifest schema
|
|
7
|
+
- the **archetype registry** — `product` / `service` / `library` / `infra` / `tooling-meta` / `experiment` / `document`, plus modifiers (`data-bearing` / `public` / `regulated` / `user-facing`), with `baseline-only` as a legal declaration
|
|
8
|
+
- the required-document sets per archetype (the 7 document classes)
|
|
9
|
+
- the interface-declaration schema (realized + promised cross-repo edges)
|
|
10
|
+
- the loop-gate protocol (presence / freshness / integrity / version-skew)
|
|
11
|
+
- the `canonical_html.v1` display schema
|
|
12
|
+
- the version-skew protocol
|
|
13
|
+
|
|
14
|
+
Dual-published: **npm** [`@consiliency/contract`](https://www.npmjs.com/package/@consiliency/contract) + **PyPI** [`consiliency-contract`](https://pypi.org/project/consiliency-contract/), from shared JSON data + conformance vectors so the two language readers stay byte-identical.
|
|
15
|
+
|
|
16
|
+
> **Status — `0.1.0` carries the first normative Phase-0 L0 contract content.**
|
|
17
|
+
> The shared JSON data lives under `core/` and `conformance/`; npm and PyPI
|
|
18
|
+
> readers are intentionally thin loaders over those same bytes.
|
|
19
|
+
|
|
20
|
+
## Reader API
|
|
21
|
+
|
|
22
|
+
JavaScript:
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
import {
|
|
26
|
+
CONTRACT,
|
|
27
|
+
CONTRACT_VERSION,
|
|
28
|
+
listVectors,
|
|
29
|
+
loadContract,
|
|
30
|
+
loadRegistry,
|
|
31
|
+
loadSchema,
|
|
32
|
+
loadVector,
|
|
33
|
+
} from "@consiliency/contract";
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Python:
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from consiliency_contract import (
|
|
40
|
+
CONTRACT,
|
|
41
|
+
CONTRACT_VERSION,
|
|
42
|
+
list_vectors,
|
|
43
|
+
load_contract,
|
|
44
|
+
load_registry,
|
|
45
|
+
load_schema,
|
|
46
|
+
load_vector,
|
|
47
|
+
)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Verification
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
npm test
|
|
54
|
+
python -m unittest discover -s tests -p 'test_*.py'
|
|
55
|
+
python -m build
|
|
56
|
+
```
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "canonical-html-contract-loaded",
|
|
3
|
+
"description": "The relocated canonical_html.v1 contract is present with recorded provenance.",
|
|
4
|
+
"input": {
|
|
5
|
+
"contract_path": "core/canonical-html/contract-v1.json",
|
|
6
|
+
"provenance_path": "core/canonical-html/provenance.json",
|
|
7
|
+
"expected_sha256": "3c0c11b7be8b2301409c47416269dd5579fac90f6e7a4e9ca9c3caef50bd2e28"
|
|
8
|
+
},
|
|
9
|
+
"decision": {
|
|
10
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
11
|
+
"status": "accepted",
|
|
12
|
+
"maturity": "hash-checked",
|
|
13
|
+
"findings": []
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "interface-invalid-host-path",
|
|
3
|
+
"description": "Local sibling checkout paths are rejected from public interface data.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.interface_declaration.v1",
|
|
6
|
+
"repo_id": "governed-pipeline",
|
|
7
|
+
"realized_edges": [
|
|
8
|
+
{
|
|
9
|
+
"id": "bad-path",
|
|
10
|
+
"provider_repo": "spec",
|
|
11
|
+
"consumer_repo": "governed-pipeline",
|
|
12
|
+
"interface_id": "spec-certificate",
|
|
13
|
+
"ref": {"kind": "repo-relative-path", "value": "/absolute/private/spec-certificate-canon.mjs"},
|
|
14
|
+
"maturity": "realized-edge-observed",
|
|
15
|
+
"evidence": []
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"promised_edges": []
|
|
19
|
+
},
|
|
20
|
+
"decision": {
|
|
21
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
22
|
+
"status": "rejected",
|
|
23
|
+
"maturity": "presence-only",
|
|
24
|
+
"findings": [{"code": "interface.ref.host_path", "severity": "block", "message": "Interface refs must not contain host absolute paths."}]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "interface-valid-realized-and-promised",
|
|
3
|
+
"description": "Interface declarations can carry realized and promised edges with safe refs.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.interface_declaration.v1",
|
|
6
|
+
"repo_id": "governed-pipeline",
|
|
7
|
+
"realized_edges": [
|
|
8
|
+
{
|
|
9
|
+
"id": "harness-pin",
|
|
10
|
+
"provider_repo": "agent-harness",
|
|
11
|
+
"consumer_repo": "governed-pipeline",
|
|
12
|
+
"interface_id": "phase-loop-cli-entrypoint",
|
|
13
|
+
"ref": {"kind": "git-ref", "value": "v0.1.12"},
|
|
14
|
+
"maturity": "realized-edge-observed",
|
|
15
|
+
"evidence": [{"ref": "tools/agent-harness.pin.json", "digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000"}]
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"promised_edges": [
|
|
19
|
+
{
|
|
20
|
+
"id": "contract-package",
|
|
21
|
+
"provider_repo": "consiliency-contract",
|
|
22
|
+
"consumer_repo": "governed-pipeline",
|
|
23
|
+
"interface_id": "consiliency-contract-v1",
|
|
24
|
+
"ref": {"kind": "package-coordinate", "value": "@consiliency/contract@^0.1.0"},
|
|
25
|
+
"maturity": "presence-only",
|
|
26
|
+
"evidence": []
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"decision": {
|
|
31
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
32
|
+
"status": "accepted",
|
|
33
|
+
"maturity": "realized-edge-observed",
|
|
34
|
+
"findings": []
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "loop-gate-invalid-blocking-default",
|
|
3
|
+
"description": "Phase 0 contract data must not make blocking the default.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.loop_gate_scenario.v1",
|
|
6
|
+
"gate": "presence",
|
|
7
|
+
"severity_default": "block"
|
|
8
|
+
},
|
|
9
|
+
"decision": {
|
|
10
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
11
|
+
"status": "rejected",
|
|
12
|
+
"maturity": "presence-only",
|
|
13
|
+
"findings": [{"code": "gate.default.blocking", "severity": "block", "message": "Blocking must be opt-in during Phase 0."}]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "loop-gate-missing-doc-warns",
|
|
3
|
+
"description": "Phase 0 missing document checks warn by default.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.loop_gate_scenario.v1",
|
|
6
|
+
"gate": "presence",
|
|
7
|
+
"missing": ["runbook"],
|
|
8
|
+
"consumer_policy": {"blocking_opt_in": false}
|
|
9
|
+
},
|
|
10
|
+
"decision": {
|
|
11
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
12
|
+
"status": "warn",
|
|
13
|
+
"maturity": "presence-only",
|
|
14
|
+
"findings": [{"code": "presence.missing_doc", "severity": "warn", "message": "Required document is missing at L0."}]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "manifest-invalid-absolute-path",
|
|
3
|
+
"description": "Host absolute paths are rejected from public package data.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.manifest.v1",
|
|
6
|
+
"contract_version": "0.1.0",
|
|
7
|
+
"repo": {"id": "bad", "display_name": "Bad", "default_branch": "main"},
|
|
8
|
+
"declaration": {"mode": "baseline-only"},
|
|
9
|
+
"documents": [
|
|
10
|
+
{"id": "readme", "class": "index", "path": "/absolute/private/README.md", "maturity": "presence-only", "target_level": "L0", "required": true}
|
|
11
|
+
],
|
|
12
|
+
"interfaces": ".consiliency/interfaces.json"
|
|
13
|
+
},
|
|
14
|
+
"decision": {
|
|
15
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
16
|
+
"status": "rejected",
|
|
17
|
+
"maturity": "presence-only",
|
|
18
|
+
"findings": [{"code": "path.absolute", "severity": "block", "message": "Paths must be repo-relative."}]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "manifest-invalid-certified-maturity",
|
|
3
|
+
"description": "Phase 0 vectors must not claim certified maturity.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.manifest.v1",
|
|
6
|
+
"contract_version": "0.1.0",
|
|
7
|
+
"repo": {"id": "bad", "display_name": "Bad", "default_branch": "main"},
|
|
8
|
+
"declaration": {"mode": "baseline-only"},
|
|
9
|
+
"documents": [
|
|
10
|
+
{"id": "glossary", "class": "proj-S", "path": "docs/glossary.html", "maturity": "certified", "target_level": "L1", "required": true}
|
|
11
|
+
],
|
|
12
|
+
"interfaces": ".consiliency/interfaces.json"
|
|
13
|
+
},
|
|
14
|
+
"decision": {
|
|
15
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
16
|
+
"status": "rejected",
|
|
17
|
+
"maturity": "presence-only",
|
|
18
|
+
"findings": [{"code": "maturity.certified.phase0", "severity": "block", "message": "Certified maturity is reserved for post-XG-1 evidence."}]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "manifest-invalid-path-and-ref",
|
|
3
|
+
"description": "A document declaration must use exactly one of path or ref.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.manifest.v1",
|
|
6
|
+
"contract_version": "0.1.0",
|
|
7
|
+
"repo": {"id": "bad", "display_name": "Bad", "default_branch": "main"},
|
|
8
|
+
"declaration": {"mode": "baseline-only"},
|
|
9
|
+
"documents": [
|
|
10
|
+
{"id": "readme", "class": "index", "path": "README.md", "ref": {"kind": "url", "value": "https://example.invalid"}, "maturity": "presence-only", "target_level": "L0", "required": true}
|
|
11
|
+
],
|
|
12
|
+
"interfaces": ".consiliency/interfaces.json"
|
|
13
|
+
},
|
|
14
|
+
"decision": {
|
|
15
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
16
|
+
"status": "rejected",
|
|
17
|
+
"maturity": "presence-only",
|
|
18
|
+
"findings": [{"code": "document.path_ref.exclusive", "severity": "block", "message": "Document declarations must use exactly one of path or ref."}]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "manifest-invalid-unknown-archetype",
|
|
3
|
+
"description": "Unknown archetypes are rejected.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.manifest.v1",
|
|
6
|
+
"contract_version": "0.1.0",
|
|
7
|
+
"repo": {"id": "bad", "display_name": "Bad", "default_branch": "main"},
|
|
8
|
+
"declaration": {"mode": "archetyped", "archetypes": ["website"], "modifiers": []},
|
|
9
|
+
"documents": [],
|
|
10
|
+
"interfaces": ".consiliency/interfaces.json"
|
|
11
|
+
},
|
|
12
|
+
"decision": {
|
|
13
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
14
|
+
"status": "rejected",
|
|
15
|
+
"maturity": "presence-only",
|
|
16
|
+
"findings": [{"code": "archetype.unknown", "severity": "block", "message": "Archetype is not in the contract registry."}]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "manifest-valid-baseline-only",
|
|
3
|
+
"description": "A baseline-only declaration is legal and carries no archetype list.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.manifest.v1",
|
|
6
|
+
"contract_version": "0.1.0",
|
|
7
|
+
"repo": {"id": "notes", "display_name": "Notes", "default_branch": "main"},
|
|
8
|
+
"declaration": {"mode": "baseline-only"},
|
|
9
|
+
"documents": [
|
|
10
|
+
{"id": "readme", "class": "index", "path": "README.md", "maturity": "presence-only", "target_level": "L0", "required": true}
|
|
11
|
+
],
|
|
12
|
+
"interfaces": ".consiliency/interfaces.json"
|
|
13
|
+
},
|
|
14
|
+
"decision": {
|
|
15
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
16
|
+
"status": "accepted",
|
|
17
|
+
"maturity": "presence-only",
|
|
18
|
+
"findings": []
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "manifest-valid-product",
|
|
3
|
+
"description": "An archetyped product manifest with repo-relative documents is accepted at L0.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.manifest.v1",
|
|
6
|
+
"contract_version": "0.1.0",
|
|
7
|
+
"repo": {"id": "portal", "display_name": "Consiliency Portal", "default_branch": "main"},
|
|
8
|
+
"declaration": {"mode": "archetyped", "archetypes": ["product"], "modifiers": ["user-facing"]},
|
|
9
|
+
"documents": [
|
|
10
|
+
{"id": "readme", "class": "index", "path": "README.md", "maturity": "presence-only", "target_level": "L0", "required": true},
|
|
11
|
+
{"id": "contract-version-status", "class": "index", "path": ".consiliency/status.json", "maturity": "presence-only", "target_level": "L0", "required": true}
|
|
12
|
+
],
|
|
13
|
+
"interfaces": ".consiliency/interfaces.json"
|
|
14
|
+
},
|
|
15
|
+
"decision": {
|
|
16
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
17
|
+
"status": "accepted",
|
|
18
|
+
"maturity": "presence-only",
|
|
19
|
+
"findings": []
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "version-skew-compatible",
|
|
3
|
+
"description": "Contract and package versions in the 0.1 range are compatible.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.version_skew_scenario.v1",
|
|
6
|
+
"contract_version": "0.1.0",
|
|
7
|
+
"package_version": "0.1.0"
|
|
8
|
+
},
|
|
9
|
+
"decision": {
|
|
10
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
11
|
+
"status": "accepted",
|
|
12
|
+
"maturity": "presence-only",
|
|
13
|
+
"findings": []
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "version-skew-incompatible-warns",
|
|
3
|
+
"description": "Version skew emits a warning by default during Phase 0.",
|
|
4
|
+
"input": {
|
|
5
|
+
"schema": "consiliency.version_skew_scenario.v1",
|
|
6
|
+
"contract_version": "0.2.0",
|
|
7
|
+
"package_version": "0.1.0"
|
|
8
|
+
},
|
|
9
|
+
"decision": {
|
|
10
|
+
"schema": "consiliency.conformance_decision.v1",
|
|
11
|
+
"status": "warn",
|
|
12
|
+
"maturity": "presence-only",
|
|
13
|
+
"findings": [{"code": "version_skew.incompatible", "severity": "warn", "message": "Contract and package versions are outside the compatible range."}]
|
|
14
|
+
}
|
|
15
|
+
}
|