Commit 42cc219
* feat(spec): declare the settings `visible` grammar the evaluator actually implements (#7327)
Both settings-manifest `visible` slots — specifier-level and manifest-level —
were typed `ExpressionInputSchema`, whose bare-string arm normalises to
`dialect: 'cel'`. Nothing has ever evaluated them as CEL: their only readers
are the console's client-side `new Function(...)` and, since #7310, the
server-side `evaluateVisibility`, which implements a small closed grammar.
`===` / `!==` — used throughout the bundled manifests — are not CEL at all.
#7169 measured which side should move: routing the declared CEL into
evaluation breaks 93 of the 94 bundled predicates, narrowing the declaration
breaks 1, and #7310's relational-operator extension had already taken that 1
to 0. Per the maintainer's 2026-08-10 ruling (and #7071's "each protocol keeps
its own spelling"), the declaration moves.
Both slots now accept exactly the evaluated grammar: single root `data`, one
level of member access, `|| && !`, `=== !== == != >= <= > <`, parentheses and
string/number/bool/null literals, optionally `${...}`-wrapped. Bare string and
`{ dialect, source }` envelope are both still accepted and a bare string still
normalises to the canonical envelope, so the wire shape does not move — only
the accepted `source` strings narrow. Real CEL (`data.x in [...]`,
`size(data.y) > 0`, `data.a.b == 1`) is refused at publish/parse with a message
naming the offending source, the reason, and the grammar that would work.
#7310's save-time refusal stays as defense in depth.
A second statement of one grammar is the drift that caused #7169, so the two
are pinned to each other: `settings-visibility-declaration.pin.test.ts` asserts
"the schema accepts it" and "the evaluator can parse it" are the same bit, over
an in/out-of-grammar table and over the real corpus — re-measured at 10
manifests / 94 predicates, 0 refused.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdPj3S347aPWapzTuHCb4N
* fix(qa): keep the settings `visible` slot in the ADR-0058 expression ratchet, classified honestly (#7327)
The expression-surface conformance ratchet discovers surfaces by matching
`<key>: ExpressionInputSchema` textually, so narrowing the two settings
`visible` slots onto their own schema dropped them out of the scan and turned
their ledger entry stale — a live predicate surface silently leaving the
ledger, which is the #1887 class the ledger exists to catch.
Discovery now reads a registered list of expression-declaring schema names
rather than one hardcoded name, with the failure mode written down: a slot
narrowed onto its own schema must register that schema on the same commit.
The classification is corrected while it is being moved. `settings-manifest
visible` sat under `cel-ui` — `dialect: 'cel'`, enforced by the SchemaRenderer
and celEngine — and is evaluated by neither. It gets its own `settings-visibility`
row naming `evaluateVisibility`, its closed grammar, and its fail-closed policy
(#7310), proved by the producer/consumer pin. `ExprDialect` gains a member for
it: the ledger records what a surface IS, and spelling this one `cel` would
restate in the ledger the exact claim #7327 removes from the schema.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdPj3S347aPWapzTuHCb4N
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent dadd1ad commit 42cc219
7 files changed
Lines changed: 616 additions & 14 deletions
File tree
- .changeset
- content/docs/references/system
- packages
- qa/dogfood/test
- services/service-settings/src
- spec/src/system
| 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 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
90 | | - | |
| 90 | + | |
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
| |||
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
122 | | - | |
| 122 | + | |
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
| |||
Lines changed: 40 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | | - | |
| 18 | + | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
22 | 24 | | |
23 | 25 | | |
24 | | - | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
25 | 36 | | |
26 | 37 | | |
27 | 38 | | |
| |||
143 | 154 | | |
144 | 155 | | |
145 | 156 | | |
146 | | - | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
147 | 161 | | |
148 | 162 | | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
149 | 185 | | |
150 | 186 | | |
151 | 187 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | | - | |
7 | | - | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
8 | 11 | | |
9 | 12 | | |
10 | 13 | | |
| |||
20 | 23 | | |
21 | 24 | | |
22 | 25 | | |
23 | | - | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
24 | 46 | | |
25 | 47 | | |
26 | 48 | | |
| |||
34 | 56 | | |
35 | 57 | | |
36 | 58 | | |
37 | | - | |
| 59 | + | |
38 | 60 | | |
39 | 61 | | |
40 | 62 | | |
| |||
0 commit comments