phase2-onboarding: adopt Phase 0 contract for m-test-engine#2
Merged
Conversation
Tier-2 onboarding per .github/docs/AI-discoverability-plan.md §3.4
and phase1-plan.md §9. Third and final tier-2 repo (after
m-modern-corpus + tree-sitter-m) to ship the Phase-0 contract.
What landed:
- AGENTS.md authored from scratch (this repo had no CLAUDE.md to
rename). Frontmatter declares the container's public contract
(name, image base, mount point, lifecycle make-targets);
CLAUDE.md symlinked to it. Five required Phase-0 sections
(Setup / Test / Build / Verify / Guardrails) present.
- dist/lifecycle.json — hand-authored machine-readable description
of the container's lifecycle, exec convention, and consumer wiring.
Mirrors what a downstream tool needs to know to drive the container
without reading the Dockerfile + compose.yml + Makefile by hand.
- dist/repo.meta.json — Phase-0 contract. $schema points at the
org-level repo.meta.schema.json. exposes:
- lifecycle → dist/lifecycle.json
- dockerfile → docker/Dockerfile
- compose → docker/compose.yml
License AGPL-3.0. verification_commands: make smoke + make check-manifest.
- tools/check-manifest.py — same stdlib-only validator pattern as
tree-sitter-m. Asserts manifest parses, required fields present,
exposes.* paths exist; optional full jsonschema validation when
the lib is available.
- Makefile — three new targets: manifest (informational; declares
lifecycle.json is hand-authored, not regenerated), check-manifest,
check-docs-prose.
- .github/workflows/ci.yml — two new steps in the existing `smoke`
job, BEFORE the docker build so a broken manifest fails fast:
"Phase-0 manifest contract gate" + "docs/ prose-only gate".
Verification, all green:
- make manifest informational pointer
- make check-manifest ✓ (manifest valid + all 3 paths present)
- make check-docs-prose ✓ (no docs/ directory)
- canonical Track-A validator OK: dist/repo.meta.json
Once .github ships build-catalog.py (Phase-1 Track B) and adds
m-test-engine to its TIER_2 list, this repo's manifest will be picked
up by the org catalog automatically.
Phase 2 progress: 3 of 3 tier-2 repos onboarded with this PR
(m-modern-corpus + tree-sitter-m + m-test-engine).
3 tasks
This was referenced May 11, 2026
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.
Summary
Tier-2 onboarding per
AI-discoverability-plan.md§3.4 andphase1-plan.md§9. Third and final tier-2 repo to ship the Phase-0 contract — completes Phase 2 onboarding after m-modern-corpus PR #2 and tree-sitter-m PR #4.What landed
AGENTS.mdCLAUDE.mdsymlinked to it. Five Phase-0 sections present.dist/lifecycle.jsoncontainer_name,image_base,mount_point,lifecycle(per-target make + compose forms),exec_convention(thedocker exec ... bash -lc '...'shape),consumers.dist/repo.meta.jsonlifecycle(dist/lifecycle.json) +dockerfile(docker/Dockerfile) +compose(docker/compose.yml). LicenseAGPL-3.0.tools/check-manifest.pyMakefilemanifest(informational — lifecycle.json is hand-authored, not regenerated),check-manifest,check-docs-prose..github/workflows/ci.ymlVerification (all green)
make manifest— informational pointermake check-manifest— manifest valid + all 3exposes.*paths presentmake check-docs-prose— nodocs/directory ✓.github/profile/build/validate-repo-meta.py) —OK: dist/repo.meta.jsonDesign notes
lifecycle.json(not generated). Container name, image base, mount point, and the make/compose lifecycle are static — a generator would parse the Dockerfile + compose.yml + Makefile to derive values that don't drift. AGENTS.md § Guardrails captures the "update lifecycle.json in the same commit when these change" rule.Phase 2 progress: 3 of 3 tier-2 repos onboarded with this PR.
Phase 1 hook
Once
.githubshipsbuild-catalog.py(Phase-1 Track B) and addsm-test-engineto itsTIER_2list, this repo's manifest will be picked up by the org catalog automatically — completing the parent plan's Phase 2 exit criterion ("all three tier-2 repos appear in generatedtools.jsonwithverified_ondates within 30 days").Test plan