@decantr/registry 1.0.4 → 2.0.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.
@@ -0,0 +1,255 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://decantr.ai/schemas/content-health-report.v1.json",
4
+ "title": "Decantr Content Health Report",
5
+ "type": "object",
6
+ "required": [
7
+ "$schema",
8
+ "generatedAt",
9
+ "contentRoot",
10
+ "status",
11
+ "score",
12
+ "summary",
13
+ "content",
14
+ "references",
15
+ "quality",
16
+ "ci",
17
+ "findings"
18
+ ],
19
+ "additionalProperties": false,
20
+ "properties": {
21
+ "$schema": {
22
+ "const": "https://decantr.ai/schemas/content-health-report.v1.json"
23
+ },
24
+ "generatedAt": {
25
+ "type": "string",
26
+ "format": "date-time"
27
+ },
28
+ "contentRoot": {
29
+ "type": "string",
30
+ "minLength": 1
31
+ },
32
+ "status": {
33
+ "enum": [
34
+ "healthy",
35
+ "warning",
36
+ "error"
37
+ ]
38
+ },
39
+ "score": {
40
+ "type": "integer",
41
+ "minimum": 0,
42
+ "maximum": 100
43
+ },
44
+ "summary": {
45
+ "type": "object",
46
+ "required": [
47
+ "itemCount",
48
+ "validCount",
49
+ "errorCount",
50
+ "warnCount",
51
+ "infoCount",
52
+ "findingCount",
53
+ "ignoredCount",
54
+ "contentDirectoryCount"
55
+ ],
56
+ "additionalProperties": false,
57
+ "properties": {
58
+ "itemCount": { "type": "integer", "minimum": 0 },
59
+ "validCount": { "type": "integer", "minimum": 0 },
60
+ "errorCount": { "type": "integer", "minimum": 0 },
61
+ "warnCount": { "type": "integer", "minimum": 0 },
62
+ "infoCount": { "type": "integer", "minimum": 0 },
63
+ "findingCount": { "type": "integer", "minimum": 0 },
64
+ "ignoredCount": { "type": "integer", "minimum": 0 },
65
+ "contentDirectoryCount": { "type": "integer", "minimum": 0 }
66
+ }
67
+ },
68
+ "content": {
69
+ "type": "array",
70
+ "items": {
71
+ "type": "object",
72
+ "required": [
73
+ "type",
74
+ "directory",
75
+ "itemCount",
76
+ "validCount",
77
+ "errorCount",
78
+ "warnCount",
79
+ "infoCount",
80
+ "ignoredCount"
81
+ ],
82
+ "additionalProperties": false,
83
+ "properties": {
84
+ "type": { "$ref": "#/$defs/contentType" },
85
+ "directory": { "$ref": "#/$defs/apiContentType" },
86
+ "itemCount": { "type": "integer", "minimum": 0 },
87
+ "validCount": { "type": "integer", "minimum": 0 },
88
+ "errorCount": { "type": "integer", "minimum": 0 },
89
+ "warnCount": { "type": "integer", "minimum": 0 },
90
+ "infoCount": { "type": "integer", "minimum": 0 },
91
+ "ignoredCount": { "type": "integer", "minimum": 0 }
92
+ }
93
+ }
94
+ },
95
+ "references": {
96
+ "type": "object",
97
+ "required": [
98
+ "checked",
99
+ "missing",
100
+ "missingByType"
101
+ ],
102
+ "additionalProperties": false,
103
+ "properties": {
104
+ "checked": { "type": "integer", "minimum": 0 },
105
+ "missing": { "type": "integer", "minimum": 0 },
106
+ "missingByType": {
107
+ "type": "object",
108
+ "required": [
109
+ "pattern",
110
+ "theme",
111
+ "blueprint",
112
+ "archetype",
113
+ "shell"
114
+ ],
115
+ "additionalProperties": false,
116
+ "properties": {
117
+ "pattern": { "type": "integer", "minimum": 0 },
118
+ "theme": { "type": "integer", "minimum": 0 },
119
+ "blueprint": { "type": "integer", "minimum": 0 },
120
+ "archetype": { "type": "integer", "minimum": 0 },
121
+ "shell": { "type": "integer", "minimum": 0 }
122
+ }
123
+ }
124
+ }
125
+ },
126
+ "quality": {
127
+ "type": "object",
128
+ "required": [
129
+ "patternVisualBriefCoverage",
130
+ "patternInteractionCoverage",
131
+ "themeDecoratorCoverage",
132
+ "blueprintPersonalityCoverage",
133
+ "blueprintVoiceCoverage",
134
+ "archetypePageBriefCoverage"
135
+ ],
136
+ "additionalProperties": false,
137
+ "properties": {
138
+ "patternVisualBriefCoverage": { "$ref": "#/$defs/percentage" },
139
+ "patternInteractionCoverage": { "$ref": "#/$defs/percentage" },
140
+ "themeDecoratorCoverage": { "$ref": "#/$defs/percentage" },
141
+ "blueprintPersonalityCoverage": { "$ref": "#/$defs/percentage" },
142
+ "blueprintVoiceCoverage": { "$ref": "#/$defs/percentage" },
143
+ "archetypePageBriefCoverage": { "$ref": "#/$defs/percentage" }
144
+ }
145
+ },
146
+ "ci": {
147
+ "type": "object",
148
+ "required": [
149
+ "recommendedCommand",
150
+ "failOn"
151
+ ],
152
+ "additionalProperties": false,
153
+ "properties": {
154
+ "recommendedCommand": { "type": "string", "minLength": 1 },
155
+ "failOn": {
156
+ "enum": [
157
+ "error",
158
+ "warn",
159
+ "none"
160
+ ]
161
+ }
162
+ }
163
+ },
164
+ "findings": {
165
+ "type": "array",
166
+ "items": { "$ref": "#/$defs/finding" }
167
+ }
168
+ },
169
+ "$defs": {
170
+ "contentType": {
171
+ "enum": [
172
+ "pattern",
173
+ "theme",
174
+ "blueprint",
175
+ "archetype",
176
+ "shell"
177
+ ]
178
+ },
179
+ "apiContentType": {
180
+ "enum": [
181
+ "patterns",
182
+ "themes",
183
+ "blueprints",
184
+ "archetypes",
185
+ "shells"
186
+ ]
187
+ },
188
+ "percentage": {
189
+ "type": "number",
190
+ "minimum": 0,
191
+ "maximum": 1
192
+ },
193
+ "severity": {
194
+ "enum": [
195
+ "error",
196
+ "warn",
197
+ "info"
198
+ ]
199
+ },
200
+ "finding": {
201
+ "type": "object",
202
+ "required": [
203
+ "id",
204
+ "source",
205
+ "category",
206
+ "severity",
207
+ "message",
208
+ "evidence",
209
+ "remediation"
210
+ ],
211
+ "additionalProperties": false,
212
+ "properties": {
213
+ "id": { "type": "string", "minLength": 1 },
214
+ "source": {
215
+ "enum": [
216
+ "schema",
217
+ "reference",
218
+ "quality",
219
+ "coverage",
220
+ "content"
221
+ ]
222
+ },
223
+ "category": { "type": "string", "minLength": 1 },
224
+ "severity": { "$ref": "#/$defs/severity" },
225
+ "message": { "type": "string", "minLength": 1 },
226
+ "evidence": {
227
+ "type": "array",
228
+ "items": { "type": "string" }
229
+ },
230
+ "file": { "type": "string" },
231
+ "type": { "$ref": "#/$defs/contentType" },
232
+ "itemId": { "type": "string" },
233
+ "rule": { "type": "string" },
234
+ "suggestedFix": { "type": "string" },
235
+ "remediation": {
236
+ "type": "object",
237
+ "required": [
238
+ "summary",
239
+ "prompt",
240
+ "commands"
241
+ ],
242
+ "additionalProperties": false,
243
+ "properties": {
244
+ "summary": { "type": "string", "minLength": 1 },
245
+ "prompt": { "type": "string", "minLength": 1 },
246
+ "commands": {
247
+ "type": "array",
248
+ "items": { "type": "string", "minLength": 1 }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
@@ -110,7 +110,7 @@
110
110
  },
111
111
  "interactions": {
112
112
  "type": "array",
113
- "description": "v2.1 Tier C1. Declared runtime interactions that the rendered pattern MUST implement. Surfaced as a checkbox checklist in the per-page execution pack; enforced by decantr check --strict (C5 guard rule). Each value maps to a canonical implementation: a specific treatment class, handler pattern, or both — see 'Interaction Requirements' table in DECANTR.md for the mapping. Before this field, motion/interactivity lived only as prose philosophy that cold LLMs categorized as 'nice to have'.",
113
+ "description": "Declared runtime interactions that the rendered pattern MUST implement. Surfaced as a checkbox checklist in the per-page execution pack; enforced by decantr check --strict. Each value maps to a canonical implementation: a specific treatment class, handler pattern, or both — see 'Interaction Requirements' table in DECANTR.md for the mapping. Before this field, motion/interactivity lived only as prose philosophy that cold LLMs categorized as 'nice to have'.",
114
114
  "items": {
115
115
  "type": "string",
116
116
  "enum": [
@@ -42,6 +42,35 @@
42
42
  "null"
43
43
  ]
44
44
  },
45
+ "thumbnail": {
46
+ "anyOf": [
47
+ {
48
+ "type": "object",
49
+ "required": [
50
+ "src",
51
+ "alt"
52
+ ],
53
+ "properties": {
54
+ "src": {
55
+ "$ref": "https://decantr.ai/schemas/common.v1.json#/$defs/nonEmptyString"
56
+ },
57
+ "alt": {
58
+ "$ref": "https://decantr.ai/schemas/common.v1.json#/$defs/nonEmptyString"
59
+ },
60
+ "width": {
61
+ "type": "number"
62
+ },
63
+ "height": {
64
+ "type": "number"
65
+ }
66
+ },
67
+ "additionalProperties": false
68
+ },
69
+ {
70
+ "type": "null"
71
+ }
72
+ ]
73
+ },
45
74
  "url": {
46
75
  "type": [
47
76
  "string",