You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 91f11ce
Browse filesBrowse the repository at this point in the historyBrowse files
Wave 2 (field.timestamp instant-by-default + the boolean @localTime naive
opt-out; @dbColumnType:timestamp_with_tz retired) is now merged on main, so its
guidance goes live in the adopter-facing skills.
- authoring skill: field.timestamp is instant/tz-aware by default; add
@localTime:true only for a genuine naive wall-clock value; never use the
retired @dbColumnType:timestamp_with_tz. Replaced the Wave-2 portion of the
TODO marker; Wave-3 (@format/@relationName) stays a TODO.
- audit skill (vocabulary-hygiene axis): activated the two timestamp checks
(flag timestamp_with_tz; flag a wall-clock field.timestamp -> @localTime).
Wave-3 checks (@Format / @relationName) stay in the pending TODO block.
- grounding test: removed @localTime from DELIBERATELY_NAMED_RETIRED_OR_CUT
(it is now registered on field.timestamp), so the authoring skill naming it
passes grounding as a real attr. @relationName stays exempted (Wave 3).
- regenerated agent-context conformance goldens (all 4 stacks).
Claude-Session: https://claude.ai/code/session_01GF9xLEQZaPus5Y6opk398n
Co-authored-by: Doug Mealing <noreply@anthropic.com>
|`field.currency`| integer minor units | see Currency below |
157
157
|`field.enum`| string member |`@values` required; see Enum below |
@@ -183,13 +183,27 @@ Canonical form for common needs — reach for these before inventing anything:
183
183
| IDs / unique keys |`field.uuid`| native UUID; use `@dbColumnType: uuid` only to force a string-typed value over a uuid column on purpose |
184
184
| Money |`field.currency`| integer minor units; never a float |
185
185
| Closed set of symbols |`field.enum`|`@values` required |
186
-
| Instant / timestamp |`field.timestamp`| ISO 8601 with timezone on the wire |
186
+
| Instant / event time (created/updated) |`field.timestamp`| instant / tz-aware by default (Postgres `timestamptz`; native `Instant`/`DateTimeOffset`/aware `datetime`) |
187
+
| Naive wall-clock value (store-open time, birthday-with-time) |`field.timestamp` + `@localTime: true`|`timestamp without time zone` — opt out of zone-awareness only for a genuine wall-clock value |
187
188
| A list of anything |`isArray: true`| on the base subtype (e.g. `field.string` + `isArray`) — there is **no** array `@dbColumnType` (retired) |
188
189
| Long / unbounded text | bare `field.string`| add `@maxLength` only when you want `varchar(N)`|
189
190
| Nested structured value |`field.object`|`@objectRef` + `@storage`|
190
191
| Open JSON bag (no fixed shape) |`field.string` + `@dbColumnType: jsonb`| logical type stays string; column is jsonb |
Copy file name to clipboardExpand all lines: fixtures/agent-context-conformance/java-kotlin-react-tanstack/expected/.claude/skills/metaobjects-audit/SKILL.md
+12-7Lines changed: 12 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -107,23 +107,28 @@ such, surfaced in the roadmap, but **non-failing** (the code works; the form is
107
107
-`@dbColumnType: uuid` where a native UUID type is actually wanted → **`field.uuid`**
108
108
(a distinct native type is a subtype, not a physical override). Keep `@dbColumnType:
109
109
uuid` ONLY for the deliberate string-over-uuid-column case.
110
+
-`@dbColumnType: timestamp_with_tz` (ADR-0036 Wave 2) → **drop it.**`field.timestamp` is
111
+
instant / timezone-aware **by default** now; the `timestamp_with_tz` column-type override
112
+
is **retired**. Timezone-awareness lives in `field.timestamp` + the `@localTime` opt-out.
113
+
- A bare `field.timestamp` that is **semantically a wall-clock value** (a store-open time, a
114
+
birthday-with-time, a recurring local schedule) → recommend **`@localTime: true`** (naive
115
+
`timestamp without time zone`), or confirm it is genuinely meant to be an instant. Default
116
+
`field.timestamp` is an instant; only flag when the field's meaning is clearly wall-clock.
110
117
111
118
**Custom-provider vocabulary (adopters who register their own types/attrs):** check
112
119
new/custom vocab against the ADR-0037 procedure (advisory) — e.g. *a custom subtype
113
120
that differs from an existing one only by a property should be an attribute, not a
114
121
subtype*; a string-shape validation (email/url) is an attribute (native type unchanged),
115
122
not a subtype. Recommend re-shaping against the ordered test.
116
123
117
-
**TODO — Wave-2/3 checks to add when the conventions merge (NOT yet active — these
118
-
tokens are pending ADR-0036 Wave 2/3 and not yet registered; do NOT flag adopters for
124
+
**TODO — Wave-3 checks to add when the conventions merge (NOT yet active — these
125
+
tokens are pending ADR-0036 Wave 3 and not yet registered; do NOT flag adopters for
119
126
them until merged):**
120
127
121
-
-`@dbColumnType: timestamp_with_tz` → **drop it** (timezone-aware is the
122
-
`field.timestamp` default) — *pending Wave 2/3*.
123
-
- A bare wall-clock `field.timestamp` meaning naive/local time → flag for the
Copy file name to clipboardExpand all lines: fixtures/agent-context-conformance/java-kotlin-react-tanstack/expected/.claude/skills/metaobjects-authoring/SKILL.md
+17-3Lines changed: 17 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -151,7 +151,7 @@ name package extends abstract overlay isArray children value
151
151
|`field.double`| float ||
152
152
|`field.boolean`| true/false ||
153
153
|`field.date`| calendar date | ISO 8601 `YYYY-MM-DD` on the wire |
154
-
|`field.timestamp`| instant | ISO 8601 with timezone on the wire |
154
+
|`field.timestamp`| instant (tz-aware) | ISO 8601 with timezone on the wire; `@localTime: true` for a naive wall-clock value|
|`field.currency`| integer minor units | see Currency below |
157
157
|`field.enum`| string member |`@values` required; see Enum below |
@@ -183,13 +183,27 @@ Canonical form for common needs — reach for these before inventing anything:
183
183
| IDs / unique keys |`field.uuid`| native UUID; use `@dbColumnType: uuid` only to force a string-typed value over a uuid column on purpose |
184
184
| Money |`field.currency`| integer minor units; never a float |
185
185
| Closed set of symbols |`field.enum`|`@values` required |
186
-
| Instant / timestamp |`field.timestamp`| ISO 8601 with timezone on the wire |
186
+
| Instant / event time (created/updated) |`field.timestamp`| instant / tz-aware by default (Postgres `timestamptz`; native `Instant`/`DateTimeOffset`/aware `datetime`) |
187
+
| Naive wall-clock value (store-open time, birthday-with-time) |`field.timestamp` + `@localTime: true`|`timestamp without time zone` — opt out of zone-awareness only for a genuine wall-clock value |
187
188
| A list of anything |`isArray: true`| on the base subtype (e.g. `field.string` + `isArray`) — there is **no** array `@dbColumnType` (retired) |
188
189
| Long / unbounded text | bare `field.string`| add `@maxLength` only when you want `varchar(N)`|
189
190
| Nested structured value |`field.object`|`@objectRef` + `@storage`|
190
191
| Open JSON bag (no fixed shape) |`field.string` + `@dbColumnType: jsonb`| logical type stays string; column is jsonb |
|`field.currency`| integer minor units | see Currency below |
157
157
|`field.enum`| string member |`@values` required; see Enum below |
@@ -183,13 +183,27 @@ Canonical form for common needs — reach for these before inventing anything:
183
183
| IDs / unique keys |`field.uuid`| native UUID; use `@dbColumnType: uuid` only to force a string-typed value over a uuid column on purpose |
184
184
| Money |`field.currency`| integer minor units; never a float |
185
185
| Closed set of symbols |`field.enum`|`@values` required |
186
-
| Instant / timestamp |`field.timestamp`| ISO 8601 with timezone on the wire |
186
+
| Instant / event time (created/updated) |`field.timestamp`| instant / tz-aware by default (Postgres `timestamptz`; native `Instant`/`DateTimeOffset`/aware `datetime`) |
187
+
| Naive wall-clock value (store-open time, birthday-with-time) |`field.timestamp` + `@localTime: true`|`timestamp without time zone` — opt out of zone-awareness only for a genuine wall-clock value |
187
188
| A list of anything |`isArray: true`| on the base subtype (e.g. `field.string` + `isArray`) — there is **no** array `@dbColumnType` (retired) |
188
189
| Long / unbounded text | bare `field.string`| add `@maxLength` only when you want `varchar(N)`|
189
190
| Nested structured value |`field.object`|`@objectRef` + `@storage`|
190
191
| Open JSON bag (no fixed shape) |`field.string` + `@dbColumnType: jsonb`| logical type stays string; column is jsonb |
0 commit comments