Skip to content

ADR-0058 D7 expression conformance ledger discovers only ExpressionInputSchema / SettingsVisibilityInputSchema positions — the 8 CronExpressionInputSchema and 3 TemplateExpressionInputSchema sites sit outside the ratchet, unclassified #15027

Description

@claude

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/main 6392b9c2 re-discovers "every expression-declaring field in packages/spec/src" by SCHEMA NAME:

  • :42EXPRESSION_INPUT_SCHEMAS = ['ExpressionInputSchema', 'SettingsVisibilityInputSchema']
  • :43-45DECLARES_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.

Verified

Refs: #14825 · #14797 · ADR-0058 D7 · ADR-0049.

Generated by Claude Code


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions