@fulmenhq/tsfulmen 0.1.6

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.
Files changed (188) hide show
  1. package/CHANGELOG.md +616 -0
  2. package/LICENSE +57 -0
  3. package/README.md +674 -0
  4. package/config/crucible-ts/README.md +38 -0
  5. package/config/crucible-ts/library/foundry/country-codes.yaml +29 -0
  6. package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +351 -0
  7. package/config/crucible-ts/library/foundry/exit-codes.yaml +483 -0
  8. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-behavior.yaml +45 -0
  9. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-exit-code.yaml +51 -0
  10. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/malformed.yaml +44 -0
  11. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/missing-required.yaml +36 -0
  12. package/config/crucible-ts/library/foundry/fixtures/signals/parity-snapshot.json +162 -0
  13. package/config/crucible-ts/library/foundry/fixtures/signals/valid/complete.yaml +314 -0
  14. package/config/crucible-ts/library/foundry/fixtures/signals/valid/custom-behavior.yaml +96 -0
  15. package/config/crucible-ts/library/foundry/fixtures/signals/valid/minimal.yaml +55 -0
  16. package/config/crucible-ts/library/foundry/http-statuses.yaml +148 -0
  17. package/config/crucible-ts/library/foundry/mime-types.yaml +39 -0
  18. package/config/crucible-ts/library/foundry/patterns.yaml +185 -0
  19. package/config/crucible-ts/library/foundry/signals.yaml +331 -0
  20. package/config/crucible-ts/library/foundry/similarity-fixtures.yaml +432 -0
  21. package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +117 -0
  22. package/config/crucible-ts/library/fulhash/fixtures.yaml +160 -0
  23. package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +179 -0
  24. package/config/crucible-ts/repository/app-identity/app-identity.example.yaml +42 -0
  25. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-binary-name.yaml +7 -0
  26. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-env-prefix.yaml +7 -0
  27. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-vendor.yaml +7 -0
  28. package/config/crucible-ts/repository/app-identity/fixtures/invalid/malformed-yaml.yaml +8 -0
  29. package/config/crucible-ts/repository/app-identity/fixtures/invalid/missing-required.yaml +6 -0
  30. package/config/crucible-ts/repository/app-identity/fixtures/valid/complete.yaml +20 -0
  31. package/config/crucible-ts/repository/app-identity/fixtures/valid/minimal.yaml +7 -0
  32. package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-api.yaml +10 -0
  33. package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-worker.yaml +10 -0
  34. package/config/crucible-ts/repository/app-identity/parity-snapshot.json +125 -0
  35. package/config/crucible-ts/server/management/server-management.yaml +141 -0
  36. package/config/crucible-ts/sync/README.md +13 -0
  37. package/config/crucible-ts/sync/sync-keys.yaml +74 -0
  38. package/config/crucible-ts/taxonomy/languages.yaml +33 -0
  39. package/config/crucible-ts/taxonomy/metrics.yaml +115 -0
  40. package/config/crucible-ts/taxonomy/repository-categories.yaml +66 -0
  41. package/config/crucible-ts/terminal/v1.0.0/terminal-overrides-defaults.yaml +38 -0
  42. package/config/crucible-ts/web/branding/site-branding.yaml +21 -0
  43. package/config/crucible-ts/web/styling/site-styling.yaml +104 -0
  44. package/dist/appidentity/index.d.ts +304 -0
  45. package/dist/appidentity/index.js +5519 -0
  46. package/dist/appidentity/index.js.map +1 -0
  47. package/dist/config/index.d.ts +144 -0
  48. package/dist/config/index.js +5752 -0
  49. package/dist/config/index.js.map +1 -0
  50. package/dist/crucible/index.d.ts +78 -0
  51. package/dist/crucible/index.js +6038 -0
  52. package/dist/crucible/index.js.map +1 -0
  53. package/dist/docscribe/index.d.ts +110 -0
  54. package/dist/docscribe/index.js +682 -0
  55. package/dist/docscribe/index.js.map +1 -0
  56. package/dist/errors/index.d.ts +150 -0
  57. package/dist/errors/index.js +5583 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/foundry/index.d.ts +1557 -0
  60. package/dist/foundry/index.js +5474 -0
  61. package/dist/foundry/index.js.map +1 -0
  62. package/dist/foundry/similarity/index.d.ts +17 -0
  63. package/dist/foundry/similarity/index.js +136 -0
  64. package/dist/foundry/similarity/index.js.map +1 -0
  65. package/dist/fulhash/index.d.ts +82 -0
  66. package/dist/fulhash/index.js +374 -0
  67. package/dist/fulhash/index.js.map +1 -0
  68. package/dist/fulmen-error-B_kX8jSC.d.ts +309 -0
  69. package/dist/index.d.ts +14 -0
  70. package/dist/index.js +6197 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/logger-JU2jYitA.d.ts +171 -0
  73. package/dist/logging/index.d.ts +198 -0
  74. package/dist/logging/index.js +578 -0
  75. package/dist/logging/index.js.map +1 -0
  76. package/dist/pathfinder/index.d.ts +532 -0
  77. package/dist/pathfinder/index.js +6750 -0
  78. package/dist/pathfinder/index.js.map +1 -0
  79. package/dist/registry-x1-Qi_Tz.d.ts +349 -0
  80. package/dist/schema/index.d.ts +388 -0
  81. package/dist/schema/index.js +5522 -0
  82. package/dist/schema/index.js.map +1 -0
  83. package/dist/suggest-CLqjLZ5L.d.ts +168 -0
  84. package/dist/telemetry/index.d.ts +161 -0
  85. package/dist/telemetry/index.js +5610 -0
  86. package/dist/telemetry/index.js.map +1 -0
  87. package/dist/types-B_WtvQbS.d.ts +214 -0
  88. package/package.json +130 -0
  89. package/schemas/crucible-ts/api/http/v1.0.0/README.md +22 -0
  90. package/schemas/crucible-ts/api/http/v1.0.0/error-response.schema.json +54 -0
  91. package/schemas/crucible-ts/api/http/v1.0.0/health-response.schema.json +70 -0
  92. package/schemas/crucible-ts/api/http/v1.0.0/success-response.schema.json +51 -0
  93. package/schemas/crucible-ts/api/http/v1.0.0/version-response.schema.json +61 -0
  94. package/schemas/crucible-ts/ascii/v1.0.0/README.md +69 -0
  95. package/schemas/crucible-ts/ascii/v1.0.0/box-chars.schema.json +60 -0
  96. package/schemas/crucible-ts/ascii/v1.0.0/string-analysis.schema.json +45 -0
  97. package/schemas/crucible-ts/assessment/README.md +25 -0
  98. package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +60 -0
  99. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/README.md +11 -0
  100. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +61 -0
  101. package/schemas/crucible-ts/config/goneat/README.md +60 -0
  102. package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +234 -0
  103. package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +344 -0
  104. package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +20 -0
  105. package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +17 -0
  106. package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +178 -0
  107. package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +205 -0
  108. package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +143 -0
  109. package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +20 -0
  110. package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +288 -0
  111. package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +60 -0
  112. package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +225 -0
  113. package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +62 -0
  114. package/schemas/crucible-ts/config/sync-consumer-config.yaml +51 -0
  115. package/schemas/crucible-ts/config/sync-keys.schema.yaml +37 -0
  116. package/schemas/crucible-ts/content/README.md +19 -0
  117. package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/README.md +13 -0
  118. package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/binary-embed-manifest.schema.yaml +36 -0
  119. package/schemas/crucible-ts/content/embed-manifest/v1.1.0/README.md +13 -0
  120. package/schemas/crucible-ts/content/embed-manifest/v1.1.0/embed-manifest.schema.yaml +78 -0
  121. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/README.md +200 -0
  122. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +128 -0
  123. package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +75 -0
  124. package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +58 -0
  125. package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +300 -0
  126. package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +74 -0
  127. package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +60 -0
  128. package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +97 -0
  129. package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +457 -0
  130. package/schemas/crucible-ts/library/foundry/v1.0.0/similarity.schema.json +260 -0
  131. package/schemas/crucible-ts/library/foundry/v2.0.0/similarity.schema.json +558 -0
  132. package/schemas/crucible-ts/library/fulhash/v1.0.0/README.md +6 -0
  133. package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +8 -0
  134. package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +100 -0
  135. package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +227 -0
  136. package/schemas/crucible-ts/library/module-manifest/v1.0.0/README.md +31 -0
  137. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +132 -0
  138. package/schemas/crucible-ts/meta/README.md +23 -0
  139. package/schemas/crucible-ts/meta/draft-07/schema.json +245 -0
  140. package/schemas/crucible-ts/meta/draft-2020-12/meta/applicator.json +81 -0
  141. package/schemas/crucible-ts/meta/draft-2020-12/meta/content.json +21 -0
  142. package/schemas/crucible-ts/meta/draft-2020-12/meta/core.json +64 -0
  143. package/schemas/crucible-ts/meta/draft-2020-12/meta/format-annotation.json +15 -0
  144. package/schemas/crucible-ts/meta/draft-2020-12/meta/meta-data.json +35 -0
  145. package/schemas/crucible-ts/meta/draft-2020-12/meta/unevaluated.json +18 -0
  146. package/schemas/crucible-ts/meta/draft-2020-12/meta/validation.json +119 -0
  147. package/schemas/crucible-ts/meta/draft-2020-12/schema.json +80 -0
  148. package/schemas/crucible-ts/observability/logging/v1.0.0/README.md +82 -0
  149. package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +140 -0
  150. package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +179 -0
  151. package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +518 -0
  152. package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +225 -0
  153. package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +181 -0
  154. package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +38 -0
  155. package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +86 -0
  156. package/schemas/crucible-ts/pathfinder/v1.0.0/README.md +104 -0
  157. package/schemas/crucible-ts/pathfinder/v1.0.0/error-response.schema.json +35 -0
  158. package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +49 -0
  159. package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +91 -0
  160. package/schemas/crucible-ts/pathfinder/v1.0.0/metadata.schema.json +61 -0
  161. package/schemas/crucible-ts/pathfinder/v1.0.0/path-constraint.schema.json +50 -0
  162. package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +40 -0
  163. package/schemas/crucible-ts/protocol/http/v1.0.0/README.md +22 -0
  164. package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +54 -0
  165. package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +70 -0
  166. package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +51 -0
  167. package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +61 -0
  168. package/schemas/crucible-ts/schema-validation/v1.0.0/README.md +65 -0
  169. package/schemas/crucible-ts/schema-validation/v1.0.0/schema-registry.schema.json +31 -0
  170. package/schemas/crucible-ts/schema-validation/v1.0.0/validator-config.schema.json +36 -0
  171. package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +199 -0
  172. package/schemas/crucible-ts/taxonomy/language/v1.0.0/README.md +30 -0
  173. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +17 -0
  174. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +44 -0
  175. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/README.md +31 -0
  176. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +19 -0
  177. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +39 -0
  178. package/schemas/crucible-ts/terminal/v1.0.0/README.md +45 -0
  179. package/schemas/crucible-ts/terminal/v1.0.0/catalog/apple-terminal.yaml +2 -0
  180. package/schemas/crucible-ts/terminal/v1.0.0/catalog/ghostty.yaml +13 -0
  181. package/schemas/crucible-ts/terminal/v1.0.0/catalog/iterm2.yaml +13 -0
  182. package/schemas/crucible-ts/terminal/v1.0.0/schema.json +40 -0
  183. package/schemas/crucible-ts/tooling/external-tools/v1.0.0/README.md +164 -0
  184. package/schemas/crucible-ts/tooling/external-tools/v1.0.0/external-tools-manifest.schema.yaml +83 -0
  185. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +177 -0
  186. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml +146 -0
  187. package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +79 -0
  188. package/schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json +321 -0
