phase0-status: capture post-merge cleanup + clear outstanding#2
Merged
Conversation
After the B/C/D PRs merged and the smoke test went green on main, a follow-on docs/-as-prose-only cross-repo cleanup landed: - m-standard PR #6 — docs/integrated/ → integrated/ (reverts 3bfb947) - m-cli PR #9 — docs/vista-lint-presets/ → examples/vista-lint-presets/ - m-stdlib PR #4 — update inbound refs - m-cli PR #10 — drop the docs/-walk shim in _find_m_standard() make phase0-smoke re-verified PASS after each batch (pointers move atomically with payload files). The previously-listed "local feature branches still exist" follow-up turned out to be a no-op: `gh pr merge --delete-branch` cleared both remote and local tracking branches when run from main with the feature branch not currently checked out. Phase 0 follow-ups now exhausted; Phase 1 is unblocked.
rafael5
added a commit
that referenced
this pull request
May 11, 2026
Adds the Phase-0 pointer URLs to the m-modern-corpus entry after m-modern-corpus PR #2 (phase2-onboarding) landed: - agent_instructions: AGENTS.md - repo_meta_url: dist/repo.meta.json - manifest_url: dist/manifest.json - stats_url: dist/stats.json - license: LicenseRef-mixed-per-subdir (was free-text) The hand-curated lines (role, consumed_by, upstream_projects, calibrates) stay until Phase 1 ships build-catalog.py. Once the generator lands, those fall away too — replaced by counts derived mechanically from the manifest. Tier-2 onboarding per AI-discoverability-plan.md §3.4 / phase1-plan.md §9. Phase 2 exit for this repo: satisfied at merge of upstream PR #2.
3 tasks
rafael5
added a commit
that referenced
this pull request
May 11, 2026
Adds Phase-0 pointer URLs to the m-test-engine entry after PR #2 in m-test-engine onboarded it (third and final tier-2 repo): - agent_instructions: AGENTS.md - repo_meta_url: dist/repo.meta.json - lifecycle_url: dist/lifecycle.json - dockerfile_url: docker/Dockerfile - compose_url: docker/compose.yml Hand-curated lines (role, consumed_by, container_name, bind_mount, transport, lifecycle, alternative) stay until Phase 1 ships build-catalog.py — those will fall away in favour of generator-derived summaries. Phase 2 progress: 3 of 3 tier-2 repos onboarded with this PR. Phase 2 exit criterion ("all three tier-2 repos appear in generated tools.json with verified_on dates within 30 days") will be met as soon as Phase 1 lands.
rafael5
added a commit
that referenced
this pull request
May 11, 2026
Coordinated companion to the three tier-3 onboarding PRs that landed in parallel today: - tree-sitter-m-vscode #3 (squash-merge 1251518) - m-stdlib-vscode #2 (squash-merge e92f660) - m-cli-extras #2 (squash-merge 6e6fccf) Each entry gains Phase-0 pointer URLs: - repo_meta_url → dist/repo.meta.json - tree-sitter-m-vscode: + extension_info_url, package_json_url, language_configuration_url - m-stdlib-vscode: + extension_info_url, package_json_url - m-cli-extras: + plugins_url Also drops the placeholder "not yet onboarded" notes lines and fixes two stale fields surfaced by the onboarding PRs: - tree-sitter-m-vscode license: AGPL-3.0 → MIT (matches package.json) - tree-sitter-m-vscode agent_instructions: CLAUDE.md → AGENTS.md - m-stdlib-vscode agent_instructions: README.md placeholder → AGENTS.md Phase 2 (tier-2) and tier-3 onboardings now both COMPLETE — every non-archived repo in the org-catalog carries the Phase-0 contract. Mechanical pickup will happen via P1-B's build-catalog.py (PR #12, open for review). make phase0-smoke still PASS; tools.json validates against tools.schema.json (P1-A's strict shape).
rafael5
added a commit
that referenced
this pull request
May 11, 2026
…s PR The three tier-3 repos (tree-sitter-m-vscode, m-stdlib-vscode, m-cli-extras) all shipped dist/repo.meta.json today (PRs #3, #2, #2 in their respective repos; org-side companion .github PR #13 merged). Adds TIER_3 = [...] alongside TIER_1 + TIER_2; defaults the URL list to TIER_1 + TIER_2 + TIER_3 so build-catalog covers all nine manifest-bearing org repos. Without this commit the regenerated catalog would silently drop the three tier-3 entries, looking like a drift-vs-committed bug. Tests unchanged (still 22 green); local diff against committed tools.json now shows the four real semantic gaps that P1-D will need to address (m-tools archived-entry handling, consumed_by inverse-edge computation, m-stdlib manifest_url/modules_url naming, additive licenses_url/pyproject_toml_url payload pointers).
rafael5
added a commit
that referenced
this pull request
May 11, 2026
* phase1-B: build-catalog + validate-catalog (TDD)
Phase-1 Track B of the AI-discoverability plan: implement the two
scripts that turn `profile/tools.json` from a hand-curated file into a
generated artifact, plus the catalog-level validator that enforces the
post-P1-A contract.
profile/build/validate-catalog.py
* Validates `profile/tools.json` against `tools.schema.json` and
`profile/task_index.json` against `task_index.schema.json`, both
via Draft202012Validator from jsonschema.
* Asserts no data-key collision between the two top-level shapes —
a future-proofing guard: after P1-A the two documents share no
top-level data key. The five meta-keys ($schema / schema_compat /
schema_version / kind / _comment) are expected on both and skipped.
* argparse: --tools (default profile/tools.json),
--task-index (default profile/task_index.json).
* Returns 0 on success; non-zero with structured stderr on failure.
profile/build/build-catalog.py
* TIER_1 + TIER_2 constants: the six onboarded repos' raw-GitHub
repo.meta.json URLs (m-cli, m-stdlib, m-standard, tree-sitter-m,
m-test-engine, m-modern-corpus).
* For each manifest: fetch → validate against repo.meta.schema.json
(reusing validate-repo-meta.py's logic so the schema-check path
stays in one place) → translate to a tools.<key> summary entry.
* Translation: id / repo / role / language / license /
agent_instructions / verified_on / status (default "active") /
repo_meta_url straight from the manifest; each exposes.<kind>
becomes <kind>_url with the URL resolved against the repo's
main-branch raw prefix; consumes / consumed_by passed through.
* Top-level narrative ($schema / schema_compat / schema_version /
kind / description / org / workflow / discovery_protocol) is
copied verbatim from the prior tools.json so we don't lose
hand-curated content. task_index is NOT emitted — it stays in
its own file post-P1-A.
* --write PATH (default stdout), --prior PATH (default the
committed tools.json), --no-network (dry-run framing only),
--urls (override TIER_1+TIER_2).
* Deterministic: sorted keys, 2-space indent, trailing newline,
ensure_ascii=False (em dashes pass through). Running twice
against the same input produces byte-identical output.
profile/build/test_validate_catalog.py (10 tests)
* Baseline pair validates clean (smoke).
* Unknown top-level keys fail under additionalProperties: false
(covers task_index re-inlined, generic unknown key, inlined-facts
block in a tool entry, surprise field in task_index).
* Malformed typed IDs fail under the typedID regex (in primary
and in see_also).
* Missing required field in a tool entry fails.
* Missing file path reports clean error.
* Main(argv) exits 0 on the committed baseline.
profile/build/test_build_catalog.py (12 tests)
* Three synthetic repo.meta.json payloads — minimal, rich,
extra-exposes-kind — exercise the manifest → tools entry
translation surface end-to-end.
* Build emits all required top-level keys.
* Build never emits task_index (post-P1-A contract).
* Build preserves hand-curated top-level from prior_tools.
* Minimal meta → summary entry; single-element language collapses
to string; agent_instructions resolves to a github.com/.../blob/
URL; manifest_url derives from exposes.manifest.
* Rich meta → multi-language array stays as array; multiple
exposes become multiple *_url pointers.
* Extra-exposes-kind passes through (no hardcoded allow-list).
* Tools key strips the `tool:` prefix from id.
* Generated output validates against tools.schema.json.
* dumps() is deterministic across input-order shuffles; emits
trailing newline and sorted keys.
* Two-run determinism (B5).
* Invalid manifest raises a clear error rather than emitting a
malformed entry.
Verification
* pytest profile/build/ → 22 passed (10 + 12).
* python3 profile/build/validate-catalog.py → exits 0 against the
committed baseline.
* python3 profile/build/build-catalog.py > generated.json runs
twice → byte-identical output (B5 determinism).
* Generated output validates clean against tools.schema.json.
* make phase0-smoke → PASS (manifests unchanged).
Deferred to P1-D
* Makefile `catalog` + `validate-catalog` targets — P1-D's job.
* CI workflow `make catalog && git diff --exit-code` drift gate
and `make validate-catalog` step — P1-D's job.
* The drift between this branch's generator output and the
committed `profile/tools.json` is intentional and surfaces
exactly what the P1-D drift gate will need to address — see
PR body for the catalogued differences.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* build-catalog: add TIER_3 list — tier-3 onboardings landed during this PR
The three tier-3 repos (tree-sitter-m-vscode, m-stdlib-vscode,
m-cli-extras) all shipped dist/repo.meta.json today (PRs #3, #2, #2
in their respective repos; org-side companion .github PR #13 merged).
Adds TIER_3 = [...] alongside TIER_1 + TIER_2; defaults the URL list
to TIER_1 + TIER_2 + TIER_3 so build-catalog covers all nine
manifest-bearing org repos.
Without this commit the regenerated catalog would silently drop the
three tier-3 entries, looking like a drift-vs-committed bug.
Tests unchanged (still 22 green); local diff against committed
tools.json now shows the four real semantic gaps that P1-D will need
to address (m-tools archived-entry handling, consumed_by inverse-edge
computation, m-stdlib manifest_url/modules_url naming, additive
licenses_url/pyproject_toml_url payload pointers).
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
rafael5
added a commit
that referenced
this pull request
May 11, 2026
Captures Phase 4 exit per phase4-plan.md §6 + §11. Mirrors phase3-evidence.md shape: one section per gate, "What this proves" roll-up, then each §11 done-criterion cited green. Verified locally (gate outputs in the evidence doc): * pytest profile/build/ — 51/51 green * make catalog — byte-idempotent regen * make validate-catalog — schema-strict OK * make handshake — 8/8 steps * make recipes-check — 4/4 clean * uvx --from git+...@v0.1.0 m-dev-tools-mcp --tool route_intent --query "parse JSON in M" → ["module:m-stdlib#STDJSON"] (the parent-plan exit criterion, end-to-end from a fresh clone) All nine §11 done-criteria cited green: 1. m-dev-tools-mcp repo public AGPL-3.0 + full Phase-0 contract (PR #1) 2. server.py exposes 3 TDD-covered tools (PR #2 — 30 dedicated cases) 3. v0.1.0 GitHub Release with 23-KB pure-Python wheel attached (Track D2) 4. tools.json carries the entry with repo_meta_url + mcp_tools_url + release_wheel_url (.github PR #27) 5. task_index.json has infra.agent_integration → tool:m-dev-tools-mcp (.github PR #27) 6. examples/claude-code/ has .mcp.json + README + smoke.sh + session.md template (PR #3) 7. This evidence file (PR — current) 8. uvx canonical round-trip green (run captured above) 9. CI green on every Phase 4 PR Phase 5 (continuous enforcement) unblocked. PyPI publishing remains deliberately deferred. Two out-of-scope follow-ups noted in the evidence doc: * validate-repo-meta.py UTF-8-decode bug on binary release-wheel exposes URLs (use --no-resolve until fixed) * 3 Phase-3-era orphan schema fixtures gitignored but still on disk; auto-classifier blocks rm
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
After the B/C/D PRs merged and
make phase0-smokewent green onmain, a follow-on docs/-as-prose-only cross-repo cleanup landed:docs/integrated/→integrated/(reverts3bfb947)docs/vista-lint-presets/→examples/vista-lint-presets/docs/-walk shim in_find_m_standard()(compatibility code from the old layout)make phase0-smokere-verified PASS after each batch —exposes.*pointers move atomically with payload files, so the cleanup didn't break the Phase 0 contract at any point.The previously-listed "local feature branches still exist" item turned out to be a no-op:
gh pr merge --delete-branchclears both remote and local tracking branches when run frommainwith the feature branch not currently checked out.Phase 0 follow-ups now exhausted; Phase 1 is unblocked.