Work card for the #15954 ruling (director seat, decision batch #56, 2026-09-06): the template-typed pair is marked, not retired.
What to do
packages/spec/src/ai/model-registry.zod.ts:121-122 — prefix both .describe() strings with the same [EXPERIMENTAL — not enforced] form ai/knowledge-source.zod.ts uses for KnowledgeRefreshPolicy.cron, stating that no runtime renders or executes the template today.
- D7 ledger (
packages/qa/dogfood/test/expression-conformance.ledger.ts): the two template-prompt rows record the marking (the row shape the knowledge-refresh row already uses).
- Regenerate the reference pages that carry the describe text.
- ⚠️
PromptTemplate.user is required (no .optional()). Do not change that here — a retirement or optionalisation of a required key is a parse-breaking change and would be its own card.
- Changeset:
patch on @objectstack/spec (describe text on a published package). Clause-②: no (prose only), cite this ruling.
Re-check before claiming
grep -n "TemplateExpressionInputSchema" packages/spec/src/ai/model-registry.zod.ts
grep -n "EXPERIMENTAL" packages/spec/src/ai/knowledge-source.zod.ts
Work card for the #15954 ruling (director seat, decision batch #56, 2026-09-06): the template-typed pair is marked, not retired.
What to do
packages/spec/src/ai/model-registry.zod.ts:121-122— prefix both.describe()strings with the same[EXPERIMENTAL — not enforced]formai/knowledge-source.zod.tsuses forKnowledgeRefreshPolicy.cron, stating that no runtime renders or executes the template today.packages/qa/dogfood/test/expression-conformance.ledger.ts): the twotemplate-promptrows record the marking (the row shape the knowledge-refresh row already uses).PromptTemplate.useris required (no.optional()). Do not change that here — a retirement or optionalisation of a required key is a parse-breaking change and would be its own card.patchon@objectstack/spec(describe text on a published package).Clause-②: no(prose only), cite this ruling.Re-check before claiming