| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
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.
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.
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.
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).
…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).
* 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>
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
| Back | FazBrowse Home | New Git URL |
Summary
After the B/C/D PRs merged and make phase0-smoke went green on main, a follow-on docs/-as-prose-only cross-repo cleanup landed:
make phase0-smoke re-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-branch clears 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.