19 Commits

Author SHA1 Message Date
Alex Verkhovsky 40c4572a31 build: declare the Python toolchain in pyproject.toml (#2830)
* build: declare the Python toolchain in pyproject.toml

Pin the dev environment (pytest, pytest-xdist, pyyaml, ruamel.yaml, ruff)
with uv instead of a one-line --with list in package.json. The project is
marked non-packaged: the tree itself is what gets installed, and shipped
scripts keep their inline metadata. The validate CI job now runs on uv
alone, without Node, and gains a ruff check.

* style: apply ruff to tools and skill scripts

Mechanical output of ruff check --fix and ruff format under the new
config, plus four hand edits: explicit zip strictness in setup.py and
test_sprint_status.py, an f-string for the hex colour in brain.py, and a
noqa on the sys.path-dependent import in render_skill.py. No behaviour
change; 500 tests pass.

* build: declare Python 3.11 as the floor of every shipped script

Eighteen scripts declared 3.8 or 3.10 inline while ruff targeted 3.11,
so an autofix could introduce syntax those scripts did not advertise.
The lower floors were never reachable: every skill that carried one
also runs a 3.11 hub script, and uv fetches whatever interpreter a
script asks for. All inline metadata now says 3.11, and a test keeps
the inline floors equal to requires-python and the ruff target.
2026-09-05 12:28:22 -06:00
Alex Verkhovsky b762e7e29b fix(update): pin GitHub manifest checks to main 2026-09-05 02:37:01 -06:00
Alex Verkhovsky 8f09e6a610 refactor(skills): stop writing module config.yaml files nobody reads
Setup resolved config through the script already, but still wrote
core/config.yaml and bmm/config.yaml on every run. Nothing reads them.

Drop the writes and the code that existed only to build them: the
legacy_config projection threaded through materialize_bmad/stage_bmad,
without_manifest_answers, delete_path, stringify, and the whole YAML
parse/render/fill path. ensure_file now merges TOML only.

Existing files are left in place, like the other classic-installer
traces, and both paths join LEGACY_LEFTOVERS so doctor reports them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sn1de7Zc9yWcJnJkE6QNis
2026-09-05 01:43:24 -06:00
Alex Verkhovsky 3baa7c64fe fix(dist): point knowledge at references/help.md, the file that exists
The knowledge value named `reference/help.md`, but the bmad skill has no
reference/ directory — the file is references/help.md. Nothing ever resolved
the value, so the dangling pointer reached 30 manifests and the release
stamper's constant unnoticed.
2026-09-05 01:43:24 -06:00
Alex Verkhovsky 94ef73af22 fix(setup): refuse to replace a symlinked _bmad with a clear message
setup and doctor rewrite _bmad wholesale via replace_dir, so running
them through a symlinked _bmad crashed mid-flight with a raw
IsADirectoryError from the backup rename. Reads through the symlink
are the point of symlinking and stay untouched; only the write paths
now fail fast, naming the link target and the --project-root to use
against the real installation. The doctor flow rejects in its
missing-_bmad pre-flight so --list-config-questions --doctor fails
before interrogating the user.
2026-09-05 01:43:24 -06:00
Alex Verkhovsky eaeebebd76 feat(setup): report plugin-shipped copies as plugin-managed in the update check 2026-09-05 01:43:24 -06:00
Alex Verkhovsky baf0fe9aea feat(dist): add a knowledge key pointing every manifest at the bmad help doc 2026-09-05 01:43:24 -06:00
Alex Verkhovsky aed23a3a0b refactor(skills): extract hub help.md and ship TOML manifests
Move the duplicated BMM routing guide into the bmad hub skill and replace
every module-manifest.md with a two-key TOML file parsed by stdlib tomllib.
Drop PyYAML from setup.py and from test:npx-skills.
2026-09-05 01:43:01 -06:00
Alex Verkhovsky 84def5a7d3 refactor(skills): flatten sources into a root skills/ tree
Move core and BMM skills to skills/<id>/ so npx skills can install
the repo as-is. Copy the BMM module manifest into every skill, move
the shared Python runtime into skills/bmad/scripts/, drop src/, and
retarget repo tests at the new locations.
2026-09-05 01:43:01 -06:00
Alex Verkhovsky 05175bd569 refactor!: rip out the classic installer, the packager, and bmad-help 2026-09-05 01:43:00 -06:00
Alex Verkhovsky 430501edb9 feat(setup): leave classic-installer files alone and report them in doctor 2026-09-05 01:43:00 -06:00
Alex Verkhovsky 4d562582c7 test(setup): cover doctor repair of a symlinked legacy scripts dir 2026-09-05 01:43:00 -06:00
Alex Verkhovsky fe71ce0edb fix(setup): create module scripts dirs so first doctor reports current 2026-09-05 01:43:00 -06:00
Alex Verkhovsky 2553fb6e09 refactor(skills): drop user name, language, and skill-level config
The model already knows who it is talking to and what language fits the
conversation; answers frozen at install time only mislead. Setup asks no
questions of its own now — the only questions come from installed module
manifests. user_name, communication_language, user_skill_level, and
document_output_language leave the config templates, setup.py, the setup
reference, and every live skill's prose. Classic-installer surface
(module.yaml, tools/installer, v6-shims, bmad-help) is unchanged; the
test suite keeps negative assertions that the keys stay out of team
config.
2026-09-05 01:43:00 -06:00
Alex Verkhovsky bdc1b0398e feat(bmad): add bmad update and bmad doctor
Add two deterministic runtime modes to the bmad skill. Update inspects
every installed manifest copy, compares each against its declared source,
and reports state per module without writing anything. Doctor repairs an
existing _bmad: it asks only newly declared questions, refreshes the
shared scripts as an exact copy, and makes each selected module's script
tree match its declaration, choosing the unique highest orderable release
when copies disagree and blocking the module otherwise.
2026-09-05 01:43:00 -06:00
Alex Verkhovsky b232741c77 feat(bmad): add manifest-driven module setup 2026-09-05 01:43:00 -06:00
Alex Verkhovsky 5326e16cd8 feat(packaging): fan out stamped module manifests
Validate module manifests and package versions before replacing output.
Copy identical manifests and declared scripts into every owning skill.
2026-09-05 01:43:00 -06:00
Alex Verkhovsky 7dfd2c1556 fix(setup): copy shared scripts instead of symlinking 2026-09-05 01:43:00 -06:00
Alex Verkhovsky 9347a524e6 feat(skills): move npx setup payload to bmad
Add the canonical bmad entrypoint, exclude bmad-help from flattened
output, and retain transitional CSV packaging. Move the setup tests,
allow the canonical root ID in validation, and normalize the existing
install-only custom path for strict reference checks.
2026-09-05 01:43:00 -06:00