@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.
- package/CHANGELOG.md +616 -0
- package/LICENSE +57 -0
- package/README.md +674 -0
- package/config/crucible-ts/README.md +38 -0
- package/config/crucible-ts/library/foundry/country-codes.yaml +29 -0
- package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +351 -0
- package/config/crucible-ts/library/foundry/exit-codes.yaml +483 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-behavior.yaml +45 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-exit-code.yaml +51 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/invalid/malformed.yaml +44 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/invalid/missing-required.yaml +36 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/parity-snapshot.json +162 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/valid/complete.yaml +314 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/valid/custom-behavior.yaml +96 -0
- package/config/crucible-ts/library/foundry/fixtures/signals/valid/minimal.yaml +55 -0
- package/config/crucible-ts/library/foundry/http-statuses.yaml +148 -0
- package/config/crucible-ts/library/foundry/mime-types.yaml +39 -0
- package/config/crucible-ts/library/foundry/patterns.yaml +185 -0
- package/config/crucible-ts/library/foundry/signals.yaml +331 -0
- package/config/crucible-ts/library/foundry/similarity-fixtures.yaml +432 -0
- package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +117 -0
- package/config/crucible-ts/library/fulhash/fixtures.yaml +160 -0
- package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +179 -0
- package/config/crucible-ts/repository/app-identity/app-identity.example.yaml +42 -0
- package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-binary-name.yaml +7 -0
- package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-env-prefix.yaml +7 -0
- package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-vendor.yaml +7 -0
- package/config/crucible-ts/repository/app-identity/fixtures/invalid/malformed-yaml.yaml +8 -0
- package/config/crucible-ts/repository/app-identity/fixtures/invalid/missing-required.yaml +6 -0
- package/config/crucible-ts/repository/app-identity/fixtures/valid/complete.yaml +20 -0
- package/config/crucible-ts/repository/app-identity/fixtures/valid/minimal.yaml +7 -0
- package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-api.yaml +10 -0
- package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-worker.yaml +10 -0
- package/config/crucible-ts/repository/app-identity/parity-snapshot.json +125 -0
- package/config/crucible-ts/server/management/server-management.yaml +141 -0
- package/config/crucible-ts/sync/README.md +13 -0
- package/config/crucible-ts/sync/sync-keys.yaml +74 -0
- package/config/crucible-ts/taxonomy/languages.yaml +33 -0
- package/config/crucible-ts/taxonomy/metrics.yaml +115 -0
- package/config/crucible-ts/taxonomy/repository-categories.yaml +66 -0
- package/config/crucible-ts/terminal/v1.0.0/terminal-overrides-defaults.yaml +38 -0
- package/config/crucible-ts/web/branding/site-branding.yaml +21 -0
- package/config/crucible-ts/web/styling/site-styling.yaml +104 -0
- package/dist/appidentity/index.d.ts +304 -0
- package/dist/appidentity/index.js +5519 -0
- package/dist/appidentity/index.js.map +1 -0
- package/dist/config/index.d.ts +144 -0
- package/dist/config/index.js +5752 -0
- package/dist/config/index.js.map +1 -0
- package/dist/crucible/index.d.ts +78 -0
- package/dist/crucible/index.js +6038 -0
- package/dist/crucible/index.js.map +1 -0
- package/dist/docscribe/index.d.ts +110 -0
- package/dist/docscribe/index.js +682 -0
- package/dist/docscribe/index.js.map +1 -0
- package/dist/errors/index.d.ts +150 -0
- package/dist/errors/index.js +5583 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/foundry/index.d.ts +1557 -0
- package/dist/foundry/index.js +5474 -0
- package/dist/foundry/index.js.map +1 -0
- package/dist/foundry/similarity/index.d.ts +17 -0
- package/dist/foundry/similarity/index.js +136 -0
- package/dist/foundry/similarity/index.js.map +1 -0
- package/dist/fulhash/index.d.ts +82 -0
- package/dist/fulhash/index.js +374 -0
- package/dist/fulhash/index.js.map +1 -0
- package/dist/fulmen-error-B_kX8jSC.d.ts +309 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +6197 -0
- package/dist/index.js.map +1 -0
- package/dist/logger-JU2jYitA.d.ts +171 -0
- package/dist/logging/index.d.ts +198 -0
- package/dist/logging/index.js +578 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/pathfinder/index.d.ts +532 -0
- package/dist/pathfinder/index.js +6750 -0
- package/dist/pathfinder/index.js.map +1 -0
- package/dist/registry-x1-Qi_Tz.d.ts +349 -0
- package/dist/schema/index.d.ts +388 -0
- package/dist/schema/index.js +5522 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/suggest-CLqjLZ5L.d.ts +168 -0
- package/dist/telemetry/index.d.ts +161 -0
- package/dist/telemetry/index.js +5610 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/types-B_WtvQbS.d.ts +214 -0
- package/package.json +130 -0
- package/schemas/crucible-ts/api/http/v1.0.0/README.md +22 -0
- package/schemas/crucible-ts/api/http/v1.0.0/error-response.schema.json +54 -0
- package/schemas/crucible-ts/api/http/v1.0.0/health-response.schema.json +70 -0
- package/schemas/crucible-ts/api/http/v1.0.0/success-response.schema.json +51 -0
- package/schemas/crucible-ts/api/http/v1.0.0/version-response.schema.json +61 -0
- package/schemas/crucible-ts/ascii/v1.0.0/README.md +69 -0
- package/schemas/crucible-ts/ascii/v1.0.0/box-chars.schema.json +60 -0
- package/schemas/crucible-ts/ascii/v1.0.0/string-analysis.schema.json +45 -0
- package/schemas/crucible-ts/assessment/README.md +25 -0
- package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +60 -0
- package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/README.md +11 -0
- package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +61 -0
- package/schemas/crucible-ts/config/goneat/README.md +60 -0
- package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +234 -0
- package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +344 -0
- package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +20 -0
- package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +17 -0
- package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +178 -0
- package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +205 -0
- package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +143 -0
- package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +20 -0
- package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +288 -0
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +60 -0
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +225 -0
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +62 -0
- package/schemas/crucible-ts/config/sync-consumer-config.yaml +51 -0
- package/schemas/crucible-ts/config/sync-keys.schema.yaml +37 -0
- package/schemas/crucible-ts/content/README.md +19 -0
- package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/README.md +13 -0
- package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/binary-embed-manifest.schema.yaml +36 -0
- package/schemas/crucible-ts/content/embed-manifest/v1.1.0/README.md +13 -0
- package/schemas/crucible-ts/content/embed-manifest/v1.1.0/embed-manifest.schema.yaml +78 -0
- package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/README.md +200 -0
- package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +128 -0
- package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +75 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +58 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +300 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +74 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +60 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +97 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +457 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/similarity.schema.json +260 -0
- package/schemas/crucible-ts/library/foundry/v2.0.0/similarity.schema.json +558 -0
- package/schemas/crucible-ts/library/fulhash/v1.0.0/README.md +6 -0
- package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +8 -0
- package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +100 -0
- package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +227 -0
- package/schemas/crucible-ts/library/module-manifest/v1.0.0/README.md +31 -0
- package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +132 -0
- package/schemas/crucible-ts/meta/README.md +23 -0
- package/schemas/crucible-ts/meta/draft-07/schema.json +245 -0
- package/schemas/crucible-ts/meta/draft-2020-12/meta/applicator.json +81 -0
- package/schemas/crucible-ts/meta/draft-2020-12/meta/content.json +21 -0
- package/schemas/crucible-ts/meta/draft-2020-12/meta/core.json +64 -0
- package/schemas/crucible-ts/meta/draft-2020-12/meta/format-annotation.json +15 -0
- package/schemas/crucible-ts/meta/draft-2020-12/meta/meta-data.json +35 -0
- package/schemas/crucible-ts/meta/draft-2020-12/meta/unevaluated.json +18 -0
- package/schemas/crucible-ts/meta/draft-2020-12/meta/validation.json +119 -0
- package/schemas/crucible-ts/meta/draft-2020-12/schema.json +80 -0
- package/schemas/crucible-ts/observability/logging/v1.0.0/README.md +82 -0
- package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +140 -0
- package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +179 -0
- package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +518 -0
- package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +225 -0
- package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +181 -0
- package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +38 -0
- package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +86 -0
- package/schemas/crucible-ts/pathfinder/v1.0.0/README.md +104 -0
- package/schemas/crucible-ts/pathfinder/v1.0.0/error-response.schema.json +35 -0
- package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +49 -0
- package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +91 -0
- package/schemas/crucible-ts/pathfinder/v1.0.0/metadata.schema.json +61 -0
- package/schemas/crucible-ts/pathfinder/v1.0.0/path-constraint.schema.json +50 -0
- package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +40 -0
- package/schemas/crucible-ts/protocol/http/v1.0.0/README.md +22 -0
- package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +54 -0
- package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +70 -0
- package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +51 -0
- package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +61 -0
- package/schemas/crucible-ts/schema-validation/v1.0.0/README.md +65 -0
- package/schemas/crucible-ts/schema-validation/v1.0.0/schema-registry.schema.json +31 -0
- package/schemas/crucible-ts/schema-validation/v1.0.0/validator-config.schema.json +36 -0
- package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +199 -0
- package/schemas/crucible-ts/taxonomy/language/v1.0.0/README.md +30 -0
- package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +17 -0
- package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +44 -0
- package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/README.md +31 -0
- package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +19 -0
- package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +39 -0
- package/schemas/crucible-ts/terminal/v1.0.0/README.md +45 -0
- package/schemas/crucible-ts/terminal/v1.0.0/catalog/apple-terminal.yaml +2 -0
- package/schemas/crucible-ts/terminal/v1.0.0/catalog/ghostty.yaml +13 -0
- package/schemas/crucible-ts/terminal/v1.0.0/catalog/iterm2.yaml +13 -0
- package/schemas/crucible-ts/terminal/v1.0.0/schema.json +40 -0
- package/schemas/crucible-ts/tooling/external-tools/v1.0.0/README.md +164 -0
- package/schemas/crucible-ts/tooling/external-tools/v1.0.0/external-tools-manifest.schema.yaml +83 -0
- package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +177 -0
- package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml +146 -0
- package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +79 -0
- 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
|
+
}
|