@precepts/standards 0.1.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.
Files changed (34) hide show
  1. package/LICENSE +30 -0
  2. package/README.md +115 -0
  3. package/package.json +40 -0
  4. package/schema/document-standard-template.md +139 -0
  5. package/schema/standards.schema.json +154 -0
  6. package/standards/integration/governance/_category_.json +1 -0
  7. package/standards/integration/governance/integration-styles.md +56 -0
  8. package/standards/integration/index.md +9 -0
  9. package/standards/integration/standards/_category_.json +1 -0
  10. package/standards/integration/standards/api/_category_.json +1 -0
  11. package/standards/integration/standards/api/error-handling.md +250 -0
  12. package/standards/integration/standards/api/resource-design.md +286 -0
  13. package/standards/integration/standards/data-formats/_category_.json +1 -0
  14. package/standards/integration/standards/data-formats/character-encoding.md +206 -0
  15. package/standards/integration/standards/data-formats/date-format.md +102 -0
  16. package/standards/integration/standards/data-formats/datetime-formats.md +265 -0
  17. package/standards/integration/standards/data-formats/monetary-format.md +61 -0
  18. package/standards/integration/standards/events/_category_.json +1 -0
  19. package/standards/integration/standards/events/event-envelope.md +270 -0
  20. package/standards/integration/standards/foundational/_category_.json +1 -0
  21. package/standards/integration/standards/foundational/naming-conventions.md +334 -0
  22. package/standards/integration/standards/observability/_category_.json +1 -0
  23. package/standards/integration/standards/observability/integration-observability.md +226 -0
  24. package/standards/integration/standards/resilience/_category_.json +1 -0
  25. package/standards/integration/standards/resilience/integration-resilience-patterns.md +291 -0
  26. package/standards/integration/standards/resilience/retry-policy.md +268 -0
  27. package/standards/integration/standards/resilience/timeout.md +269 -0
  28. package/standards/integration/standards/versioning/_category_.json +1 -0
  29. package/standards/integration/standards/versioning/backward-forward-compatibility.md +230 -0
  30. package/standards/product/Guidelines/_category_.json +1 -0
  31. package/standards/product/Guidelines/requirement-document.md +54 -0
  32. package/standards/product/index.md +9 -0
  33. package/standards/project-management/index.md +9 -0
  34. package/standards/ux/index.md +9 -0
