Repository navigation
feat(cli): loop-first agent context, universal requirements pages, init --dialect - #557
Merged
Merged
Conversation
…, init --dialect The always-on file meta init scaffolds now opens with the whole loop for the declared stack: generate (one step per declared server, plus the web client), schema (first migration, apply-pending, rename and allow flags), requirements, and the verify commands. It drops from about 19 KB to about 5 KB; the principles move verbatim to metaobjects-codegen/references/principles.md and the port-sync and upgrade text to metaobjects-verify/references/upgrading.md. It no longer tells agents to read SKILL.md by path. - Requirements reference pages install in every stack (the concern gate observed nodes at init time, before a new project had any). meta gen and meta verify say when a scaffolded context lacks them. - meta gen advises wiring requirementTests() when requirements exist and nothing tests them. - meta init --dialect sqlite|postgres|mysql|d1, dialect-aware next steps, and a shorter scaffolded config comment carrying the generator import line. - migration.md documents --rename-column, --rename-table and --allow. - Skill trigger evals gain mid-task cases. - meta gen --list off a terminal is unchanged: its TOON default is parsed by tools and skills.
…kflow list The section split the numbered workflow, leaving step 3 (Apply) detached after it. Conformance fixtures regenerated.
dmealing
force-pushed
the
fm/mo-onboarding-fixes
branch
from
November 12, 2026 03:24
79e3f41 to
bcddd8a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Changed
agent-context/templates/always-on.md.mustache) loop-first, with per-stack loop fragments underagent-context/templates/loops/(TypeScript, C#, Java, Kotlin, Python, client). The long principles, adoption, JVM, port-sync and upgrade text moves into the metaobjects-codegen and metaobjects-verify skills. Migration docs gain--rename-column,--rename-tableand--allow. Mid-task skill-trigger evals are added underagent-context/evals/. The always-on file no longer tells agents tocatSKILL.md files.meta initinstalls the requirements reference pages in every stack. The concern-gating machinery (CONCERN_TOKENS,detectConcerns,hasRequirementNodes,Stack.concerns) is removed.meta genandmeta verifyprint an advisory when the model declares requirements and the scaffolded context has no requirements pages.meta genalso advises when norequirement-testsgenerator is wired (namingrequirementTests()andmeta eject requirement-tests). Exit codes are unchanged.meta init --dialect sqlite|postgres|mysql|d1sets the codegen dialect, andmigrate.dialectfor sqlite, postgres and d1.--d1equals--dialect d1, and a conflicting pair is refused. MySQL is codegen-only. Next steps are dialect-aware, and the scaffolded config comment is shorter.Not included: a compact
meta gen --listfor non-TTY output. The off-TTY default stays TOON, a structured format that tests and skills parse. The always-on file documents a one-line grep/paste filter instead.Validation: two no-mistakes runs. The first passed with one review note: the new "Renames and destructive changes" section in
migration.mdsplit its numbered workflow. The second run moved that section after the list and passed with no findings. A fullscripts/ci-local.sh --quickand thesdkandclisuites also passed locally before the first run.Also: content hashes, the agent-context conformance fixtures (the ts-requirements case is replaced with a csharp case), and CHANGELOG entries under Unreleased. Versions and the release header are unchanged.
Validation
Risk Assessment
✅ Low: Changes are agent-context docs and templates, a bounded
--dialectflag and two advisories that never touch exit codes; the concrete generator class names, flags and allow tokens the new text cites exist in source.Testing
I drove the real
metaCLI from source in disposable projects. All init dialect cases behave as specified (config values, conflict and bogus-dialect refusals at exit 2). Themeta genadvisory for requirements with norequirement-testsgenerator fires and the exit code stays 0. The 'agent context has no requirements pages' advisory fires ongenandverify, andmeta init --docs-only --refresh-docsclears it. A model with no requirements gets neither advisory. The scaffolded always-on file is about 4 KB, loop-first, documents--rename-column,--rename-tableand--allow, and has no instruction to read SKILL.md files.migration.mdnow has "Renames and destructive changes" after step 3 and before "Dialects", and the documented flags matchmeta migrate --help. Regression: baseline ci-local (ts-fast, ts-unit) was already green, and I ran the sdk, metadata, cli and codegen-ts suites separately with 0 failures. A single run of the whole server suite exceeded the 10-minute background limit, so I ran it per package; the Java, C#, Python and Kotlin lanes were not run. The "no advisory oncerequirementTests()is wired" case is covered only by its unit test, since wiring the import in a disposable project was not driven live. This is CLI text output with no UI surface, so there are no screenshots; the transcripts are saved as evidence files.meta init --dialect sqlite|postgres|mysql|d1writes the right codegen and migrate dialect, with dialect-aware next steps (CLI, throwaway projects)--d1 --dialect postgres,--dialect oracle);--d1 --dialect d1accepted and equals--d1(CLI)generators: [in the commentgenerators: []is the real list at the endmeta initinstalls requirements pages in every stack, so a fresh project has the three requirements.md pagesmeta genadvisory when requirements exist and no requirement-tests generator is wired, naming requirementTests() andmeta eject requirement-tests, exit code unchangedmeta genandmeta verifyadvisory when requirements exist and the scaffolded context lacks the pages;meta init --docs-only --refresh-docsfixes it; no advisory when the model has no requirement…--allow, has a 'Going deeper' list saying the loop needs no skill, and tells agents nothing about reading SKILL.md--rename-column,--rename-table,--allow drop-check/drop-columnpresent and match migrate --helpEvidence: init --dialect transcripts (all dialects, conflicts)
Evidence: init --dialect postgres full output
Evidence: requirement-tests advisory and verify transcripts
Evidence: missing-requirements-pages advisory and refresh transcript
Evidence: scaffolded always-on file and migration.md outline
Evidence: migrate --help flags
Evidence: per-package suite results
Pipeline
Updates from git push no-mistakes
✅ **Intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
✅ **Review** - passed
✅ No issues found.
✅ **Test** - passed
✅ No issues found.
meta init --dialect sqlite|postgres|mysql|d1writes the right codegen and migrate dialect, with dialect-aware next steps (CLI, throwaway projects)--d1 --dialect postgres,--dialect oracle);--d1 --dialect d1accepted and equals--d1(CLI)generators: [in the commentgenerators: []is the real list at the endmeta initinstalls requirements pages in every stack, so a fresh project has the three requirements.md pagesmeta genadvisory when requirements exist and no requirement-tests generator is wired, naming requirementTests() andmeta eject requirement-tests, exit code unchangedmeta genandmeta verifyadvisory when requirements exist and the scaffolded context lacks the pages;meta init --docs-only --refresh-docsfixes it; no advisory when the model has no requirement…--allow, has a 'Going deeper' list saying the loop needs no skill, and tells agents nothing about reading SKILL.md--rename-column,--rename-table,--allow drop-check/drop-columnpresent and match migrate --helpscripts/ci-local.sh --only ts-fast --only ts-unit --strict-toolchainsmeta init --dialect postgres|sqlite|mysql|d1,--d1,--d1 --dialect d1,--d1 --dialect postgresand--dialect oracle, run from source withbun server/typescript/packages/cli/bin/meta.tsin throwaway /tmp projects; checked exit codes,metaobjects.config.ts,.metaobjects/config.jsonmigrate, and the printed step 5meta genandmeta verifyin a project with onerequirement.functionaland the scaffolded context: the requirement-tests advisory, exit code 0Old-scaffold simulation (requirements pages removed from disk and manifest):meta genandmeta verifyprint the refresh advisory,meta init --docs-only --refresh-docsreinstalls the 3 requirements pages, and the advisory goes quietModel with no requirements on an old scaffold: no advisory frommeta genormeta verifyRead the scaffolded.metaobjects/AGENTS.md(4030 bytes) and grepped it and the skills for cat/read-SKILL.md instructions; checkedmigration.mdstep order; compared the documented flags withmeta migrate --helpbun testin cli targeted files (87 pass), sdk agent-context and conformance files (96 pass)bun testper package: sdk 437, metadata 3965, cli 2006, codegen-ts 3444; all pass, 0 fail✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.