Cross-seat transfer filed by the domain:services seat (#6021) on accepting PR #7310 — the second half of the maintainer's 2026-08-10 ruling on #7169 ("fail closed now, align later"). domain:* left to triage (expected domain:spec: the edit is packages/spec/src/system/settings-manifest.zod.ts:234 and :491, hard spec ownership).
Part of #7169
The ruling's measurement, already done (PR #7310 body carries the full table)
Corpus: 94 visible predicates across the 10 bundled manifests, 27 distinct sources. Direction (a) — wire the declared CEL grammar into evaluation — breaks 93 of 94 (===/!== are not CEL; the break is total and syntactic, plus every stored manifest outside the repo, unmigratable). Direction (b) — narrow the declared type — breaks 1 of 94, and PR #7310's grammar extension already absorbed that one (relational operators), taking it to 0.
Recommendation on record: (b). Also aligned with the spec lane's own #7071 ruling (closed 2026-08-10: ExpressionInput stays CEL-and-envelope-only, "each protocol keeps its own spelling"), whose disposition explicitly named this narrow-declaration option as the substantive follow-up.
What the spec seat gets from PR #7310
The grammar the service actually evaluates (post-extension), verbatim in that PR's body: single root data, one-level member access, || && !, === !== == != >= <= > <, string/number/bool/null literals, wrapped in ${…} (bare string and { dialect, source } envelope also accepted). A regression test now pins that every bundled predicate parses (settings-service.test.ts, "every bundled manifest predicate parses").
Notes for the claimant
Refs: #7169 (parent card, stays open blocked on this), PR #7310 (fail-closed half + measurement), #7071 (adjacent ruling), #6253 (the gate precedent one layer over).
Cross-seat transfer filed by the
domain:servicesseat (#6021) on accepting PR #7310 — the second half of the maintainer's 2026-08-10 ruling on #7169 ("fail closed now, align later").domain:*left to triage (expecteddomain:spec: the edit ispackages/spec/src/system/settings-manifest.zod.ts:234and:491, hard spec ownership).Part of #7169
The ruling's measurement, already done (PR #7310 body carries the full table)
Corpus: 94
visiblepredicates across the 10 bundled manifests, 27 distinct sources. Direction (a) — wire the declared CEL grammar into evaluation — breaks 93 of 94 (===/!==are not CEL; the break is total and syntactic, plus every stored manifest outside the repo, unmigratable). Direction (b) — narrow the declared type — breaks 1 of 94, and PR #7310's grammar extension already absorbed that one (relational operators), taking it to 0.Recommendation on record: (b). Also aligned with the spec lane's own #7071 ruling (closed 2026-08-10:
ExpressionInputstays CEL-and-envelope-only, "each protocol keeps its own spelling"), whose disposition explicitly named this narrow-declaration option as the substantive follow-up.What the spec seat gets from PR #7310
The grammar the service actually evaluates (post-extension), verbatim in that PR's body: single root
data, one-level member access,|| && !,=== !== == != >= <= > <, string/number/bool/null literals, wrapped in${…}(bare string and{ dialect, source }envelope also accepted). A regression test now pins that every bundled predicate parses (settings-service.test.ts, "every bundled manifest predicate parses").Notes for the claimant
data.x in [...]) is refused at publish rather than at save — the save-time refusal (PR fix(service-settings): refuse a save whosevisiblepredicate cannot be evaluated (#7169) #7310) stays as defense in depth.:234) and manifest-level (:491).check:authorable-surface/ generated references will move with the schema change; follow the four-step regen sequence.Refs: #7169 (parent card, stays open blocked on this), PR #7310 (fail-closed half + measurement), #7071 (adjacent ruling), #6253 (the gate precedent one layer over).