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 35a39e7
Browse filesBrowse the repository at this point in the historyBrowse files
Wave 3 (field.uri/field.inet subtypes + @stringformat {email,hostname}) merged
on main (09ceba2), so its guidance goes live in the agent-context surfaces.
- authoring skill: add field.uri (URL/URI native), field.inet (IP native), and
@stringformat: email/hostname (validated plain string — don't hand-write a
validator.regex) to the canonical-needs table + a Wave-3 prose block; these are
concrete instances of the ADR-0037 2a-subtype / 2c-attribute split already taught.
Remove the Wave-3 portion of the TODO; reframe the remainder as Wave 4
(reverse-navigation derivation — @reverseName is the OPTIONAL override).
- audit skill: activate the Wave-3 modernization checks (validator.regex/string
validating email -> @stringformat: email; URL-holding string -> field.uri;
IP-holding string -> field.inet). Reframe the forward TODO as Wave 4, pending,
with @reverseName (optional override) — not @relationName.
- grounding exemption: swap @relationName -> @reverseName in
DELIBERATELY_NAMED_RETIRED_OR_CUT (Wave 4, not-yet-registered). field.uri/
field.inet/@stringformat are registered, so they pass grounding as real vocab.
- regenerate agent-context conformance fixtures (4 stacks, byte-identical).
Grounding + drift + conformance tests green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GF9xLEQZaPus5Y6opk398n
Copy file name to clipboardExpand all lines: fixtures/agent-context-conformance/java-kotlin-react-tanstack/expected/.claude/skills/metaobjects-audit/SKILL.md
+17-11Lines changed: 17 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -114,21 +114,27 @@ such, surfaced in the roadmap, but **non-failing** (the code works; the form is
114
114
birthday-with-time, a recurring local schedule) → recommend **`@localTime: true`** (naive
115
115
`timestamp without time zone`), or confirm it is genuinely meant to be an instant. Default
116
116
`field.timestamp` is an instant; only flag when the field's meaning is clearly wall-clock.
117
+
- A `validator.regex` (or a plain `field.string`) validating an **email** shape → recommend
118
+
**`@stringFormat: email`** on the `field.string` (ADR-0036 Wave 3). The native type stays
119
+
`string`; the per-port codegen emits the idiomatic email check — don't hand-roll the regex.
120
+
- A `field.string` that **holds a URL / URI** → recommend **`field.uri`** (native `URI`/`Uri`,
121
+
URL validation) — a distinct native type + behavior is a subtype, not a validated string.
122
+
- A `field.string` that **holds an IP address** → recommend **`field.inet`** (native IP type;
123
+
Postgres `inet` column).
117
124
118
125
**Custom-provider vocabulary (adopters who register their own types/attrs):** check
119
126
new/custom vocab against the ADR-0037 procedure (advisory) — e.g. *a custom subtype
120
127
that differs from an existing one only by a property should be an attribute, not a
121
-
subtype*; a string-shape validation (email/url) is an attribute (native type unchanged),
122
-
not a subtype. Recommend re-shaping against the ordered test.
123
-
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
126
-
them until merged):**
127
-
128
-
- An author-supplied regex validating email / url shape → flag for the forthcoming
129
-
`@format` string-format attribute — *pending Wave 3, not yet active*.
130
-
- A same-pair relationship needing a stable navigation name → flag for the forthcoming
131
-
`@relationName` attribute — *pending Wave 3, not yet active*.
128
+
subtype*; an email/hostname string-validation is an **attribute** (`@stringFormat`,
129
+
native type unchanged), while a URL or IP is a **native type** (`field.uri` /
130
+
`field.inet`, a subtype). Recommend re-shaping against the ordered test.
131
+
132
+
**TODO — Wave 4 (reverse-navigation derivation), pending — not yet active.** When
133
+
codegen derives the reverse accessor for a relationship, an adopter who hand-maintains
134
+
a same-pair / back-reference navigation name becomes a modernization candidate. The
135
+
reverse accessor is **derived automatically**; the override is the *optional* attribute
136
+
**`@reverseName`** (NOT required, and NOT the old @relationName). This token is not yet
137
+
registered — do NOT flag adopters for it until Wave 4 merges.
Copy file name to clipboardExpand all lines: fixtures/agent-context-conformance/java-kotlin-react-tanstack/expected/.claude/skills/metaobjects-authoring/SKILL.md
+19-1Lines changed: 19 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -233,6 +233,9 @@ Canonical form for common field needs — reach for these before inventing anyth
233
233
| Long / unbounded text | bare `field.string`| add `@maxLength` only when you want `varchar(N)`|
234
234
| Nested structured value |`field.object`|`@objectRef` + `@storage`|
235
235
| Open JSON bag (no fixed shape) |`field.string` + `@dbColumnType: jsonb`| logical type stays string; column is jsonb |
236
+
| URL / URI |`field.uri`| native `URI`/`Uri`; `text` column; URL validation — a real native type + behavior, so a subtype (not a validated string) |
237
+
| IP address |`field.inet`| native IP type; Postgres `inet` column |
0 commit comments