Skip to content

Commit 1c91e67

Browse files
dmealingclaude
andcommitted
docs(changelog): record the agent-context corrections in [0.24.0]
Entry authored by the session that made the fix (dbe156e) and pasted here rather than committed there — CHANGELOG.md is being rewritten by this batch (the callout became "four vocabulary retirements in ONE window"), so a commit into it on main would have handed the release cut a conflict in the one file under active rewrite, for no benefit. Placed AFTER the four BREAKING sections and deliberately NOT inside the A/B/C/D callout: this is a correction of shipped-and-wrong DOCS, not a fifth retirement, and mixing the kinds would blur exactly what the callout exists to make scannable. a8f08fb gets no entry, on the author's own recommendation and the right test: it is a projection function with no caller, so a changelog line would describe something an adopter cannot observe — the same consumer-impact rule ADR-0035 Amendment 1 applies to the version axis. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DhpswkF1NvwxhFWMmdAT15
1 parent f561e92 commit 1c91e67

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,61 @@ emits no diagnostic, only assertions that quietly cover less. The corpus now car
306306
README naming which case covers which path, so an edit that removes one has to remove its
307307
stated purpose too.
308308

309+
### Fixed — the agent-facing docs described `@promptStyle` backwards, and never mentioned `sources`
310+
311+
Two shipped-and-wrong agent-facing surfaces, both corrections of documentation rather than
312+
behaviour. The human-facing docs were right in both cases; only the agent context missed the
313+
pass, which is the worse half to miss — an agent reads it as ground truth and acts on it
314+
without a second source.
315+
316+
**`@promptStyle` was documented exactly backwards.** The audit skill's capability checklist
317+
claimed it "is on `template.output` ONLY; authoring it on `template.prompt` fails load with
318+
`ERR_UNKNOWN_ATTR`". The registry says the opposite — `@promptStyle` is registered on
319+
`template.prompt` (`spec/metamodel/template.json`, byte-gated in `expected-registry.json`). An
320+
agent following the checklist would have authored the attribute on the one subtype where it
321+
genuinely fails to load, and then been told by the same file that the resulting error was
322+
impossible. The claim appeared **twice** in one block (the attr inventory and a parenthetical),
323+
so deleting either alone left it standing.
324+
325+
ADR-0052's rollout swept the `metaobjects-prompts` skill and its five per-port references;
326+
**`metaobjects-codegen` and `metaobjects-audit` were missed.** Both now carry the ruling: a
327+
template subtype's axis is DIRECTION — `template.prompt` owns both halves of talking to a model
328+
(a prompt carrying `@responseRef` owns the parser-on-receipt, the tolerant `extract` mapper and
329+
the FR-010 output-format fragment), while `template.output` is outbound only and emits no parser.
330+
331+
**The load-bearing part was the audit heuristics, not the prose.** Six statements told an
332+
auditor to flag a hand-rolled parser "where a `template.output` node exists" — now the wrong
333+
node to look for, so that check would have missed every real finding *and* manufactured false
334+
ones against email and document templates that legitimately have no parser. All six are re-keyed
335+
onto a responding `template.prompt`, plus two capability statements that described parser
336+
codegen as a `template.output` tier.
337+
338+
**Reconciling the attr inventories against the registry — rather than inverting the one wrong
339+
sentence — surfaced four more errors nobody had reported:** `template.prompt` was missing
340+
`@promptStyle` and `@responseFormat`, `template.output` was missing `@payloadRef` / `@textRef` /
341+
`@format` / `@maxChars`, and `template.toolcall` was missing `@maxTokens`. The documented TS
342+
output filenames were stale too — `<Name>.output.ts` is now `<Name>.response.ts`, alongside
343+
`<Name>.responseFormat.ts` and `<Name>.extractor.ts`. Those were verified against the generators
344+
rather than against the ADR: an accepted ADR is a decision, and the emitter is the fact. The
345+
generator *class* names (`SpringOutputParserGenerator`, `KotlinOutputParserGenerator`,
346+
`OutputParserGenerator`) are unchanged and kept.
347+
348+
**`sources` was absent from the scaffolded agent context entirely** — `grep -c sources` on the
349+
agent-docs body returned **0** — while the same file actively asserted that
350+
`.metaobjects/config.json` "is unchanged — it still holds static project state". It holds
351+
`sources` (see *Added — `sources` is read by all four CLI surfaces* below). So every project
352+
scaffolded by `meta init` received agent docs that could not describe where its own metadata
353+
comes from, and positively said nothing had changed.
354+
355+
`meta init` now scaffolds a **"Where metadata comes from"** section stating the rule the feature
356+
documentation reserves that file for: **`metaobjects/` is the DEFAULT VALUE of `sources`, never
357+
a requirement, and must not be assumed to exist.** It covers the declaration shape, that every
358+
command reads the same set (so pointing `sources` elsewhere moves all of them together), that a
359+
`path` is read in place and never installed, four-CLI-surface support, set-not-list ordering, and
360+
strict unknown-key rejection. Refresh an existing project's copy with `meta init --refresh-docs`.
361+
362+
All five byte-gated `agent-context-conformance` expected trees are regenerated.
363+
309364
### Metamodel version — `metamodelVersion` moves to `0.10`, and is now gated
310365

311366
**Metamodel version: `0.9` → `0.10`.** ADR-0035 Amendment 2 made `metamodelVersion` the

0 commit comments

Comments
 (0)