Commit efa4e80
committed
feat(spec): a blueprint formula field can state its expression
`BlueprintFieldSchema.type` is the FULL `FieldType` enum, so the AI-build
design step could always NAME a `formula` field — but neither the lenient
schema nor the OpenAI-strict mirror the model generates against had any key for
the body. There was no way, anywhere on that surface, to say what the formula
computed. It materialized bare, and cloud graph-lint then correctly reported
`formula_without_expression` with the fix "Set field expression to a CEL
formula" — which the agent could not write in the blueprint it was holding.
Detected, but unfixable on the surface that produced it.
This is the same hole `summaryOperations` closed for roll-ups in cloud#970;
`formula` was left behind. It bites hardest through `nameField`, whose own
guidance tells the model to use a formula for numbered entities (invoice /
ticket) composing "number · name" — following that advice produced a record
title blank on every card, lookup chip and breadcrumb.
The PIN matters more than the key. The root cause is not a forgotten property:
two schemas describe the same shape and nothing forced them to agree. The mirror
is what the model may EMIT, the lenient schema is what downstream READS, and
drift either way silently drops authored config. A new test asserts the two
field schemas carry exactly the same keys, so the next key added to one cannot
go missing from the other.
`authorable-surface.json` records exactly one new key
(`ai/BlueprintField:expression`). The API surface is unchanged — a Zod field
adds no exports.
Verification: blueprint tests 29/29; full suite 132/132; check:api-surface
unchanged; check:authorable-surface green after gen:schema.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WnqGjQFQMqd5k81LYV8SCY1 parent 85a966f commit efa4e80
4 files changed
Lines changed: 75 additions & 4 deletions
File tree
- .changeset
- packages/spec
- src/ai
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| 50 | + | |
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
| |||
284 | 284 | | |
285 | 285 | | |
286 | 286 | | |
287 | | - | |
| 287 | + | |
288 | 288 | | |
289 | 289 | | |
290 | 290 | | |
| |||
307 | 307 | | |
308 | 308 | | |
309 | 309 | | |
310 | | - | |
| 310 | + | |
311 | 311 | | |
312 | 312 | | |
313 | 313 | | |
314 | | - | |
| 314 | + | |
315 | 315 | | |
316 | 316 | | |
317 | 317 | | |
| |||
360 | 360 | | |
361 | 361 | | |
362 | 362 | | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
90 | 90 | | |
91 | 91 | | |
92 | 92 | | |
| 93 | + | |
| 94 | + | |
93 | 95 | | |
94 | 96 | | |
95 | 97 | | |
| |||
271 | 273 | | |
272 | 274 | | |
273 | 275 | | |
| 276 | + | |
| 277 | + | |
274 | 278 | | |
275 | 279 | | |
276 | 280 | | |
| |||
0 commit comments