@@ -0,0 +1,200 @@
1
+ ---
2
+ title: "SSOT Sync Provenance Schema v1.0.0"
3
+ description: "Audit trail metadata for SSOT sync operations"
4
+ author: "Pipeline Architect"
5
+ date: "2025-10-28"
6
+ last_updated: "2025-10-28"
7
+ status: "stable"
8
+ tags: ["content", "ssot", "provenance", "audit"]
9
+ ---
10
+
11
+ # SSOT Sync Provenance Schema v1.0.0
12
+
13
+ ## Purpose
14
+
15
+ The SSOT Sync Provenance schema provides standardized metadata for tracking the origin and state of synced content from Single Source of Truth (SSOT) repositories. This enables:
16
+
17
+ - **Audit trails**: Know exactly which SSOT version/commit was synced
18
+ - **Reproducibility**: Recreate exact sync state for debugging
19
+ - **Dependency tracking**: Understand which SSOTs a repository depends on
20
+ - **Dirty state detection**: Identify when synced content came from uncommitted changes
21
+
22
+ ## Schema Location
23
+
24
+ - **File**: `ssot-provenance.schema.json`
25
+ - **$id**: `https://github.com/fulmenhq/crucible/schemas/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json`
26
+ - **Draft**: JSON Schema Draft 2020-12
27
+
28
+ ## Usage
29
+
30
+ ### Generated By
31
+
32
+ This file is automatically generated by SSOT sync tools (e.g., goneat) during sync operations. Consumers should **never manually edit** provenance files.
33
+
34
+ **Typical location**: `.goneat/ssot/provenance.json` in repositories consuming SSOT content
35
+
36
+ ### Consumed By
37
+
38
+ - **Helper libraries** (gofulmen, pyfulmen, tsfulmen) - Read provenance to display version info
39
+ - **CI/CD pipelines** - Validate SSOT versions and detect dirty syncs
40
+ - **Development tools** - Show developers which SSOT versions they're using
41
+ - **Audit systems** - Track SSOT dependency chains across ecosystem
42
+
43
+ ## Structure
44
+
45
+ ### Top-Level Fields
46
+
47
+ | Field | Type | Required | Description |
48
+ | -------------- | ------ | -------- | ------------------------------------------- |
49
+ | `schema` | object | ✅ | Schema identifier (name, version, URL) |
50
+ | `generated_at` | string | ✅ | ISO 8601 timestamp of provenance generation |
51
+ | `sources` | array | ✅ | Array of source metadata (min 1 item) |
52
+
53
+ ### Schema Identifier
54
+
55
+ ```json
56
+ {
57
+ "schema": {
58
+ "name": "goneat.ssot.provenance",
59
+ "version": "v1",
60
+ "url": "https://github.com/fulmenhq/crucible/schemas/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json"
61
+ }
62
+ }
63
+ ```
64
+
65
+ ### Source Metadata
66
+
67
+ Each source in the `sources` array represents one SSOT repository that was synced.
68
+
69
+ | Field | Type | Required | Description |
70
+ | ---------------- | ------- | -------- | ----------------------------------------------- |
71
+ | `name` | string | ✅ | Human-readable source name |
72
+ | `slug` | string | ✅ | URL-safe slug (lowercase alphanumeric + dashes) |
73
+ | `method` | enum | ✅ | Sync method used |
74
+ | `repo_url` | string | ❌ | Repository URL (e.g., GitHub) |
75
+ | `local_path` | string | ❌ | Local filesystem path for sync |
76
+ | `ref` | string | ❌ | Git ref (branch/tag) used |
77
+ | `commit` | string | ❌ | Full 40-character Git commit SHA |
78
+ | `dirty` | boolean | ❌ | Whether source had uncommitted changes |
79
+ | `dirty_reason` | enum | ❌ | Reason for dirty status |
80
+ | `version_file` | string | ❌ | Version file name (e.g., "VERSION") |
81
+ | `version` | string | ❌ | Version string from version file |
82
+ | `version_source` | string | ❌ | Source of version info |
83
+ | `outputs` | object | ❌ | Map of asset type → destination path |
84
+
85
+ ### Sync Methods
86
+
87
+ - `local_path` - Synced from local filesystem path
88
+ - `git_ref` - Synced from Git branch/ref
89
+ - `git_tag` - Synced from Git tag
90
+ - `archive` - Synced from archive file
91
+
92
+ ### Dirty Reasons
93
+
94
+ - `worktree-dirty` - Git working tree has uncommitted changes
95
+ - `non-git` - Source is not a Git repository
96
+ - `no-head` - Git repository has no HEAD (empty repo)
97
+ - `no-worktree` - Git repository has no working tree (bare repo)
98
+ - `status-error` - Error checking Git status
99
+
100
+ ## Example
101
+
102
+ ```json
103
+ {
104
+ "schema": {
105
+ "name": "goneat.ssot.provenance",
106
+ "version": "v1",
107
+ "url": "https://github.com/fulmenhq/crucible/schemas/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json"
108
+ },
109
+ "generated_at": "2025-10-28T18:59:49.509077Z",
110
+ "sources": [
111
+ {
112
+ "name": "crucible",
113
+ "slug": "crucible",
114
+ "method": "local_path",
115
+ "repo_url": "https://github.com/fulmenhq/crucible",
116
+ "local_path": "../crucible",
117
+ "ref": "main",
118
+ "commit": "14540342ad9defcedcd4a2f9c6a167bd10f7cb5d",
119
+ "dirty": false,
120
+ "version_file": "VERSION",
121
+ "version": "2025.10.3",
122
+ "version_source": "VERSION",
123
+ "outputs": {
124
+ "config": "config/crucible-py",
125
+ "doc": "docs/crucible-py",
126
+ "metadata": ".crucible/metadata",
127
+ "schema": "schemas/crucible-py"
128
+ }
129
+ }
130
+ ]
131
+ }
132
+ ```
133
+
134
+ ## Integration Patterns
135
+
136
+ ### Reading Provenance in Helper Libraries
137
+
138
+ ```python
139
+ # pyfulmen example
140
+ from pyfulmen.crucible import get_provenance
141
+
142
+ provenance = get_provenance()
143
+ for source in provenance["sources"]:
144
+ print(f"{source['name']}: {source['version']} ({source['commit'][:7]})")
145
+ if source.get("dirty"):
146
+ print(f" ⚠️ WARNING: Synced from dirty source ({source['dirty_reason']})")
147
+ ```
148
+
149
+ ```go
150
+ // gofulmen example
151
+ import "github.com/fulmenhq/gofulmen/crucible"
152
+
153
+ prov, err := crucible.GetProvenance()
154
+ if err != nil {
155
+ log.Fatal(err)
156
+ }
157
+
158
+ for _, src := range prov.Sources {
159
+ log.Printf("%s: %s (%s)", src.Name, src.Version, src.Commit[:7])
160
+ if src.Dirty {
161
+ log.Printf(" ⚠️ WARNING: Synced from dirty source (%s)", src.DirtyReason)
162
+ }
163
+ }
164
+ ```
165
+
166
+ ### CI/CD Validation
167
+
168
+ ```yaml
169
+ # .github/workflows/validate-ssot.yml
170
+ - name: Check SSOT Provenance
171
+ run: |
172
+ if jq -e '.sources[] | select(.dirty == true)' .goneat/ssot/provenance.json; then
173
+ echo "❌ ERROR: SSOT synced from dirty sources"
174
+ exit 1
175
+ fi
176
+ ```
177
+
178
+ ## Version History
179
+
180
+ - **v1.0.0** (2025-10-28): Initial stable release
181
+ - Migrated from goneat internal schema to Crucible SSOT
182
+ - Updated $id to Crucible location
183
+ - Added comprehensive documentation
184
+
185
+ ## Related Schemas
186
+
187
+ - [Embed Manifest](../../embed-manifest/v1.1.0/README.md) - Content bundling metadata
188
+ - [Binary Embed Manifest](../../binary-embed-manifest/v1.0.0/README.md) - Binary asset bundling
189
+ - [Sync Keys Schema](../../../config/sync-keys.schema.yaml) - SSOT sync configuration
190
+
191
+ ## Migration from goneat
192
+
193
+ **For goneat maintainers**: After this schema is synced to goneat:
194
+
195
+ 1. Update imports to use Crucible schema location
196
+ 2. Update schema URL in generated provenance files
197
+ 3. Remove `schemas/ssot/provenance.v1.json` from goneat repository
198
+ 4. Add sync configuration to pull this schema from Crucible
199
+
200
+ **For consumers**: No action required - provenance files remain at `.goneat/ssot/provenance.json`
@@ -0,0 +1,128 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/fulmenhq/crucible/schemas/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json",
4
+ "title": "SSOT Sync Provenance Metadata",
5
+ "description": "Aggregate provenance metadata for SSOT sync operations capturing source information for audit trails",
6
+ "type": "object",
7
+ "required": [
8
+ "schema",
9
+ "generated_at",
10
+ "sources"
11
+ ],
12
+ "properties": {
13
+ "schema": {
14
+ "type": "object",
15
+ "required": [
16
+ "name",
17
+ "version",
18
+ "url"
19
+ ],
20
+ "properties": {
21
+ "name": {
22
+ "const": "goneat.ssot.provenance"
23
+ },
24
+ "version": {
25
+ "const": "v1"
26
+ },
27
+ "url": {
28
+ "type": "string",
29
+ "format": "uri"
30
+ }
31
+ }
32
+ },
33
+ "generated_at": {
34
+ "type": "string",
35
+ "format": "date-time",
36
+ "description": "ISO 8601 timestamp when the provenance was generated"
37
+ },
38
+ "sources": {
39
+ "type": "array",
40
+ "minItems": 1,
41
+ "items": {
42
+ "$ref": "#/$defs/sourceMetadata"
43
+ }
44
+ }
45
+ },
46
+ "$defs": {
47
+ "sourceMetadata": {
48
+ "type": "object",
49
+ "required": [
50
+ "name",
51
+ "slug",
52
+ "method"
53
+ ],
54
+ "properties": {
55
+ "name": {
56
+ "type": "string",
57
+ "description": "Human-readable source name"
58
+ },
59
+ "slug": {
60
+ "type": "string",
61
+ "pattern": "^[a-z0-9-]+$",
62
+ "description": "URL-safe slug derived from source name"
63
+ },
64
+ "method": {
65
+ "enum": [
66
+ "local_path",
67
+ "git_ref",
68
+ "git_tag",
69
+ "archive"
70
+ ],
71
+ "description": "Sync method used for this source"
72
+ },
73
+ "repo_url": {
74
+ "type": "string",
75
+ "format": "uri",
76
+ "description": "Repository URL (e.g., https://github.com/org/repo)"
77
+ },
78
+ "local_path": {
79
+ "type": "string",
80
+ "description": "Local filesystem path used for sync"
81
+ },
82
+ "ref": {
83
+ "type": "string",
84
+ "description": "Git ref (branch/tag) requested or detected"
85
+ },
86
+ "commit": {
87
+ "type": "string",
88
+ "pattern": "^[a-f0-9]{40}$",
89
+ "description": "Full 40-character Git commit SHA"
90
+ },
91
+ "dirty": {
92
+ "type": "boolean",
93
+ "description": "Whether the source had uncommitted changes"
94
+ },
95
+ "dirty_reason": {
96
+ "type": "string",
97
+ "enum": [
98
+ "worktree-dirty",
99
+ "non-git",
100
+ "no-head",
101
+ "no-worktree",
102
+ "status-error"
103
+ ],
104
+ "description": "Reason for dirty status if applicable"
105
+ },
106
+ "version_file": {
107
+ "type": "string",
108
+ "description": "Version file name that was read (e.g., VERSION)"
109
+ },
110
+ "version": {
111
+ "type": "string",
112
+ "description": "Version string detected from version file"
113
+ },
114
+ "version_source": {
115
+ "type": "string",
116
+ "description": "Source of version information (file name or 'not-found')"
117
+ },
118
+ "outputs": {
119
+ "type": "object",
120
+ "additionalProperties": {
121
+ "type": "string"
122
+ },
123
+ "description": "Map of asset type to destination path"
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.fulmenhq.dev/error-handling/v1.0.0/error-response.schema.json",
4
+ "title": "Fulmen Error Response",
5
+ "description": "Extends the Pathfinder error envelope with optional telemetry fields used across Fulmen libraries.",
6
+ "$comment": "Consumers SHOULD continue to emit the pathfinder base fields; new fields are optional and additive.",
7
+ "allOf": [
8
+ {
9
+ "$ref": "../../pathfinder/v1.0.0/error-response.schema.json"
10
+ },
11
+ {
12
+ "type": "object",
13
+ "properties": {
14
+ "severity": {
15
+ "$ref": "../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityName",
16
+ "description": "Optional severity classification aligned with assessment severity levels."
17
+ },
18
+ "severity_level": {
19
+ "$ref": "../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityLevel",
20
+ "description": "Numeric severity for sorting/comparison (info=0 … critical=4)."
21
+ },
22
+ "correlation_id": {
23
+ "type": "string",
24
+ "description": "Correlation identifier used by observability logging integrations."
25
+ },
26
+ "trace_id": {
27
+ "type": "string",
28
+ "description": "Optional tracing identifier (OTel trace/span)."
29
+ },
30
+ "exit_code": {
31
+ "type": "integer",
32
+ "minimum": 0,
33
+ "maximum": 255,
34
+ "description": "Optional process exit code associated with the error."
35
+ },
36
+ "context": {
37
+ "type": "object",
38
+ "description": "Structured context key/values (non-sensitive).",
39
+ "additionalProperties": {
40
+ "oneOf": [
41
+ {
42
+ "type": "string"
43
+ },
44
+ {
45
+ "type": "number"
46
+ },
47
+ {
48
+ "type": "boolean"
49
+ },
50
+ {
51
+ "type": "array",
52
+ "items": {
53
+ "type": "string"
54
+ }
55
+ }
56
+ ]
57
+ }
58
+ },
59
+ "original": {
60
+ "description": "Optional serialized form of the wrapped/original error.",
61
+ "oneOf": [
62
+ {
63
+ "type": "string"
64
+ },
65
+ {
66
+ "type": "object",
67
+ "additionalProperties": true
68
+ }
69
+ ]
70
+ }
71
+ },
72
+ "additionalProperties": true
73
+ }
74
+ ]
75
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.fulmenhq.dev/library/foundry/v1.0.0/country-codes.schema.json",
4
+ "title": "ISO Country Codes",
5
+ "description": "ISO 3166 country code records",
6
+ "type": "object",
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string"
10
+ },
11
+ "description": {
12
+ "type": "string"
13
+ },
14
+ "version": {
15
+ "type": "string",
16
+ "pattern": "^[vV]?\\d+\\.\\d+\\.\\d+$"
17
+ },
18
+ "countries": {
19
+ "type": "array",
20
+ "minItems": 1,
21
+ "items": {
22
+ "type": "object",
23
+ "properties": {
24
+ "alpha2": {
25
+ "type": "string",
26
+ "pattern": "^[A-Z]{2}$"
27
+ },
28
+ "alpha3": {
29
+ "type": "string",
30
+ "pattern": "^[A-Z]{3}$"
31
+ },
32
+ "numeric": {
33
+ "type": "string",
34
+ "pattern": "^\\d{3}$"
35
+ },
36
+ "name": {
37
+ "type": "string"
38
+ },
39
+ "officialName": {
40
+ "type": "string"
41
+ }
42
+ },
43
+ "required": [
44
+ "alpha2",
45
+ "alpha3",
46
+ "numeric",
47
+ "name"
48
+ ],
49
+ "additionalProperties": false
50
+ }
51
+ }
52
+ },
53
+ "required": [
54
+ "version",
55
+ "countries"
56
+ ],
57
+ "additionalProperties": false
58
+ }