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
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ here.
duplicate targets and no selection; profile negotiation, Dialect outputs and delivery receipts
remain separate work.

- RFC 0020's accepted issue #228 amendment: workflow output envelopes name their contributing
rule outside Core's unchanged disposition; every stage records a closed disposition summary
and a reproducible seeded sample; the workflow verifier recomputes both and refuses disagreement;
and drift is a comparison over two verified bundles of the same workflow, without a verdict.
The closed workflow schema and hand-written two-stage contract fixture carry the new records,
digest recomputation, drift rows and refusal vectors. No workflow implementation, recorded
executor run or conformance claim is added.

- Official-draft Policy promotion preparation: versioned closed format `1.0.0`
schemas, retained-byte examples and 124 staged agreement vectors, explicit
migration/provenance and a scoped independent draft release route through the
Expand Down
6 changes: 6 additions & 0 deletions conformance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ the default branch remains Review until then. These vectors become a released
corpus only under their exact Policy tag and a maintainer-published GitHub
release. Passing fixtures alone establishes no Core or Policy conformance claim.

The hand-written
[`conformance/workflow`](https://github.com/Judgment-Pack/judgment-pack-spec/tree/main/conformance/workflow)
contract fixture exercises RFC 0020's workflow document, output, summary, sample,
verifier-refusal and drift forms. It is schema and byte-rule test data, not a recorded executor
run or a workflow conformance corpus.

[`manifest.json`](manifest.json) is the machine-readable case index. Its shape is defined by
[`manifest.schema.json`](manifest.schema.json).

Expand Down
15 changes: 15 additions & 0 deletions conformance/workflow/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Workflow contract fixture

These hand-written records exercise the version-1 workflow schema and RFC 0020 companion forms.
`left-bundle.json` and `right-bundle.json` each carry both stages' output envelopes, retained Core
dispositions and recorded summaries. `sample.json` is redrawn from its seed; `drift.json` is
recomputed from the two bundles. The `reports/` files are the closed verifier events expected for
the corresponding refusal vectors.

Each summary's `recordsDigest` was fixed independently as SHA-256 of the canonical JSON array of
its stage's dispositions in recorded order. The repository test reconstructs those exact bytes,
recomputes every summary counter and digest, redraws the sample, and reconstructs the complete
drift result. The vectors are deliberately authored inputs, not output captured from an executor.

This fixture establishes no implementation, execution, authentication, verdict or conformance
claim. The full research recording described by companion §11 remains future work.
53 changes: 53 additions & 0 deletions conformance/workflow/drift.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"result": "drift",
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"leftExecutionDigest": "sha256:2121212121212121212121212121212121212121212121212121212121212121",
"rightExecutionDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"stages": [
{
"stage": "organisations",
"records": 0,
"byKind": { "outcome": 0, "not-applicable": 0, "unresolved": 0 },
"byOutcome": { "low": 1, "review": -1 },
"byReason": {},
"byRule": {
"low": { "contributors": {}, "fallback": 1 },
"review": { "contributors": { "r-review": -1 }, "fallback": 0 }
}
},
{
"stage": "people",
"records": 0,
"byKind": { "outcome": 0, "not-applicable": 1, "unresolved": -1 },
"byOutcome": {},
"byReason": { "unknown": -1 },
"byRule": {}
}
],
"records": [
{
"change": "changed",
"stage": "organisations",
"payloadDigest": "sha256:1010101010101010101010101010101010101010101010101010101010101010",
"occurrence": 1,
"left": { "kind": "outcome", "outcomeId": "review", "reasons": [], "handoff": { "state": "none" } },
"right": { "kind": "outcome", "outcomeId": "low", "reasons": [], "handoff": { "state": "none" } }
},
{
"change": "removed",
"stage": "people",
"payloadDigest": "sha256:5050505050505050505050505050505050505050505050505050505050505050",
"occurrence": 1,
"left": { "kind": "unresolved", "reasons": ["unknown"], "handoff": { "state": "requested", "triggeredBy": ["unknown"] } },
"right": null
},
{
"change": "added",
"stage": "people",
"payloadDigest": "sha256:6060606060606060606060606060606060606060606060606060606060606060",
"occurrence": 1,
"left": null,
"right": { "kind": "not-applicable", "reasons": ["not-applicable"], "handoff": { "state": "none" } }
}
]
}
4 changes: 4 additions & 0 deletions conformance/workflow/finding.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"result": "finding",
"finding": "preparation-mismatch"
}
87 changes: 87 additions & 0 deletions conformance/workflow/left-bundle.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"fixtureVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"executionDigest": "sha256:2121212121212121212121212121212121212121212121212121212121212121",
"execution": "left-run",
"stages": [
{
"stage": "organisations",
"records": [
{
"recordDigest": "sha256:7171717171717171717171717171717171717171717171717171717171717171",
"output": {
"outputRecordVersion": 1,
"payloadDigest": "sha256:1010101010101010101010101010101010101010101010101010101010101010",
"contributingRule": "r-review",
"lineage": {
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "left-run", "stage": "organisations", "instance": "org-instance",
"publishedDialectDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bindingDocumentDigest": null,
"boundDialectDigest": "sha256:a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1",
"packDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"releaseDigest": "sha256:b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
"preparationDigest": "sha256:b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
"auditDigest": "sha256:b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3",
"outputPointer": "/organisations", "index": 0,
"rootCaseDigest": "sha256:0101010101010101010101010101010101010101010101010101010101010101",
"caseDigest": "sha256:0202020202020202020202020202020202020202020202020202020202020202",
"parentRecord": null, "selectionDigest": null,
"relation": { "label": "discovered-for", "direction": "output-to-parent" },
"influence": { "classes": ["generated"], "generatedInfluence": true }
}
},
"disposition": { "kind": "outcome", "outcomeId": "review", "reasons": [], "handoff": { "state": "none" } }
}
],
"summary": {
"summaryVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "left-run", "stage": "organisations", "records": 1,
"recordsDigest": "sha256:8f69a6171c67069c21de3cd559af7917c71f6940d9a4ebcc381f88bf949f2a23",
"byKind": { "outcome": 1, "not-applicable": 0, "unresolved": 0 },
"byOutcome": { "review": 1 }, "byReason": {},
"byRule": { "review": { "contributors": { "r-review": 1 }, "fallback": 0 } }
}
},
{
"stage": "people",
"records": [
{
"recordDigest": "sha256:7474747474747474747474747474747474747474747474747474747474747474",
"output": {
"outputRecordVersion": 1,
"payloadDigest": "sha256:5050505050505050505050505050505050505050505050505050505050505050",
"lineage": {
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "left-run", "stage": "people", "instance": "people-two",
"publishedDialectDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bindingDocumentDigest": null,
"boundDialectDigest": "sha256:c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1",
"packDigest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"releaseDigest": "sha256:d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1",
"preparationDigest": "sha256:d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4",
"auditDigest": "sha256:d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5",
"outputPointer": "/people", "index": 0,
"rootCaseDigest": "sha256:0101010101010101010101010101010101010101010101010101010101010101",
"caseDigest": "sha256:0404040404040404040404040404040404040404040404040404040404040404",
"parentRecord": "sha256:7171717171717171717171717171717171717171717171717171717171717171",
"selectionDigest": "sha256:1313131313131313131313131313131313131313131313131313131313131313",
"relation": { "label": "person-at-organisation", "direction": "output-to-parent" },
"influence": { "classes": ["generated"], "generatedInfluence": true }
}
},
"disposition": { "kind": "unresolved", "reasons": ["unknown"], "handoff": { "state": "requested", "triggeredBy": ["unknown"] } }
}
],
"summary": {
"summaryVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "left-run", "stage": "people", "records": 1,
"recordsDigest": "sha256:444f9f1322ba0d9696fb799fb7e39261e8855a55d9ebed6b547c464963297d60",
"byKind": { "outcome": 0, "not-applicable": 0, "unresolved": 1 },
"byOutcome": {}, "byReason": { "unknown": 1 }, "byRule": {}
}
}
]
}
22 changes: 22 additions & 0 deletions conformance/workflow/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"manifestVersion": 1,
"schema": "../../schema/workflow-1.schema.json",
"files": [
{ "path": "workflow.json", "schemaValid": true },
{ "path": "left-bundle.json", "schemaValid": true },
{ "path": "right-bundle.json", "schemaValid": true },
{ "path": "sample.json", "schemaValid": true },
{ "path": "drift.json", "schemaValid": true },
{ "path": "reading.json", "schemaValid": true },
{ "path": "finding.json", "schemaValid": true },
{ "path": "reports/sample-size-over-bound.json", "schemaValid": true },
{ "path": "reports/sample-seed-invalid.json", "schemaValid": true },
{ "path": "reports/summary-mismatch.json", "schemaValid": true },
{ "path": "vectors/sample-size-over-bound.json", "schemaValid": true },
{ "path": "vectors/sample-seed-invalid.json", "schemaValid": false },
{ "path": "vectors/sample-seed-empty.json", "schemaValid": false },
{ "path": "vectors/sample-seed-missing.json", "schemaValid": false },
{ "path": "vectors/sample-seed-oversized.json", "schemaValid": false },
{ "path": "vectors/summary-mismatch.json", "schemaValid": true }
]
}
18 changes: 18 additions & 0 deletions conformance/workflow/reading.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"result": "reading",
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"executionDigest": "sha256:2121212121212121212121212121212121212121212121212121212121212121",
"consistency": "agrees",
"completion": "complete",
"preparations": "agree",
"authentication": "not-established",
"dispositions": "not-replayed",
"counts": {
"stages": 2,
"instances": 2,
"outputs": 2,
"selections": 1,
"summaries": 2,
"samples": 1
}
}
4 changes: 4 additions & 0 deletions conformance/workflow/reports/sample-seed-invalid.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"result": "refusal",
"refusal": "input-malformed"
}
4 changes: 4 additions & 0 deletions conformance/workflow/reports/sample-size-over-bound.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"result": "refusal",
"refusal": "input-over-bound"
}
4 changes: 4 additions & 0 deletions conformance/workflow/reports/summary-mismatch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"result": "refusal",
"refusal": "summary-mismatch"
}
86 changes: 86 additions & 0 deletions conformance/workflow/right-bundle.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
{
"fixtureVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"executionDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"execution": "right-run",
"stages": [
{
"stage": "organisations",
"records": [
{
"recordDigest": "sha256:8181818181818181818181818181818181818181818181818181818181818181",
"output": {
"outputRecordVersion": 1,
"payloadDigest": "sha256:1010101010101010101010101010101010101010101010101010101010101010",
"lineage": {
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "right-run", "stage": "organisations", "instance": "org-instance",
"publishedDialectDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bindingDocumentDigest": null,
"boundDialectDigest": "sha256:a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1",
"packDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"releaseDigest": "sha256:b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
"preparationDigest": "sha256:b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4",
"auditDigest": "sha256:b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5",
"outputPointer": "/organisations", "index": 0,
"rootCaseDigest": "sha256:0101010101010101010101010101010101010101010101010101010101010101",
"caseDigest": "sha256:0202020202020202020202020202020202020202020202020202020202020202",
"parentRecord": null, "selectionDigest": null,
"relation": { "label": "discovered-for", "direction": "output-to-parent" },
"influence": { "classes": ["generated"], "generatedInfluence": true }
}
},
"disposition": { "kind": "outcome", "outcomeId": "low", "reasons": [], "handoff": { "state": "none" } }
}
],
"summary": {
"summaryVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "right-run", "stage": "organisations", "records": 1,
"recordsDigest": "sha256:d917664b0b7081729703649c7a9d96b2cf3e220371d577b1b6ce604d2900b9d9",
"byKind": { "outcome": 1, "not-applicable": 0, "unresolved": 0 },
"byOutcome": { "low": 1 }, "byReason": {},
"byRule": { "low": { "contributors": {}, "fallback": 1 } }
}
},
{
"stage": "people",
"records": [
{
"recordDigest": "sha256:8484848484848484848484848484848484848484848484848484848484848484",
"output": {
"outputRecordVersion": 1,
"payloadDigest": "sha256:6060606060606060606060606060606060606060606060606060606060606060",
"lineage": {
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "right-run", "stage": "people", "instance": "people-three",
"publishedDialectDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bindingDocumentDigest": null,
"boundDialectDigest": "sha256:c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1",
"packDigest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"releaseDigest": "sha256:d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1",
"preparationDigest": "sha256:d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8",
"auditDigest": "sha256:d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9",
"outputPointer": "/people", "index": 0,
"rootCaseDigest": "sha256:0101010101010101010101010101010101010101010101010101010101010101",
"caseDigest": "sha256:0606060606060606060606060606060606060606060606060606060606060606",
"parentRecord": "sha256:8181818181818181818181818181818181818181818181818181818181818181",
"selectionDigest": "sha256:1414141414141414141414141414141414141414141414141414141414141414",
"relation": { "label": "person-at-organisation", "direction": "output-to-parent" },
"influence": { "classes": ["generated"], "generatedInfluence": true }
}
},
"disposition": { "kind": "not-applicable", "reasons": ["not-applicable"], "handoff": { "state": "none" } }
}
],
"summary": {
"summaryVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "right-run", "stage": "people", "records": 1,
"recordsDigest": "sha256:f0bd46c6e2634becb94e5fc6f1707a04eaf3d970e65552adf1e9801932aae105",
"byKind": { "outcome": 0, "not-applicable": 1, "unresolved": 0 },
"byOutcome": {}, "byReason": {}, "byRule": {}
}
}
]
}
15 changes: 15 additions & 0 deletions conformance/workflow/sample.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"selectionVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "left-run",
"upstreamStage": "organisations",
"outputSetDigest": "sha256:1212121212121212121212121212121212121212121212121212121212121212",
"selected": [
"sha256:7171717171717171717171717171717171717171717171717171717171717171"
],
"mode": "sample",
"revision": 1,
"seed": "0000000000000000000000000000000000000000000000000000000000000000",
"size": 1,
"algorithm": "sha256-rank-v1"
}
21 changes: 21 additions & 0 deletions conformance/workflow/vectors/sample-seed-empty.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"vectorVersion": 1,
"kind": "sample",
"expectedRefusal": "input-malformed",
"stageMaxSize": 1,
"selection": {
"selectionVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "left-run",
"upstreamStage": "organisations",
"outputSetDigest": "sha256:1212121212121212121212121212121212121212121212121212121212121212",
"selected": [
"sha256:7171717171717171717171717171717171717171717171717171717171717171"
],
"mode": "sample",
"revision": 1,
"seed": "",
"size": 1,
"algorithm": "sha256-rank-v1"
}
}
21 changes: 21 additions & 0 deletions conformance/workflow/vectors/sample-seed-invalid.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"vectorVersion": 1,
"kind": "sample",
"expectedRefusal": "input-malformed",
"stageMaxSize": 1,
"selection": {
"selectionVersion": 1,
"workflowDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"execution": "left-run",
"upstreamStage": "organisations",
"outputSetDigest": "sha256:1212121212121212121212121212121212121212121212121212121212121212",
"selected": [
"sha256:7171717171717171717171717171717171717171717171717171717171717171"
],
"mode": "sample",
"revision": 1,
"seed": "not-a-64-character-lowercase-hex-seed",
"size": 1,
"algorithm": "sha256-rank-v1"
}
}
Loading
Loading