@gluecharm-lab/easyspecs-cli 0.0.3
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/dist/main.cjs +19663 -0
- package/dist/main.cjs.map +7 -0
- package/package.json +27 -0
- package/resources/opencode-agents/MERMAID.md +20 -0
- package/resources/opencode-agents/README.md +67 -0
- package/resources/opencode-agents/agent-ace-curator.md +31 -0
- package/resources/opencode-agents/agent-ace-reflector.md +16 -0
- package/resources/opencode-agents/agent-ace-trace-recorder.md +33 -0
- package/resources/opencode-agents/agent-add-reference-architecture-md.md +22 -0
- package/resources/opencode-agents/agent-add-reference-project-md.md +21 -0
- package/resources/opencode-agents/agent-classify-unreferenced-file.md +61 -0
- package/resources/opencode-agents/agent-list-data-model.md +243 -0
- package/resources/opencode-agents/agent-list-entity-fields.md +191 -0
- package/resources/opencode-agents/agent-list-experiences.md +252 -0
- package/resources/opencode-agents/agent-list-features.md +218 -0
- package/resources/opencode-agents/agent-list-scenarios.md +179 -0
- package/resources/opencode-agents/agent-list-services.md +208 -0
- package/resources/opencode-agents/agent-list-tech-stack.md +176 -0
- package/resources/opencode-agents/agent-list-use-cases.md +179 -0
- package/resources/opencode-agents/agent-md-architecture.md +139 -0
- package/resources/opencode-agents/agent-md-docs-project.md +172 -0
- package/resources/opencode-agents/agent-md-entity-detail.md +86 -0
- package/resources/opencode-agents/agent-md-feature-detail.md +95 -0
- package/resources/opencode-agents/agent-md-field-detail.md +80 -0
- package/resources/opencode-agents/agent-md-interaction-detail.md +84 -0
- package/resources/opencode-agents/agent-md-method-detail.md +86 -0
- package/resources/opencode-agents/agent-md-relationship-detail.md +80 -0
- package/resources/opencode-agents/agent-md-scenario-detail.md +92 -0
- package/resources/opencode-agents/agent-md-service-detail.md +88 -0
- package/resources/opencode-agents/agent-md-tool-detail.md +82 -0
- package/resources/opencode-agents/agent-md-use-case-detail.md +165 -0
- package/resources/opencode-agents/agent-md-view-detail.md +117 -0
- package/resources/opencode-agents/agent-reference-coverage-execution-report.md +28 -0
- package/resources/opencode-agents/agent-repo-surface-scan.md +136 -0
- package/resources/opencode-agents/agent-resolve-open-question.md +42 -0
- package/resources/opencode-agents/agent-review-data-model-list.md +26 -0
- package/resources/opencode-agents/agent-review-entity-fields-list.md +26 -0
- package/resources/opencode-agents/agent-review-experiences-list.md +72 -0
- package/resources/opencode-agents/agent-review-features-list.md +52 -0
- package/resources/opencode-agents/agent-review-scenarios-list.md +28 -0
- package/resources/opencode-agents/agent-review-services-list.md +26 -0
- package/resources/opencode-agents/agent-review-tech-stack-list.md +26 -0
- package/resources/opencode-agents/agent-review-use-cases-list.md +28 -0
- package/resources/opencode-agents/agent-triage-unreferenced-coordination.md +35 -0
- package/resources/schemas/ace/ace-agent-overlay.schema.json +29 -0
- package/resources/schemas/ace/ace-curator-delta.schema.json +51 -0
- package/resources/schemas/ace/ace-generator-trace.schema.json +134 -0
- package/resources/schemas/ace/ace-playbook.schema.json +36 -0
- package/resources/schemas/ace/ace-reflector-lessons.schema.json +77 -0
- package/resources/schemas/context-lists/coordination-duplicates-report.schema.json +97 -0
- package/resources/schemas/context-lists/coverage-reference-validation.schema.json +125 -0
- package/resources/schemas/context-lists/data-model-list.schema.json +157 -0
- package/resources/schemas/context-lists/entity-fields-list.schema.json +104 -0
- package/resources/schemas/context-lists/experiences-list.schema.json +132 -0
- package/resources/schemas/context-lists/features-list.schema.json +109 -0
- package/resources/schemas/context-lists/repo-surface-scan.schema.json +150 -0
- package/resources/schemas/context-lists/scenarios-list.schema.json +107 -0
- package/resources/schemas/context-lists/services-list.schema.json +132 -0
- package/resources/schemas/context-lists/tech-stack-list.schema.json +108 -0
- package/resources/schemas/context-lists/use-cases-list.schema.json +108 -0
- package/resources/schemas/context-lists/zero-reference-classifier-record.schema.json +61 -0
- package/resources/schemas/context-lists/zero-reference-routing.schema.json +98 -0
- package/resources/schemas/context-lists/zero-reference-triage-record.schema.json +57 -0
- package/resources/schemas/context-lists/zero-reference-triage.schema.json +69 -0
- package/resources/schemas/index-application-context.schema.json +202 -0
- package/resources/schemas/srs-impact.schema.json +187 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/coordination-duplicates-report.schema.json",
|
|
4
|
+
"title": "coordination-duplicates-report",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"kind",
|
|
9
|
+
"version",
|
|
10
|
+
"generatedAt",
|
|
11
|
+
"sourceRoot",
|
|
12
|
+
"contextDirAbsolute",
|
|
13
|
+
"lists",
|
|
14
|
+
"duplicateGroups",
|
|
15
|
+
"orphanCoordinationMarkdown"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"kind": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"const": "easyspecs.coordination-duplicates-report"
|
|
21
|
+
},
|
|
22
|
+
"version": { "type": "integer", "const": 1 },
|
|
23
|
+
"generatedAt": { "type": "string", "minLength": 1 },
|
|
24
|
+
"sourceRoot": { "type": "string", "enum": ["workspace", "worktree"] },
|
|
25
|
+
"contextDirAbsolute": { "type": "string", "minLength": 1 },
|
|
26
|
+
"lists": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"items": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": ["basename", "status"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"basename": { "type": "string", "minLength": 1 },
|
|
34
|
+
"status": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": ["ok", "missing", "parse_error", "invalid_shape"]
|
|
37
|
+
},
|
|
38
|
+
"error": { "type": "string" },
|
|
39
|
+
"rowCount": { "type": "integer", "minimum": 0 }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"duplicateGroups": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["listBasename", "rules", "matchOn", "normalizedValue", "members"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"listBasename": { "type": "string", "minLength": 1 },
|
|
51
|
+
"rules": {
|
|
52
|
+
"type": "array",
|
|
53
|
+
"items": { "type": "string", "enum": ["D1", "D2"] },
|
|
54
|
+
"minItems": 1
|
|
55
|
+
},
|
|
56
|
+
"matchOn": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"enum": ["slug", "name", "slug_and_name"]
|
|
59
|
+
},
|
|
60
|
+
"normalizedValue": { "type": "string", "minLength": 1 },
|
|
61
|
+
"members": {
|
|
62
|
+
"type": "array",
|
|
63
|
+
"minItems": 2,
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": false,
|
|
67
|
+
"required": ["code", "name", "sourceReferencePaths"],
|
|
68
|
+
"properties": {
|
|
69
|
+
"code": { "type": "string", "minLength": 1 },
|
|
70
|
+
"name": { "type": "string" },
|
|
71
|
+
"slug": { "type": ["string", "null"] },
|
|
72
|
+
"sourceReferencePaths": {
|
|
73
|
+
"type": "array",
|
|
74
|
+
"items": { "type": "string", "minLength": 1 }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"orphanCoordinationMarkdown": {
|
|
83
|
+
"type": "array",
|
|
84
|
+
"description": "Coordination-shaped detail .md files under context root that are not current discoverDetailMarkdownGroups targets (e.g. stale FE-nn-old-slug.md after slug change).",
|
|
85
|
+
"items": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"additionalProperties": false,
|
|
88
|
+
"required": ["basename", "kind"],
|
|
89
|
+
"properties": {
|
|
90
|
+
"basename": { "type": "string", "minLength": 1 },
|
|
91
|
+
"kind": { "type": "string", "const": "orphan_detail_markdown" },
|
|
92
|
+
"hint": { "type": "string" }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/coverage-reference-validation.schema.json",
|
|
4
|
+
"title": "coverage-reference-validation",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"version",
|
|
9
|
+
"generatedAt",
|
|
10
|
+
"repositoryRoot",
|
|
11
|
+
"granularity",
|
|
12
|
+
"referencedFiles",
|
|
13
|
+
"nonReferencedFiles",
|
|
14
|
+
"references",
|
|
15
|
+
"metrics"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"version": {
|
|
19
|
+
"type": "integer",
|
|
20
|
+
"minimum": 1,
|
|
21
|
+
"description": "Document format version."
|
|
22
|
+
},
|
|
23
|
+
"generatedAt": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"minLength": 1,
|
|
26
|
+
"description": "ISO-8601 UTC timestamp when the document was produced."
|
|
27
|
+
},
|
|
28
|
+
"repositoryRoot": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"description": "Absolute path to the analyzed repository root (workspace folder)."
|
|
32
|
+
},
|
|
33
|
+
"granularity": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"enum": ["file"],
|
|
36
|
+
"description": "v0.1: LOC metrics treat any cited file as fully referenced."
|
|
37
|
+
},
|
|
38
|
+
"ignoreDirs": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"items": { "type": "string", "minLength": 1 },
|
|
41
|
+
"description": "Directory basenames skipped during repository enumeration (includes **`.opencode/`** — OpenCode tooling, not product source)."
|
|
42
|
+
},
|
|
43
|
+
"referencedFiles": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": { "type": "string", "minLength": 1 },
|
|
46
|
+
"description": "Repo-relative POSIX paths with at least one reference. Paths under `.gluecharm/` at repo root are not listed. Files named **`.gitignore`** (any directory) and known **image / icon** extensions are omitted from the corpus. When `.git` exists and `git ls-files` succeeds, paths ignored by **`.gitignore` rules** (Git exclude-standard) are not listed."
|
|
47
|
+
},
|
|
48
|
+
"nonReferencedFiles": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": { "type": "string", "minLength": 1 },
|
|
51
|
+
"description": "Authoritative list of in-scope repo files with **zero** citations from context artefacts (same as “files with zero references”). Sorted like the LOC walk. Same corpus rules as **referencedFiles** (**`.gitignore`** files excluded, image extensions excluded, `.gluecharm/` root tree, Git exclude-standard when applicable, **`.opencode/`** dirs skipped)."
|
|
52
|
+
},
|
|
53
|
+
"references": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"items": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"additionalProperties": false,
|
|
58
|
+
"required": ["path", "sourceArtefact", "sourceKind"],
|
|
59
|
+
"properties": {
|
|
60
|
+
"path": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"minLength": 1,
|
|
63
|
+
"description": "Repo-relative path to a file."
|
|
64
|
+
},
|
|
65
|
+
"startLine": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"minimum": 1,
|
|
68
|
+
"description": "1-based start line when known."
|
|
69
|
+
},
|
|
70
|
+
"endLine": {
|
|
71
|
+
"type": "integer",
|
|
72
|
+
"minimum": 1,
|
|
73
|
+
"description": "1-based end line when known."
|
|
74
|
+
},
|
|
75
|
+
"sourceArtefact": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"minLength": 1,
|
|
78
|
+
"description": "Path relative to .gluecharm/context/ (e.g. features-list.json)."
|
|
79
|
+
},
|
|
80
|
+
"sourceKind": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"minLength": 1,
|
|
83
|
+
"description": "e.g. json_source_reference, markdown_evidence_index."
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"metrics": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"additionalProperties": false,
|
|
91
|
+
"required": [
|
|
92
|
+
"totalLoc",
|
|
93
|
+
"referencedLoc",
|
|
94
|
+
"nonReferencedLoc",
|
|
95
|
+
"percentNonReferenced"
|
|
96
|
+
],
|
|
97
|
+
"properties": {
|
|
98
|
+
"totalLoc": {
|
|
99
|
+
"type": "integer",
|
|
100
|
+
"minimum": 0,
|
|
101
|
+
"description": "Sum of physical lines over scanned files only; **`.gitignore`** files excluded; known image/icon extensions excluded; `.gluecharm/` at repo root excluded; **`.opencode/`** dirs skipped; when `.git` exists and `git ls-files` works, only tracked + untracked non-ignored paths (Git exclude-standard / **`.gitignore` rules**)."
|
|
102
|
+
},
|
|
103
|
+
"referencedLoc": { "type": "integer", "minimum": 0 },
|
|
104
|
+
"nonReferencedLoc": { "type": "integer", "minimum": 0 },
|
|
105
|
+
"percentNonReferenced": { "type": "integer", "minimum": 0, "maximum": 100 }
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"warnings": {
|
|
109
|
+
"type": "array",
|
|
110
|
+
"items": { "type": "string", "minLength": 1 }
|
|
111
|
+
},
|
|
112
|
+
"excludedFiles": {
|
|
113
|
+
"type": "array",
|
|
114
|
+
"items": {
|
|
115
|
+
"type": "object",
|
|
116
|
+
"additionalProperties": false,
|
|
117
|
+
"required": ["path", "reason"],
|
|
118
|
+
"properties": {
|
|
119
|
+
"path": { "type": "string", "minLength": 1 },
|
|
120
|
+
"reason": { "type": "string", "minLength": 1 }
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/data-model-list.schema.json",
|
|
4
|
+
"title": "data-model-list",
|
|
5
|
+
"$defs": {
|
|
6
|
+
"sourceReference": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"required": ["path", "startLine", "endLine"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"path": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"minLength": 1,
|
|
14
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
15
|
+
"description": "Repo-relative path to a single file (forward slashes). Not a directory: no trailing slash; list each file in a folder as its own sourceReferences entry."
|
|
16
|
+
},
|
|
17
|
+
"startLine": {
|
|
18
|
+
"type": "integer",
|
|
19
|
+
"minimum": 1,
|
|
20
|
+
"description": "1-based inclusive start line."
|
|
21
|
+
},
|
|
22
|
+
"endLine": {
|
|
23
|
+
"type": "integer",
|
|
24
|
+
"minimum": 1,
|
|
25
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
26
|
+
},
|
|
27
|
+
"note": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Optional short label for this evidence span."
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"sourceReferenceList": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"description": "Evidence spans: each item references one file + line range, never a folder path.",
|
|
36
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
37
|
+
},
|
|
38
|
+
"embeddedField": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"additionalProperties": true,
|
|
41
|
+
"required": ["code", "name", "sourceReferences"],
|
|
42
|
+
"description": "Optional inline field row on an entity (legacy); prefer DM-nn-fields-list.json when using per-entity list files.",
|
|
43
|
+
"properties": {
|
|
44
|
+
"code": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"pattern": "^FD-[0-9]+$"
|
|
47
|
+
},
|
|
48
|
+
"name": { "type": "string", "minLength": 1 },
|
|
49
|
+
"slug": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
52
|
+
},
|
|
53
|
+
"description": { "type": "string" },
|
|
54
|
+
"order": { "type": "integer" },
|
|
55
|
+
"sourceReferences": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"minItems": 1,
|
|
58
|
+
"description": "Required: at least one file + line range per inline field row.",
|
|
59
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"embeddedRelationship": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"additionalProperties": true,
|
|
66
|
+
"required": ["code", "name", "sourceReferences"],
|
|
67
|
+
"description": "Optional relationship row on an entity (legacy); detail markdown may carry full RL-* specs.",
|
|
68
|
+
"properties": {
|
|
69
|
+
"code": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"pattern": "^RL-[0-9]+$"
|
|
72
|
+
},
|
|
73
|
+
"name": { "type": "string", "minLength": 1 },
|
|
74
|
+
"description": { "type": "string" },
|
|
75
|
+
"order": { "type": "integer" },
|
|
76
|
+
"sourceReferences": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"minItems": 1,
|
|
79
|
+
"description": "Required: at least one file + line range per inline relationship row.",
|
|
80
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"type": "object",
|
|
86
|
+
"additionalProperties": false,
|
|
87
|
+
"required": ["entities"],
|
|
88
|
+
"properties": {
|
|
89
|
+
"kind": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"const": "easyspecs.data-model-list",
|
|
92
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
93
|
+
},
|
|
94
|
+
"version": {
|
|
95
|
+
"type": "integer",
|
|
96
|
+
"minimum": 1,
|
|
97
|
+
"description": "Optional coordination format version when present."
|
|
98
|
+
},
|
|
99
|
+
"entities": {
|
|
100
|
+
"type": "array",
|
|
101
|
+
"description": "Registry of domain entities (DM-*). Fields and relationships may live in per-entity `DM-nn-fields-list.json` or optionally inline here for compatibility with the index assembler.",
|
|
102
|
+
"items": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"additionalProperties": false,
|
|
105
|
+
"required": ["code", "name", "slug", "sourceReferences"],
|
|
106
|
+
"properties": {
|
|
107
|
+
"code": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"pattern": "^DM-[0-9]+$"
|
|
110
|
+
},
|
|
111
|
+
"name": { "type": "string", "minLength": 1 },
|
|
112
|
+
"slug": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
115
|
+
},
|
|
116
|
+
"description": { "type": "string" },
|
|
117
|
+
"order": { "type": "integer" },
|
|
118
|
+
"sourceReferences": {
|
|
119
|
+
"type": "array",
|
|
120
|
+
"minItems": 1,
|
|
121
|
+
"description": "Required: at least one file + line range per entity row.",
|
|
122
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
123
|
+
},
|
|
124
|
+
"fields": {
|
|
125
|
+
"type": "array",
|
|
126
|
+
"items": { "$ref": "#/$defs/embeddedField" }
|
|
127
|
+
},
|
|
128
|
+
"relationships": {
|
|
129
|
+
"type": "array",
|
|
130
|
+
"items": { "$ref": "#/$defs/embeddedRelationship" }
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"revisionLog": {
|
|
136
|
+
"type": "array",
|
|
137
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
138
|
+
"items": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"additionalProperties": false,
|
|
141
|
+
"required": ["summary"],
|
|
142
|
+
"properties": {
|
|
143
|
+
"at": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"description": "ISO-8601 timestamp when known."
|
|
146
|
+
},
|
|
147
|
+
"summary": {
|
|
148
|
+
"type": "string",
|
|
149
|
+
"minLength": 1,
|
|
150
|
+
"maxLength": 2000,
|
|
151
|
+
"description": "What was added, changed, or refined in this write."
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/entity-fields-list.schema.json",
|
|
4
|
+
"title": "DM-nn-fields-list",
|
|
5
|
+
"$defs": {
|
|
6
|
+
"sourceReference": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"required": ["path", "startLine", "endLine"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"path": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"minLength": 1,
|
|
14
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
15
|
+
"description": "Repo-relative path to a single file (forward slashes). Not a directory: no trailing slash; list each file in a folder as its own sourceReferences entry."
|
|
16
|
+
},
|
|
17
|
+
"startLine": {
|
|
18
|
+
"type": "integer",
|
|
19
|
+
"minimum": 1,
|
|
20
|
+
"description": "1-based inclusive start line."
|
|
21
|
+
},
|
|
22
|
+
"endLine": {
|
|
23
|
+
"type": "integer",
|
|
24
|
+
"minimum": 1,
|
|
25
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
26
|
+
},
|
|
27
|
+
"note": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Optional short label for this evidence span."
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"type": "object",
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"required": ["entityCode", "fields"],
|
|
37
|
+
"properties": {
|
|
38
|
+
"kind": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"const": "easyspecs.entity-fields-list",
|
|
41
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
42
|
+
},
|
|
43
|
+
"version": {
|
|
44
|
+
"type": "integer",
|
|
45
|
+
"minimum": 1,
|
|
46
|
+
"description": "Optional coordination format version when present."
|
|
47
|
+
},
|
|
48
|
+
"entityCode": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"pattern": "^DM-[0-9]+$",
|
|
51
|
+
"description": "Must match the entity row in data-model-list.json and the output basename DM-nn-fields-list.json."
|
|
52
|
+
},
|
|
53
|
+
"fields": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"description": "Each field must include implementation evidence via sourceReferences (same shape as other coordination lists).",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"additionalProperties": false,
|
|
59
|
+
"required": ["code", "name", "slug", "sourceReferences"],
|
|
60
|
+
"properties": {
|
|
61
|
+
"code": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"pattern": "^FD-[0-9]+$"
|
|
64
|
+
},
|
|
65
|
+
"name": { "type": "string", "minLength": 1 },
|
|
66
|
+
"slug": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
69
|
+
"description": "URL-safe slug for DM-nn_FD-ff-<slug>.md detail basename."
|
|
70
|
+
},
|
|
71
|
+
"description": { "type": "string" },
|
|
72
|
+
"order": { "type": "integer" },
|
|
73
|
+
"sourceReferences": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"minItems": 1,
|
|
76
|
+
"description": "At least one file + line span per field; each path is a single repo file (never a directory). Do not use readme.md basenames.",
|
|
77
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"revisionLog": {
|
|
83
|
+
"type": "array",
|
|
84
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
85
|
+
"items": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"additionalProperties": false,
|
|
88
|
+
"required": ["summary"],
|
|
89
|
+
"properties": {
|
|
90
|
+
"at": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"description": "ISO-8601 timestamp when known."
|
|
93
|
+
},
|
|
94
|
+
"summary": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"minLength": 1,
|
|
97
|
+
"maxLength": 2000,
|
|
98
|
+
"description": "What was added, changed, or refined in this write."
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/experiences-list.schema.json",
|
|
4
|
+
"title": "experiences-list",
|
|
5
|
+
"$defs": {
|
|
6
|
+
"sourceReference": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"required": ["path", "startLine", "endLine"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"path": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"minLength": 1,
|
|
14
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
15
|
+
"description": "Repo-relative path to a single file (forward slashes). Not a directory: no trailing slash; list each file in a folder as its own sourceReferences entry."
|
|
16
|
+
},
|
|
17
|
+
"startLine": {
|
|
18
|
+
"type": "integer",
|
|
19
|
+
"minimum": 1,
|
|
20
|
+
"description": "1-based inclusive start line."
|
|
21
|
+
},
|
|
22
|
+
"endLine": {
|
|
23
|
+
"type": "integer",
|
|
24
|
+
"minimum": 1,
|
|
25
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
26
|
+
},
|
|
27
|
+
"note": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Optional short label for this evidence span."
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"sourceReferenceList": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"description": "Evidence spans: each item references one file + line range, never a folder path.",
|
|
36
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
37
|
+
},
|
|
38
|
+
"interactionItem": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"additionalProperties": true,
|
|
41
|
+
"required": ["code", "name", "sourceReferences"],
|
|
42
|
+
"properties": {
|
|
43
|
+
"code": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"pattern": "^BH-[0-9]+$"
|
|
46
|
+
},
|
|
47
|
+
"name": { "type": "string", "minLength": 1 },
|
|
48
|
+
"slug": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
51
|
+
"description": "Recommended for XP-<nn>_BH-<ii>-<slug>.md detail basenames."
|
|
52
|
+
},
|
|
53
|
+
"description": { "type": "string" },
|
|
54
|
+
"order": { "type": "integer" },
|
|
55
|
+
"sourceReferences": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"minItems": 1,
|
|
58
|
+
"description": "Required: at least one file + line range per interaction row.",
|
|
59
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"type": "object",
|
|
65
|
+
"additionalProperties": false,
|
|
66
|
+
"required": ["views"],
|
|
67
|
+
"properties": {
|
|
68
|
+
"kind": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"const": "easyspecs.experiences-list",
|
|
71
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
72
|
+
},
|
|
73
|
+
"version": {
|
|
74
|
+
"type": "integer",
|
|
75
|
+
"minimum": 1,
|
|
76
|
+
"description": "Optional coordination format version when present."
|
|
77
|
+
},
|
|
78
|
+
"views": {
|
|
79
|
+
"type": "array",
|
|
80
|
+
"items": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": true,
|
|
83
|
+
"required": ["code", "name", "sourceReferences"],
|
|
84
|
+
"properties": {
|
|
85
|
+
"code": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"pattern": "^XP-[0-9]+$"
|
|
88
|
+
},
|
|
89
|
+
"name": { "type": "string", "minLength": 1 },
|
|
90
|
+
"slug": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
93
|
+
"description": "Recommended for XP-<nn>-<slug>.md detail basenames."
|
|
94
|
+
},
|
|
95
|
+
"description": { "type": "string" },
|
|
96
|
+
"order": { "type": "integer" },
|
|
97
|
+
"sourceReferences": {
|
|
98
|
+
"type": "array",
|
|
99
|
+
"minItems": 1,
|
|
100
|
+
"description": "Required: at least one file + line range per view row.",
|
|
101
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
102
|
+
},
|
|
103
|
+
"interactions": {
|
|
104
|
+
"type": "array",
|
|
105
|
+
"items": { "$ref": "#/$defs/interactionItem" }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"revisionLog": {
|
|
111
|
+
"type": "array",
|
|
112
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
113
|
+
"items": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"additionalProperties": false,
|
|
116
|
+
"required": ["summary"],
|
|
117
|
+
"properties": {
|
|
118
|
+
"at": {
|
|
119
|
+
"type": "string",
|
|
120
|
+
"description": "ISO-8601 timestamp when known."
|
|
121
|
+
},
|
|
122
|
+
"summary": {
|
|
123
|
+
"type": "string",
|
|
124
|
+
"minLength": 1,
|
|
125
|
+
"maxLength": 2000,
|
|
126
|
+
"description": "What was added, changed, or refined in this write."
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|