@hellraisercenobit/ai-engineering-gate 0.8.0
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.
- package/README.md +82 -0
- package/agents/design-pattern-reviewer.md +40 -0
- package/agents/modern-typescript-reviewer.md +24 -0
- package/agents/testing-pattern-reviewer.md +23 -0
- package/bin/ai-engineering-gate.mjs +6 -0
- package/contracts/axi/axi-standard.md +273 -0
- package/contracts/axi/pin.json +36 -0
- package/contracts/members.json +58 -0
- package/contracts/schemas/arbitration.schema.json +45 -0
- package/contracts/schemas/decision-envelope.schema.json +215 -0
- package/contracts/schemas/declaration.schema.json +190 -0
- package/contracts/schemas/dispute.schema.json +67 -0
- package/contracts/schemas/evidence-append.schema.json +72 -0
- package/contracts/schemas/gate-output.schema.json +296 -0
- package/contracts/schemas/marker.schema.json +75 -0
- package/contracts/schemas/review-envelope.schema.json +378 -0
- package/contracts/schemas/verdict-record.schema.json +191 -0
- package/contracts/suite-contract.md +270 -0
- package/dist/ai-engineering-gate.mjs +2762 -0
- package/package.json +47 -0
- package/skills/engineering/review-design-patterns/LICENSE +6 -0
- package/skills/engineering/review-design-patterns/SKILL.md +196 -0
- package/skills/engineering/review-design-patterns/agents/openai.yaml +3 -0
- package/skills/engineering/review-design-patterns/references/smell-signatures.md +117 -0
- package/skills/engineering/review-design-patterns/review-design-patterns.yaml +25 -0
- package/skills/engineering/review-modern-typescript/LICENSE +21 -0
- package/skills/engineering/review-modern-typescript/SKILL.md +88 -0
- package/skills/engineering/review-modern-typescript/agents/openai.yaml +3 -0
- package/skills/engineering/review-modern-typescript/references/smell-signatures.md +36 -0
- package/skills/engineering/review-modern-typescript/review-modern-typescript.yaml +22 -0
- package/skills/engineering/review-testing-patterns/SKILL.md +108 -0
- package/skills/engineering/review-testing-patterns/agents/openai.yaml +4 -0
- package/skills/engineering/review-testing-patterns/references/compiler-profile.mjs +103 -0
- package/skills/engineering/review-testing-patterns/references/smell-signatures.md +30 -0
- package/skills/engineering/review-testing-patterns/review-testing-patterns.yaml +23 -0
- package/skills/engineering/transpose-design-patterns/LICENSE +6 -0
- package/skills/engineering/transpose-design-patterns/SKILL.md +231 -0
- package/skills/engineering/transpose-design-patterns/agents/openai.yaml +3 -0
- package/skills/engineering/transpose-design-patterns/references/arbitration.schema.json +45 -0
- package/skills/engineering/transpose-design-patterns/references/decision-envelope.schema.json +215 -0
- package/skills/engineering/transpose-design-patterns/references/declaration.schema.json +190 -0
- package/skills/engineering/transpose-design-patterns/references/design-decision-record.schema.json +731 -0
- package/skills/engineering/transpose-design-patterns/references/dispute.schema.json +67 -0
- package/skills/engineering/transpose-design-patterns/references/evidence-append.schema.json +72 -0
- package/skills/engineering/transpose-design-patterns/references/marker.schema.json +75 -0
- package/skills/engineering/transpose-design-patterns/references/pattern-catalog.md +305 -0
- package/skills/engineering/transpose-design-patterns/references/record.example.json +120 -0
- package/skills/engineering/transpose-design-patterns/references/review-envelope.schema.json +378 -0
- package/skills/engineering/transpose-design-patterns/references/suite-contract.md +270 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-angular.md +224 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-php.md +561 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-quarkus.md +283 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-react.md +256 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-vanilla.md +204 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-vue.md +234 -0
- package/skills/engineering/transpose-design-patterns/transpose-design-patterns.yaml +24 -0
- package/skills/engineering/transpose-modern-typescript/LICENSE +21 -0
- package/skills/engineering/transpose-modern-typescript/SKILL.md +90 -0
- package/skills/engineering/transpose-modern-typescript/agents/openai.yaml +3 -0
- package/skills/engineering/transpose-modern-typescript/references/arbitration.schema.json +45 -0
- package/skills/engineering/transpose-modern-typescript/references/catalog.md +38 -0
- package/skills/engineering/transpose-modern-typescript/references/collections.md +50 -0
- package/skills/engineering/transpose-modern-typescript/references/compatibility.md +61 -0
- package/skills/engineering/transpose-modern-typescript/references/decision-envelope.schema.json +215 -0
- package/skills/engineering/transpose-modern-typescript/references/decision-record.schema.json +830 -0
- package/skills/engineering/transpose-modern-typescript/references/declaration.schema.json +190 -0
- package/skills/engineering/transpose-modern-typescript/references/dispute.schema.json +67 -0
- package/skills/engineering/transpose-modern-typescript/references/evidence-append.schema.json +72 -0
- package/skills/engineering/transpose-modern-typescript/references/idioms.md +74 -0
- package/skills/engineering/transpose-modern-typescript/references/marker.schema.json +75 -0
- package/skills/engineering/transpose-modern-typescript/references/platform.md +147 -0
- package/skills/engineering/transpose-modern-typescript/references/record.example.json +172 -0
- package/skills/engineering/transpose-modern-typescript/references/record.md +37 -0
- package/skills/engineering/transpose-modern-typescript/references/review-envelope.schema.json +378 -0
- package/skills/engineering/transpose-modern-typescript/references/suite-contract.md +270 -0
- package/skills/engineering/transpose-modern-typescript/references/types.md +97 -0
- package/skills/engineering/transpose-modern-typescript/transpose-modern-typescript.yaml +22 -0
- package/skills/engineering/transpose-testing-patterns/SKILL.md +96 -0
- package/skills/engineering/transpose-testing-patterns/agents/openai.yaml +4 -0
- package/skills/engineering/transpose-testing-patterns/references/arbitration.schema.json +45 -0
- package/skills/engineering/transpose-testing-patterns/references/catalog.md +218 -0
- package/skills/engineering/transpose-testing-patterns/references/decision-envelope.schema.json +215 -0
- package/skills/engineering/transpose-testing-patterns/references/decision-record.schema.json +857 -0
- package/skills/engineering/transpose-testing-patterns/references/declaration.schema.json +190 -0
- package/skills/engineering/transpose-testing-patterns/references/detect-adapter.mjs +98 -0
- package/skills/engineering/transpose-testing-patterns/references/dispute.schema.json +67 -0
- package/skills/engineering/transpose-testing-patterns/references/doubles-data.md +45 -0
- package/skills/engineering/transpose-testing-patterns/references/evidence-append.schema.json +72 -0
- package/skills/engineering/transpose-testing-patterns/references/journal-event.schema.json +115 -0
- package/skills/engineering/transpose-testing-patterns/references/marker.schema.json +75 -0
- package/skills/engineering/transpose-testing-patterns/references/record.example.json +230 -0
- package/skills/engineering/transpose-testing-patterns/references/record.md +25 -0
- package/skills/engineering/transpose-testing-patterns/references/review-envelope.schema.json +378 -0
- package/skills/engineering/transpose-testing-patterns/references/suite-contract.md +270 -0
- package/skills/engineering/transpose-testing-patterns/references/tdd.md +62 -0
- package/skills/engineering/transpose-testing-patterns/references/transpose-codeception.md +84 -0
- package/skills/engineering/transpose-testing-patterns/references/transpose-karma-jasmine-angular.md +73 -0
- package/skills/engineering/transpose-testing-patterns/references/transpose-vitest.md +111 -0
- package/skills/engineering/transpose-testing-patterns/references/typescript.md +42 -0
- package/skills/engineering/transpose-testing-patterns/transpose-testing-patterns.yaml +23 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Collections, memory and consumption
|
|
2
|
+
|
|
3
|
+
## MT-06 - Match the collection to its operations
|
|
4
|
+
|
|
5
|
+
**Intent/use:** choose object/Record for a known shape, Array for ordered positional data,
|
|
6
|
+
Map for dynamic associations and Set for membership/uniqueness. Examine repeated scans
|
|
7
|
+
that can share a maintained index.
|
|
8
|
+
**Alternatives/trade-offs:** a one-shot small scan can be clearer and cheaper; index build
|
|
9
|
+
and updates cost time and memory. Map/Set use SameValueZero and object identity; ordinary
|
|
10
|
+
object keys coerce non-symbols to strings. Account for insertion order, duplicate policy
|
|
11
|
+
(first/last/all), missing values and JSON boundaries.
|
|
12
|
+
**Avoid:** claiming universal speed or guaranteed constant time; rebuilding an index per
|
|
13
|
+
lookup; replacing a closed exhaustive typed table with an unchecked dynamic Map.
|
|
14
|
+
**Invariants:** keys, duplicate/order policy, outputs and updates stay consistent. Average
|
|
15
|
+
Map access is sublinear by specification, not a promise of a particular implementation.
|
|
16
|
+
**Sources/support:** [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map),
|
|
17
|
+
[Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set).
|
|
18
|
+
Verify newer methods separately.
|
|
19
|
+
|
|
20
|
+
## MT-07 - Match retention to ownership
|
|
21
|
+
|
|
22
|
+
**Intent/use:** WeakMap/WeakSet suit metadata or membership tied to caller-owned object
|
|
23
|
+
lifetimes when keys must not be retained solely by the association.
|
|
24
|
+
**Alternatives/trade-offs:** Map/Set plus explicit deletion for enumeration, size, eviction
|
|
25
|
+
or deterministic ownership. Bounded strong caches need expiry/eviction and invalidation.
|
|
26
|
+
**Avoid:** enumerating weak collections, relying on collection timing, testing by forced GC,
|
|
27
|
+
or claiming weak keys clean listeners/connections. Other strong references can retain keys.
|
|
28
|
+
Weak-key types beyond objects require a separate compatibility check.
|
|
29
|
+
**Invariants:** get/set/has/delete behavior is observable without GC; resource cleanup is
|
|
30
|
+
explicit; no false enumeration, persistence or deterministic finalization guarantees.
|
|
31
|
+
**Sources/support:** [WeakMap](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap),
|
|
32
|
+
[WeakSet](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet).
|
|
33
|
+
|
|
34
|
+
## MT-08 - Produce only what is consumed
|
|
35
|
+
|
|
36
|
+
**Intent/use:** iterable/iterator protocols, function*, yield/yield* and async generators
|
|
37
|
+
can avoid a full intermediate result when only a prefix is consumed. Use for await...of
|
|
38
|
+
for asynchronous production; evaluate iterator helpers only where supported.
|
|
39
|
+
**Alternatives/trade-offs:** arrays serve replay, random access and small bounded results.
|
|
40
|
+
Generators defer side effects/errors and are usually consumed once per iterator. Streams
|
|
41
|
+
add backpressure and cancellation semantics (MT-10).
|
|
42
|
+
**Avoid:** making synchronous yield a UI-scheduling claim; hidden retained resources;
|
|
43
|
+
changing iteration error timing without consent; materializing immediately without benefit.
|
|
44
|
+
**Invariants:** counter shows no unrequested production; early break/return closes a
|
|
45
|
+
started iterator and reaches appropriate finally cleanup; exhaustion/error/replay contract
|
|
46
|
+
is explicit. A generator abandoned without close does not promise deterministic cleanup.
|
|
47
|
+
**Sources/support:** [generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*),
|
|
48
|
+
[iteration protocols](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols),
|
|
49
|
+
[for await...of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of).
|
|
50
|
+
Check compiler downlevel iteration and runtime symbols/helpers separately.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Compatibility and modules
|
|
2
|
+
|
|
3
|
+
## MT-22 - Match emitted modules to their consumers
|
|
4
|
+
|
|
5
|
+
**Intent/use:** import type for type-only dependencies where appropriate; explicit ESM/CJS
|
|
6
|
+
and module resolution choices aligned with package consumers. Consider import defer only
|
|
7
|
+
where compiler, emit, bundler and executing loader actually support its semantics.
|
|
8
|
+
**Alternatives/trade-offs:** preserve deliberate side-effect imports, existing loaders or
|
|
9
|
+
library distribution contracts. A compiler preset such as node20 describes specific module
|
|
10
|
+
behavior, not a promise that any deployed Node supports every new API.
|
|
11
|
+
**Avoid:** deleting runtime side effects by converting an import blindly, choosing a new
|
|
12
|
+
TS option independently of the build chain, importing browser globals into server startup.
|
|
13
|
+
**Invariants:** emitted entry points load on actual consumers; required effects still run;
|
|
14
|
+
type-only boundaries and package exports are correct.
|
|
15
|
+
**Sources/support:** [TS modules](https://www.typescriptlang.org/docs/handbook/modules/reference.html),
|
|
16
|
+
[TS config](https://www.typescriptlang.org/tsconfig/),
|
|
17
|
+
[import defer](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-9.html).
|
|
18
|
+
Check current stable compiler documentation when adopting a newer feature.
|
|
19
|
+
|
|
20
|
+
## MT-23 - Prove support across the deployment path
|
|
21
|
+
|
|
22
|
+
**Intent/use:** every proposed idiom/API needs a project-specific support decision.
|
|
23
|
+
Separate four layers: (1) parser/compiler syntax, (2) lib/type declarations, (3) emitted
|
|
24
|
+
code and bundler/transforms, (4) actual runtime/platform. Passing tsc proves neither (3)
|
|
25
|
+
nor (4). target/lib changes do not install runtime implementations.
|
|
26
|
+
**Alternatives/trade-offs:** retain compatible code, use an existing library, or propose an
|
|
27
|
+
explicitly costed polyfill/fallback when the user scope supports it. Do not silently raise
|
|
28
|
+
targets or add polyfills.
|
|
29
|
+
**Avoid:** a fixed TS minimum for all projects, a preview recommended as stable, npm version
|
|
30
|
+
treated as market share, or browser support used as Node/Bun/Deno evidence.
|
|
31
|
+
**Invariants:** identify exact supported targets and dated evidence for the feature; verify
|
|
32
|
+
all required contexts (browser/worker/server/SSR), platform prerequisites and fallback paths.
|
|
33
|
+
Unknown required targets remain an unresolved prerequisite for dependent adoption.
|
|
34
|
+
|
|
35
|
+
## Build the profile
|
|
36
|
+
|
|
37
|
+
Read the project lockfile and compiler command/version, tsconfig inheritance and relevant
|
|
38
|
+
strictness, target/lib/module/moduleResolution, package engines/type/exports, bundler,
|
|
39
|
+
Browserslist or equivalent product target policy, CI and deployment runtimes. Record
|
|
40
|
+
unknowns explicitly. In a library, inspect consumer support, not just the maintainer machine.
|
|
41
|
+
|
|
42
|
+
Sources of evidence: project files, runtime feature probes, official runtime release/API
|
|
43
|
+
docs, TypeScript release/config docs, and MDN compatibility data for the exact feature.
|
|
44
|
+
Record source, checked date, claim and targets covered. A single local browser probe only
|
|
45
|
+
proves that browser/version, not the whole supported fleet.
|
|
46
|
+
|
|
47
|
+
Baseline distinguishes newly available from widely available (30 months after interoperability
|
|
48
|
+
in its browser set). A page saying a capability has existed across browsers since March
|
|
49
|
+
2024 does not mean it was already Baseline widely available in March 2024. Object.groupBy
|
|
50
|
+
and Promise.withResolvers are useful examples to re-check, not permanent universal support
|
|
51
|
+
assertions. Baseline is not a substitute for actual product targets.
|
|
52
|
+
|
|
53
|
+
Use stable modern features supported by the project. This repository's smoke compiler is
|
|
54
|
+
locked for reproducibility and is not a language baseline imposed by the skills. Recheck
|
|
55
|
+
stable releases and their actual toolchain support when upgrading the fixture dependency.
|
|
56
|
+
|
|
57
|
+
**Sources:** [Baseline definition](https://web.dev/baseline),
|
|
58
|
+
[MDN compatibility data](https://github.com/mdn/browser-compat-data),
|
|
59
|
+
[TypeScript releases](https://www.typescriptlang.org/docs/handbook/release-notes/overview.html),
|
|
60
|
+
[Node API documentation](https://nodejs.org/api/), [Bun](https://bun.sh/docs),
|
|
61
|
+
[Deno](https://docs.deno.com/runtime/).
|
package/skills/engineering/transpose-modern-typescript/references/decision-envelope.schema.json
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/hellraisercenobit/skills/blob/main/contracts/schemas/decision-envelope.schema.json",
|
|
4
|
+
"title": "Decision record envelope 1.0.0",
|
|
5
|
+
"description": "The outer shape every dimension's decision record shares. Enforcement validates a record against this envelope and against the dimension's own schema; the dimension-specific body stays opaque here. Applicability is not a record field: it lives in the declaration.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"dimension",
|
|
9
|
+
"schemaVersion",
|
|
10
|
+
"catalogVersion",
|
|
11
|
+
"contractVersions",
|
|
12
|
+
"need",
|
|
13
|
+
"scope",
|
|
14
|
+
"base",
|
|
15
|
+
"revision",
|
|
16
|
+
"cites",
|
|
17
|
+
"plans"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"dimension": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"minLength": 1
|
|
23
|
+
},
|
|
24
|
+
"schemaVersion": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
27
|
+
},
|
|
28
|
+
"catalogVersion": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
31
|
+
},
|
|
32
|
+
"contractVersions": {
|
|
33
|
+
"description": "The contract versions this record's member supports.",
|
|
34
|
+
"type": "array",
|
|
35
|
+
"minItems": 1,
|
|
36
|
+
"uniqueItems": true,
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"need": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"minLength": 1
|
|
45
|
+
},
|
|
46
|
+
"scope": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"minItems": 1,
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"minLength": 1
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"base": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"minLength": 1
|
|
57
|
+
},
|
|
58
|
+
"revision": {
|
|
59
|
+
"$ref": "#/$defs/revision"
|
|
60
|
+
},
|
|
61
|
+
"cites": {
|
|
62
|
+
"description": "Artifacts and evidence sources that exist when the record is validated. A dangling path refuses the record; every cited path is hashed with the revision.",
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"$ref": "#/$defs/citation"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"plans": {
|
|
69
|
+
"description": "Artifacts the record commits to produce. Not checked when the record is written, so a record can precede the first affected write; required to exist before a review begins, is filed or is dispatched.",
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"$ref": "#/$defs/plan"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"$defs": {
|
|
77
|
+
"citation": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"additionalProperties": false,
|
|
80
|
+
"required": [
|
|
81
|
+
"path",
|
|
82
|
+
"checkedAt",
|
|
83
|
+
"claim",
|
|
84
|
+
"covers"
|
|
85
|
+
],
|
|
86
|
+
"properties": {
|
|
87
|
+
"path": {
|
|
88
|
+
"description": "A repository-relative path, or a path under the task's evidence. Both are checked for existence.",
|
|
89
|
+
"type": "string",
|
|
90
|
+
"minLength": 1
|
|
91
|
+
},
|
|
92
|
+
"checkedAt": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
95
|
+
},
|
|
96
|
+
"claim": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"minLength": 1
|
|
99
|
+
},
|
|
100
|
+
"covers": {
|
|
101
|
+
"type": "array",
|
|
102
|
+
"minItems": 1,
|
|
103
|
+
"items": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"minLength": 1
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"searched": {
|
|
109
|
+
"description": "Paths consulted and not found. Present when the citation supports a claim of unknown about a checkable fact.",
|
|
110
|
+
"type": "array",
|
|
111
|
+
"minItems": 1,
|
|
112
|
+
"items": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"minLength": 1
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"plan": {
|
|
120
|
+
"type": "object",
|
|
121
|
+
"additionalProperties": false,
|
|
122
|
+
"required": [
|
|
123
|
+
"path",
|
|
124
|
+
"role"
|
|
125
|
+
],
|
|
126
|
+
"properties": {
|
|
127
|
+
"path": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"minLength": 1
|
|
130
|
+
},
|
|
131
|
+
"role": {
|
|
132
|
+
"description": "A role the dimension defines. Testing patterns uses `test` and `production` so a replay knows which files stand alone.",
|
|
133
|
+
"type": "string",
|
|
134
|
+
"minLength": 1
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"revision": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"additionalProperties": false,
|
|
141
|
+
"required": [
|
|
142
|
+
"number",
|
|
143
|
+
"previous",
|
|
144
|
+
"reason"
|
|
145
|
+
],
|
|
146
|
+
"properties": {
|
|
147
|
+
"number": {
|
|
148
|
+
"type": "integer",
|
|
149
|
+
"minimum": 1
|
|
150
|
+
},
|
|
151
|
+
"previous": {
|
|
152
|
+
"type": [
|
|
153
|
+
"string",
|
|
154
|
+
"null"
|
|
155
|
+
],
|
|
156
|
+
"minLength": 1
|
|
157
|
+
},
|
|
158
|
+
"reason": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"minLength": 1
|
|
161
|
+
},
|
|
162
|
+
"changed": {
|
|
163
|
+
"description": "The cited paths this revision changed. Enforcement verifies their hashes differ from the previous revision's snapshot; absent, at least one cited path must differ.",
|
|
164
|
+
"type": "array",
|
|
165
|
+
"minItems": 1,
|
|
166
|
+
"uniqueItems": true,
|
|
167
|
+
"items": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"minLength": 1
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"addresses": {
|
|
173
|
+
"description": "Finding identifiers this revision closes. A judgment finding is closed by a revision that cites it together with a moved state.",
|
|
174
|
+
"type": "array",
|
|
175
|
+
"minItems": 1,
|
|
176
|
+
"uniqueItems": true,
|
|
177
|
+
"items": {
|
|
178
|
+
"type": "string",
|
|
179
|
+
"minLength": 1
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"allOf": [
|
|
184
|
+
{
|
|
185
|
+
"if": {
|
|
186
|
+
"properties": {
|
|
187
|
+
"number": {
|
|
188
|
+
"type": "integer",
|
|
189
|
+
"minimum": 2
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"required": [
|
|
193
|
+
"number"
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
"then": {
|
|
197
|
+
"properties": {
|
|
198
|
+
"previous": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"minLength": 1
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"else": {
|
|
205
|
+
"properties": {
|
|
206
|
+
"previous": {
|
|
207
|
+
"type": "null"
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|