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
ADR-0058 D7 expression conformance ledger discovers only ExpressionInputSchema / SettingsVisibilityInputSchema positions — the 8 CronExpressionInputSchema and 3 TemplateExpressionInputSchema sites sit outside the ratchet, unclassified #15027
Recorded by the os-dev seat on #14825 (session session_0174WZTU6XcFcS7g2kykC53i, branch claude/issue-14825-knowledge-source-cron-schema), measured while checking whether typing KnowledgeRefreshPolicy.cron owed a ledger row. Unassigned, bare, for triage; out of #14825's scope (it touches the dogfood ledger and #14797's prompt-template sites).
What
packages/qa/dogfood/test/expression-conformance.test.ts at origin/main6392b9c2 re-discovers "every expression-declaring field in packages/spec/src" by SCHEMA NAME:
:43-45 — DECLARES_EXPRESSION matches name: (ExpressionInputSchema|SettingsVisibilityInputSchema) at line start. CronExpressionInputSchema and TemplateExpressionInputSchema never match: the regex requires one of the two listed names to start immediately after the colon.
So expression-conformance.ledger.ts carries zero dialect: 'cron' rows and zero dialect: 'template' rows, while packages/spec/src declares:
Measured (2026-09-03): replicating the test's own regex verbatim against the tree discovers 24 surfaces; none of the positions above is among them (control: an ExpressionInputSchema slot matches). The ledger header's promise — "A NEW expression surface that nobody classified ... breaks the build" — does not hold for these two dialects: the ratchet is structurally blind to them, not merely un-updated.
Why it matters
ADR-0058 D7's point is one honest classification per expression-holding declaration (evaluator site, fail-policy). A cron slot nothing evaluates (refresh.cron is surfaced by service-knowledge, never scheduled; the readers of cache.schedule and the two DR schedules are not measured here) is exactly the declared-but-unwired shape the ledger exists to surface, and today it cannot see the class at all.
Likely resolution, not a decision
Add the two schema names to EXPRESSION_INPUT_SCHEMAS on the same commit that classifies each site with a row (dialect: 'cron' | 'template', mode: 'interpret', enforcement naming the @objectstack/formula cron-engine / template engine and the consuming scheduler — or an honest experimental / removed state where nothing reads the value). Sites whose reader is unknown probably need their own ADR-0049 look first; #14797 owns the two prompt keys.
Positive control for the grep: git grep -n CronExpressionInputSchema packages/spec/src hits the 8 sites above plus index.ts:258 and the declaration in shared/expression.zod.ts.
Recorded by the os-dev seat on #14825 (session
session_0174WZTU6XcFcS7g2kykC53i, branchclaude/issue-14825-knowledge-source-cron-schema), measured while checking whether typingKnowledgeRefreshPolicy.cronowed a ledger row. Unassigned, bare, for triage; out of #14825's scope (it touches the dogfood ledger and #14797's prompt-template sites).What
packages/qa/dogfood/test/expression-conformance.test.tsatorigin/main6392b9c2re-discovers "every expression-declaring field in packages/spec/src" by SCHEMA NAME::42—EXPRESSION_INPUT_SCHEMAS = ['ExpressionInputSchema', 'SettingsVisibilityInputSchema']:43-45—DECLARES_EXPRESSIONmatchesname: (ExpressionInputSchema|SettingsVisibilityInputSchema)at line start.CronExpressionInputSchemaandTemplateExpressionInputSchemanever match: the regex requires one of the two listed names to start immediately after the colon.So
expression-conformance.ledger.tscarries zerodialect: 'cron'rows and zerodialect: 'template'rows, whilepackages/spec/srcdeclares:api/export.zod.ts:576and:706(cronExpression),automation/execution.zod.ts:440(cronExpression),integration/connector.zod.ts:257(schedule),system/cache.zod.ts:156(schedule),system/disaster-recovery.zod.ts:57and:238(schedule),system/job.zod.ts:15(expression) — plusai/knowledge-source.zod.tsrefresh.crononce [finding]KnowledgeSourceSchema.cronis documented as a 5-field cron expression but typedz.string()— the spec's ownCronExpressionInputSchemais not used, so'not a cron'parses green #14825 lands (a 9th).ai/model-registry.zod.ts:121and:122([finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797's prompt keys),data/object.zod.ts:2083(titleFormat, deprecated).Measured (2026-09-03): replicating the test's own regex verbatim against the tree discovers 24 surfaces; none of the positions above is among them (control: an
ExpressionInputSchemaslot matches). The ledger header's promise — "A NEW expression surface that nobody classified ... breaks the build" — does not hold for these two dialects: the ratchet is structurally blind to them, not merely un-updated.Why it matters
ADR-0058 D7's point is one honest classification per expression-holding declaration (evaluator site, fail-policy). A cron slot nothing evaluates (
refresh.cronis surfaced byservice-knowledge, never scheduled; the readers ofcache.scheduleand the two DR schedules are not measured here) is exactly the declared-but-unwired shape the ledger exists to surface, and today it cannot see the class at all.Likely resolution, not a decision
Add the two schema names to
EXPRESSION_INPUT_SCHEMASon the same commit that classifies each site with a row (dialect: 'cron' | 'template',mode: 'interpret',enforcementnaming the@objectstack/formulacron-engine / template engine and the consuming scheduler — or an honestexperimental/removedstate where nothing reads the value). Sites whose reader is unknown probably need their own ADR-0049 look first; #14797 owns the two prompt keys.Verified
search_issueswith the [finding]KnowledgeSourceSchema.cronis documented as a 5-field cron expression but typedz.string()— the spec's ownCronExpressionInputSchemais not used, so'not a cron'parses green #14825 control hitting,total_count4): settings-manifestvisibleis declaredExpressionInputSchema(CEL) but evaluated by a non-CEL grammar — a CEL predicate there silently skips the save-timerequiredgate #7169 (closed — the settings-visibility narrowing that showed the by-name discovery gap the header now documents) and 表达式 ledger 只认 descriptor configSchema,所以「刻意 schemaless」的节点上声明的 CEL 槽位没有任何 build-time 校验器 #4439 (closed — descriptorconfigSchemaslots) are the nearest; neither covers the two typed input schemas.git grep -n CronExpressionInputSchema packages/spec/srchits the 8 sites above plusindex.ts:258and the declaration inshared/expression.zod.ts.Refs: #14825 · #14797 · ADR-0058 D7 · ADR-0049.
Generated by Claude Code
Generated by Claude Code