@@ -0,0 +1,206 @@
1
+ ---
2
+ identifier: "INTG-STD-005"
3
+ name: "Character Encoding"
4
+ version: "1.0.0"
5
+ status: "MANDATORY"
6
+
7
+ domain: "INTEGRATION"
8
+ documentType: "standard"
9
+ category: "format"
10
+ appliesTo: ["api", "events", "a2a", "files", "mcp", "webhooks", "grpc", "graphql", "batch", "streaming"]
11
+
12
+ lastUpdated: "2026-03-28"
13
+ owner: "Integration Architecture Board"
14
+
15
+ standardsCompliance:
16
+ iso: ["ISO-10646"]
17
+ rfc: ["RFC-3629", "RFC-8259", "RFC-5198", "RFC-2277"]
18
+ w3c: ["Character-Model-for-the-World-Wide-Web"]
19
+ other: []
20
+
21
+ taxonomy:
22
+ capability: "data-format"
23
+ subCapability: "character-encoding"
24
+ layer: "contract"
25
+
26
+ enforcement:
27
+ method: "automated"
28
+ validationRules:
29
+ encoding: "UTF-8"
30
+ normalization: "NFC"
31
+ bom: "forbidden-in-json"
32
+ rejectionCriteria:
33
+ - "Non-UTF-8 encoded payloads"
34
+ - "BOM in JSON payloads"
35
+ - "Unassigned or surrogate code points"
36
+
37
+ dependsOn: []
38
+ supersedes: ""
39
+ ---
40
+
41
+ # Character Encoding
42
+
43
+ ## Purpose
44
+
45
+ This standard defines the **REQUIRED** character encoding for all text data exchanged across integration boundaries. Inconsistent encoding causes data corruption, security vulnerabilities, and integration failures. All integration surfaces **MUST** use UTF-8 with NFC normalization to guarantee round-trip fidelity and deterministic string comparison.
46
+
47
+ > *Normative language (**MUST**, **MUST NOT**, **SHOULD**, **SHOULD NOT**, **MAY**) follows RFC 2119 semantics.*
48
+
49
+ ---
50
+
51
+ ## Rules
52
+
53
+ ### R-1: UTF-8 as Sole Encoding
54
+
55
+ All text data crossing integration boundaries **MUST** be encoded in UTF-8 (RFC 3629).
56
+
57
+ - UTF-16, UTF-32, ISO-8859-x, Windows-125x, Shift_JIS, and all other encodings **MUST NOT** be used at integration boundaries.
58
+ - Internal representations **MAY** use other encodings, but **MUST** convert to UTF-8 before crossing any boundary.
59
+
60
+ ### R-2: Valid UTF-8 Sequences Only
61
+
62
+ All byte sequences **MUST** be well-formed per RFC 3629. The following **MUST** be rejected:
63
+
64
+ - Overlong encodings (e.g., `C0 80` for U+0000)
65
+ - Surrogate halves (U+D800 through U+DFFF)
66
+ - Code points beyond U+10FFFF
67
+ - Truncated multi-byte sequences
68
+ - Unexpected continuation bytes without a valid leading byte
69
+
70
+ ### R-3: NFC Normalization
71
+
72
+ All text **MUST** be normalized to NFC (RFC 5198) before transmission.
73
+
74
+ - Producers **MUST** emit NFC-normalized text.
75
+ - Consumers **SHOULD** verify NFC normalization on input.
76
+ - String comparison at integration boundaries **MUST** compare NFC-normalized forms.
77
+ - NFKC or NFKD **MUST NOT** be applied at integration boundaries - compatibility decomposition is lossy.
78
+
79
+ ### R-4: BOM (Byte Order Mark) Handling
80
+
81
+ The UTF-8 BOM (`EF BB BF`) **MUST** be handled per format:
82
+
83
+ | Format | BOM Rule | Rationale |
84
+ |---|---|---|
85
+ | JSON | **MUST NOT** be present | RFC 8259 forbids it |
86
+ | XML | **MAY** be present; parsers **MUST** tolerate | XML spec permits BOM |
87
+ | CSV | **SHOULD** be present for spreadsheet interop | Required for UTF-8 detection in common tools |
88
+ | Protocol Buffers / gRPC | **MUST NOT** be present | Binary framing; BOM is meaningless |
89
+ | GraphQL | **MUST NOT** be present | Spec treats BOM as insignificant |
90
+ | Plain text (logs, config) | **SHOULD NOT** be present | Breaks concatenation and Unix tools |
91
+ | HTTP bodies | **MUST NOT** be present in JSON/API responses | Redundant with Content-Type header |
92
+
93
+ If a BOM is encountered where forbidden, the system **MUST** strip it before processing and **MAY** log a warning.
94
+
95
+ ### R-5: Encoding Declaration
96
+
97
+ The encoding **MUST** be declared through the appropriate mechanism:
98
+
99
+ | Surface | Declaration Mechanism |
100
+ |---|---|
101
+ | HTTP responses | `Content-Type` header with `charset=utf-8` |
102
+ | HTTP requests | `Content-Type` header **MUST** include `charset=utf-8` for text payloads |
103
+ | XML documents | `<?xml version="1.0" encoding="UTF-8"?>` **MUST** be present |
104
+ | HTML documents | `<meta charset="UTF-8">` **MUST** appear within first 1024 bytes |
105
+ | CSV files | UTF-8 BOM as first bytes; `text/csv; charset=utf-8` in HTTP |
106
+ | Event payloads | Schema registry or envelope **MUST** declare encoding |
107
+ | Message queues | Message metadata **MUST** declare `charset=utf-8` |
108
+ | gRPC / Protobuf | Implicit - `string` type is defined as UTF-8 |
109
+ | File transfers | Filename convention or manifest **MUST** declare encoding |
110
+
111
+ ### R-6: Rejection Policy
112
+
113
+ Systems receiving data at integration boundaries **MUST** validate encoding:
114
+
115
+ - **API gateways** **MUST** reject non-UTF-8 payloads with HTTP 400 and a descriptive error.
116
+ - **Event consumers** **MUST** route non-UTF-8 messages to a dead-letter queue and emit an alert.
117
+ - **File processors** **MUST** reject non-UTF-8 files and log the detected encoding.
118
+ - **Batch jobs** **MUST** fail the individual record (not the entire batch) and report violations in the summary.
119
+
120
+ Systems **MUST NOT** silently replace invalid bytes with U+FFFD at integration boundaries. Replacement characters are acceptable only for internal display or logging.
121
+
122
+ ### R-7: Database Storage
123
+
124
+ Integration-facing tables **MUST** use UTF-8-compatible character sets and collation. Notably, 3-byte "utf8" in MySQL **MUST NOT** be used - it cannot represent characters outside the Basic Multilingual Plane. Use the full 4-byte UTF-8 character set instead.
125
+
126
+ ### R-8: Special Character Handling
127
+
128
+ | Context | Rule |
129
+ |---|---|
130
+ | JSON strings | Control characters (U+0000 - U+001F) **MUST** be escaped per RFC 8259 |
131
+ | XML content | Syntax-conflicting characters **MUST** use entities or CDATA; control chars other than TAB, LF, CR **MUST NOT** appear |
132
+ | URL parameters | Non-ASCII characters **MUST** be percent-encoded after UTF-8 encoding (RFC 3986) |
133
+ | SQL | Parameterized queries **MUST** be used; string concatenation with user Unicode input **MUST NOT** be used |
134
+ | Log output | Non-printable characters **SHOULD** be escaped using `\uXXXX` notation |
135
+
136
+ ---
137
+
138
+ ## Examples
139
+
140
+ ### Valid: UTF-8 JSON with Encoding Declaration
141
+
142
+ A JSON payload containing multilingual text, served with the correct Content-Type header (`application/json; charset=utf-8`). All characters are valid UTF-8, NFC-normalized, and no BOM is present.
143
+
144
+ ### Invalid: Non-UTF-8 Payload
145
+
146
+ A payload containing bare `0xE9` (Latin-1 "e-acute") without valid UTF-8 continuation bytes. Rejected at the gateway with error code `INVALID_ENCODING` and the byte offset of the invalid sequence.
147
+
148
+ ---
149
+
150
+ ## Enforcement Rules
151
+
152
+ | Violation | Action | Error Code |
153
+ |---|---|---|
154
+ | Non-UTF-8 encoding detected | Reject (HTTP 400 or equivalent) | `INVALID_ENCODING` |
155
+ | Invalid UTF-8 byte sequence | Reject (HTTP 400 or equivalent) | `INVALID_UTF8` |
156
+ | BOM present in JSON payload | Strip, process, and log warning | `UNEXPECTED_BOM` |
157
+ | Surrogate code point | Reject (HTTP 400 or equivalent) | `SURROGATE_CODEPOINT` |
158
+ | Non-character code point | Reject (HTTP 400 or equivalent) | `NONCHARACTER` |
159
+ | Forbidden control character (C0 other than TAB/LF/CR, or C1) | Reject (HTTP 400 or equivalent) | `FORBIDDEN_CONTROL` |
160
+ | NULL (U+0000) in JSON or XML | Reject (HTTP 400 or equivalent) | `FORBIDDEN_CONTROL` |
161
+ | Private-use code points without bilateral agreement | Reject or log warning | `PRIVATE_USE` |
162
+ | Missing encoding declaration | Log warning; assume UTF-8 | `MISSING_CHARSET` |
163
+
164
+ Enforcement **MUST** occur at the outermost integration boundary (API gateway, message broker ingress, file intake). Interior services **MAY** rely on gateway validation.
165
+
166
+ ---
167
+
168
+ ## Security Considerations
169
+
170
+ | Threat | Attack Vector | Mitigation |
171
+ |---|---|---|
172
+ | Encoding injection | Overlong UTF-8 sequences bypass path/input filters (e.g., `C0 AF` encodes `/`) | R-2 eliminates overlong sequences; R-6 rejects non-UTF-8 before application logic |
173
+ | Normalization bypass | Visually identical strings with different byte representations bypass auth checks | R-3 mandates NFC; comparison **MUST** use normalized forms |
174
+ | Homoglyph spoofing | Characters from different scripts appear identical (Latin "a" vs Cyrillic "a") | Systems processing user-visible identifiers **SHOULD** apply confusable detection (UTS #39) |
175
+ | Null byte injection | Embedded U+0000 truncates strings in C-based systems, enabling filter bypass | Enforcement rules forbid NULL in text payloads |
176
+
177
+ ---
178
+
179
+ ## References
180
+
181
+ - [**RFC 3629**](https://www.rfc-editor.org/rfc/rfc3629) - UTF-8 (STD 63)
182
+ - [**RFC 8259**](https://datatracker.ietf.org/doc/html/rfc8259) - JSON Data Interchange Format
183
+ - [**RFC 5198**](https://www.rfc-editor.org/rfc/rfc5198) - Unicode Format for Network Interchange
184
+ - [**RFC 2277 / BCP 18**](https://www.rfc-editor.org/rfc/rfc2277.html) - IETF Policy on Character Sets and Languages
185
+ - [**RFC 3986**](https://www.rfc-editor.org/rfc/rfc3986) - URI Generic Syntax
186
+ - [**W3C Character Model**](https://www.w3.org/TR/charmod/) - Fundamentals
187
+ - [**Unicode Standard Annex #15**](https://unicode.org/reports/tr15/) - Normalization Forms
188
+ - [**Unicode Technical Standard #39**](https://unicode.org/reports/tr39/) - Security Mechanisms
189
+
190
+ ---
191
+
192
+ ## Rationale
193
+
194
+ **UTF-8 exclusively:** UTF-8 encodes every Unicode code point, is mandated by RFC 8259 (JSON) and BCP 18 (IETF protocols), is ASCII-compatible, self-synchronizing, and used by over 98% of web pages.
195
+
196
+ **NFC over other forms:** NFC is the most compact canonical form, preserves compatibility characters (unlike lossy NFKC/NFKD), and is recommended by both W3C and RFC 5198.
197
+
198
+ **Per-format BOM rules:** No single BOM policy fits all consumers - JSON forbids it (RFC 8259), while spreadsheet tools require it for reliable UTF-8 detection.
199
+
200
+ ---
201
+
202
+ ## Version History
203
+
204
+ | Version | Date | Change |
205
+ | ------- | ---------- | ------------------ |
206
+ | 1.0.0 | 2026-03-28 | Initial definition |
@@ -0,0 +1,102 @@
1
+ ---
2
+ identifier: "INTG-STD-001"
3
+ name: "Date Format"
4
+ version: "1.0.0"
5
+ status: "MANDATORY"
6
+
7
+ domain: "INTEGRATION"
8
+ documentType: "standard"
9
+ category: "format"
10
+ appliesTo: ["api", "events", "a2a", "mcp"]
11
+
12
+ lastUpdated: "2026-02-16"
13
+ owner: "Integration Architecture Board"
14
+
15
+ standardsCompliance:
16
+ iso: ["ISO-8601"]
17
+ rfc: []
18
+ w3c: []
19
+ other: []
20
+
21
+ taxonomy:
22
+ capability: "data-format"
23
+ subCapability: "date"
24
+ layer: "contract"
25
+
26
+ enforcement:
27
+ method: "automated"
28
+ validationRules:
29
+ dateFormat: "YYYY-MM-DD"
30
+ regex: "^\\d{4}-\\d{2}-\\d{2}$"
31
+ rejectionCriteria:
32
+ - "Unix Epoch format"
33
+ - "Local timezone offsets"
34
+ - "Non-ISO date separators (slash, space)"
35
+ supportedFormats: ["ISO-8601"]
36
+ authoritativeModel: "ISO-8601"
37
+
38
+ dependsOn: []
39
+ supersedes: ""
40
+ ---
41
+
42
+ # Date
43
+
44
+ ## Purpose
45
+
46
+ All date values transmitted across any interface **MUST** follow the ISO-8601 format. This ensures deterministic interpretation across all systems, languages, and timezones.
47
+
48
+ ## Conceptual Model
49
+
50
+ A date represents a calendar day without time-of-day or timezone information. The canonical representation is the ISO-8601 extended format: `YYYY-MM-DD`.
51
+
52
+ ## Rules
53
+
54
+ - All date fields **MUST** use the `YYYY-MM-DD` format
55
+ - Unix Epoch representations **MUST** be rejected
56
+ - Local timezone offsets **MUST NOT** be included in date-only fields
57
+ - Non-ISO separators (slash, space) **MUST** be rejected
58
+
59
+ ## Examples
60
+
61
+ ### Valid
62
+
63
+ ```json
64
+ { "created_at": "2026-02-16" }
65
+ ```
66
+
67
+ ### Invalid
68
+
69
+ ```json
70
+ { "created_at": "16-02-2026" }
71
+ ```
72
+ ```json
73
+ { "created_at": "16/02/2026" }
74
+ ```
75
+ ```json
76
+ { "created_at": "02-16-2026" }
77
+ ```
78
+
79
+ ## Validation Rules
80
+
81
+ **Regex:** `^\d{4}-\d{2}-\d{2}$`
82
+
83
+ Validation **MUST** occur at contract boundary (API gateway, event schema registry, message broker).
84
+
85
+ ## Enforcement Rules
86
+
87
+ - **Constraint:** Reject any payload using Unix Epoch or local timezone offsets.
88
+ - **Reference:** [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
89
+
90
+ ## References
91
+
92
+ - [**ISO-8601**](https://en.wikipedia.org/wiki/ISO_8601) - Date and time format standard
93
+
94
+ ## Rationale
95
+
96
+ ISO-8601 `YYYY-MM-DD` is unambiguous across locales (unlike `DD/MM/YYYY` vs `MM/DD/YYYY`), sorts lexicographically, and is natively supported by all major programming languages and databases.
97
+
98
+ ## Version History
99
+
100
+ | Version | Date | Change |
101
+ | ------- | ---------- | ------------------ |
102
+ | 1.0.0 | 2026-02-16 | Initial definition |
@@ -0,0 +1,265 @@
1
+ ---
2
+ identifier: "INTG-STD-002"
3
+ name: "Date and Time"
4
+ version: "2.0.0"
5
+ status: "MANDATORY"
6
+
7
+ domain: "INTEGRATION"
8
+ documentType: "standard"
9
+ category: "format"
10
+ appliesTo: ["api", "events", "a2a", "mcp"]
11
+
12
+ lastUpdated: "2026-01-29"
13
+ owner: "Integration Architecture Board"
14
+
15
+ standardsCompliance:
16
+ iso: ["ISO-8601"]
17
+ rfc: ["RFC-3339", "RFC-9557"]
18
+ w3c: []
19
+ other: []
20
+
21
+ taxonomy:
22
+ capability: "data-format"
23
+ subCapability: "date-time"
24
+ layer: "contract"
25
+
26
+ enforcement:
27
+ method: "automated"
28
+ absolute:
29
+ format: "RFC3339_UTC"
30
+ allowOffset: false
31
+ allowUnixEpoch: false
32
+ timezoneRequired: true
33
+ regex: "^d{4}-d{2}-d{2}Td{2}:d{2}:d{2}(.d{1,9})?Z$"
34
+ scheduled:
35
+ zoneRequired: true
36
+ allowOffsetOnly: false
37
+ authoritativeTuple: ["local_timestamp", "zone"]
38
+ supportedFormats:
39
+ - "RFC9557"
40
+ - "TRIPLE_FIELD_MODEL"
41
+
42
+ classifications: ["ABSOLUTE", "SCHEDULED"]
43
+ dependsOn: ["INTG-STD-001"]
44
+ supersedes: ""
45
+ ---
46
+
47
+ # Date and Time
48
+
49
+ ## Purpose
50
+
51
+ This standard defines the **REQUIRED** representation of date and time values exchanged across all integration boundaries.
52
+
53
+ The objective is to,
54
+
55
+ - Deterministic interpretation
56
+ - Cross-platform interoperability
57
+ - DST and timezone resilience
58
+ - Machine-governable validation
59
+ - Long-term scheduling correctness
60
+
61
+ > *Normative language (MUST, MUST NOT, SHOULD) follows RFC 2119 semantics.*
62
+
63
+ ---
64
+
65
+ ## Classifications
66
+
67
+ There are two distinct semantic classifications of date-time representations.
68
+
69
+ | Classification| Description | Deterministic at creation time |
70
+ |---------------|----------------------------------------------|--------------------------------|
71
+ | **ABSOLUTE** | Represents a past or present instant in time | Yes |
72
+ | **SCHEDULED** | Represents a future planned occurrence | No (offset subject to change) |
73
+
74
+ Representation strategy depends on the applicable classification.
75
+
76
+ ---
77
+
78
+ ## Rules
79
+
80
+ ### ABSOLUTE Timestamp Standard
81
+
82
+ ### Rules
83
+
84
+ All **ABSOLUTE** timestamps **MUST**,
85
+ 1. Conform to RFC 3339
86
+ 2. Be expressed in UTC
87
+ 3. Use the literal `Z` suffix
88
+ 4. NOT use Unix Epoch format
89
+ 5. NOT use timezone offsets (`+01:00`)
90
+ 6. Represent a single unambiguous instant
91
+
92
+ ### Canonical Format
93
+
94
+ `YYYY-MM-DDTHH:mm:ssZ`
95
+
96
+ Optionally, fractional seconds **MAY** be allowed, with a maximum of 9 fractional digits.
97
+
98
+ `YYYY-MM-DDTHH:mm:ss.SSSZ`
99
+
100
+ ### Validation Regex
101
+
102
+ `^d{4}-d{2}-d{2}Td{2}:d{2}:d{2}(.d{1,9})?Z$`
103
+
104
+ ---
105
+
106
+ ### SCHEDULED (Future) Timestamp Standard
107
+
108
+ ### Distinction
109
+
110
+ Future timestamps are not deterministic because,
111
+ - DST (*Daylight Saving Time*) rules may change
112
+ - Jurisdictions may modify timezone legislation
113
+ - Offsets are derived values
114
+ - Offset alone does not uniquely identify a timezone
115
+
116
+ → Offsets **MUST NOT** be authoritative for future scheduled timestamps.
117
+
118
+ ### Rules
119
+
120
+ If a date-time represents a **SCHEDULED** future event,
121
+ - An IANA (*Internet Assigned Numbers Authority*) timezone identifier (ZoneId) is **MANDATORY**
122
+ - Zone **MUST** take precedence over offset
123
+ - Offset-only representations **MUST** be rejected
124
+
125
+ ### Canonical Formats
126
+
127
+ #### Timezone-Aware Systems (Preferred)
128
+
129
+ Use **RFC-9557** format
130
+
131
+ `YYYY-MM-DDTHH:mm:ss[Area/Location]`
132
+
133
+ This preserves timezone identity independent of offset.
134
+
135
+ #### Timezone-Unaware Systems (Fallback)
136
+
137
+ Use the *Triple-Field Model*
138
+ - `local_timestamp`: LocalDateTime without offset
139
+ - `zone`: Valid IANA ZoneId
140
+ - `utc_timestamp`: RFC-3339 canonical UTC
141
+
142
+ Here, the authoritative representation is `(local_timestamp, zone)`, while `utc_timestamp` is a derived projection.
143
+
144
+ ### Interpretation Algorithm
145
+
146
+ To compute execution instant,
147
+ - Read `zone`
148
+ - Apply current **tzdb** (*Timezone DB*) rules
149
+ - Derive offset
150
+ - Compute `utc_timestamp`
151
+ - Execute at derived instant
152
+
153
+ **NEVER** reverse this order.
154
+
155
+ ---
156
+
157
+ ## Examples
158
+
159
+ ### ABSOLUTE Timestamps
160
+
161
+ #### Valid
162
+
163
+ ```json
164
+ { "created_at": "2026-02-16T09:30:45Z" }
165
+ ```
166
+
167
+ ```json
168
+ { "created_at": "2026-02-16T09:30:45.123Z" }
169
+ ```
170
+
171
+ #### Invalid
172
+
173
+ ```json
174
+ { "created_at": "1698393600" }
175
+ ```
176
+
177
+ ```json
178
+ { "created_at": "2026-02-16T10:30:45+01:00" }
179
+ ```
180
+
181
+ ### SCHEDULED Timestamps
182
+
183
+ #### Valid
184
+
185
+ ```json
186
+ { "scheduled_at": "2027-12-01T11:00:00[America/New_York]" }
187
+ ```
188
+
189
+ ```json
190
+ {
191
+ "local_timestamp": "2027-12-01T11:00:00",
192
+ "zone": "America/New_York",
193
+ "utc_timestamp": "2027-12-01T16:00:00Z"
194
+ }
195
+ ```
196
+
197
+ #### Invalid
198
+
199
+ ```json
200
+ { "scheduled_at": "2027-12-01T11:00:00Z" }
201
+ ```
202
+
203
+ ```json
204
+ { "scheduled_at": "2026-02-16T10:30:45+01:00" }
205
+ ```
206
+
207
+ ```json
208
+ { "scheduled_at": "1698393600" }
209
+ ```
210
+
211
+ ---
212
+
213
+ ## Enforcement Rules
214
+
215
+ The following payloads **MUST** be *rejected*,
216
+
217
+ For **ABSOLUTE** timestamps:
218
+ - Unix Epoch format
219
+ - Offset-based timestamps
220
+ - Missing timezone indicator
221
+ - Local timestamps without Z
222
+
223
+ For **SCHEDULED** timestamps:
224
+ - Missing zone
225
+ - Invalid IANA (*Internet Assigned Numbers Authority*) ZoneId
226
+ - Offset-only representation
227
+ - UTC timestamp inconsistent with tzdb projection
228
+
229
+ Validation **MUST** occur at contract boundary.
230
+
231
+ ---
232
+
233
+ ## Rationale
234
+
235
+ This standard ensures,
236
+ - Deterministic event replay (event-driven systems)
237
+ - Cross-language interoperability
238
+ - Protection against DST drift
239
+ - Regulatory resilience
240
+ - AI-governable timestamp validation
241
+ - Future-proof scheduling semantics
242
+
243
+ UTC guarantees stability for **ABSOLUTE** time.
244
+
245
+ Zone-based representation guarantees correctness for **SCHEDULED** time.
246
+
247
+ ---
248
+
249
+ ## References
250
+
251
+ - [**ISO-8601**](https://en.wikipedia.org/wiki/ISO_8601) (Date)
252
+ - [**RFC-3339**](https://www.rfc-editor.org/rfc/rfc3339.html#page-4) ((Z Form))
253
+ - [**RFC-9557**](https://www.rfc-editor.org/rfc/rfc9557#name-internet-extended-date-time)
254
+ - [**TZDB**](https://www.iana.org/time-zones)
255
+ - Current [**TZDB Explorer**](https://nodatime.org/TimeZones), with historic versions
256
+
257
+ ---
258
+
259
+ ## Version History
260
+
261
+ | Version | Date | Change |
262
+ | ------- | ---------- | ------------------------------------ |
263
+ | 2.0.0 | 2026-02-16 | Introduced scheduled timestamp model |
264
+ | 1.1.0 | 2026-02-16 | Added fractional seconds |
265
+ | 1.0.0 | 2023-10-27 | Initial definition |
@@ -0,0 +1,61 @@
1
+ ---
2
+ identifier: "INTG-STD-003"
3
+ name: "Money and Currency"
4
+ version: "1.0.0"
5
+ status: "DRAFT"
6
+
7
+ domain: "INTEGRATION"
8
+ documentType: "standard"
9
+ category: "format"
10
+ appliesTo: ["api", "events", "a2a", "files", "mcp"]
11
+
12
+ lastUpdated: "2026-02-17"
13
+ owner: "Integration Architecture Board"
14
+
15
+ standardsCompliance:
16
+ iso: ["ISO-4217"]
17
+ rfc: []
18
+ w3c: []
19
+ other: []
20
+
21
+ taxonomy:
22
+ capability: "data-format"
23
+ subCapability: "monetary"
24
+ layer: "contract"
25
+
26
+ enforcement:
27
+ method: "automated"
28
+ validationRules: {}
29
+ rejectionCriteria: []
30
+ supportedFormats: []
31
+ authoritativeModel: ""
32
+
33
+ dependsOn: []
34
+ supersedes: ""
35
+ ---
36
+
37
+ # Money and Currency
38
+
39
+ ## Purpose
40
+
41
+ ## Conceptual Model
42
+
43
+ ## Rules
44
+
45
+ ## Examples
46
+
47
+ ## Allowed Representations
48
+
49
+ ## Validation Rules
50
+
51
+ ## Enforcement Rules
52
+
53
+ ## References
54
+
55
+ ## Rationale
56
+
57
+ ## Version History
58
+
59
+ | Version | Date | Change |
60
+ | ------- | ---------- | ------------------ |
61
+ | 1.0.0 | 2026-02-17 | Initial definition |
@@ -0,0 +1 @@
1
+ {"label": "Events", "position": 4}