Rename CLI, config, packaging, and docs to fallow-py #47
Labels
No labels
area:ci
area:docs
area:engineering
area:framework-fp
area:test-coverage
dogfood:fn
dogfood:fp
dogfood:friction
dogfood:tp
phase:b
phase:c
severity:critical
severity:high
severity:low
severity:medium
source:deepseek-v4-pro
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pdurlej/fallow-py!47
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "rename/cli-config-docs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Canary Context Pack
Product story
Make the public Python package name and user-facing command match ADR 0012's umbrella naming before the TypeScript sibling ships, while keeping alpha compatibility for existing pyfallow users.
What changed
fallow-py 0.3.0a3andfallow-py-mcp 0.1.0a3.fallow-pyandfallow-py-mcpconsole scripts.pyfallow,pyfallow-mcp,pyfallow, andpyfallow_mcpcompatibility paths with deprecation banners/warnings..fallow-py.tomland[tool.fallow_py]canonical while preserving legacy config fallbacks.Why it changed
This is PR #3 from
docs/rename-plan.md, following merged PR #45 (ADR 0012) and PR #46 (package module rename).Files touched
Packaging metadata, CLI/MCP entry points, config loader, tests, CI templates, docs, examples, and benchmark fixtures.
Relevant context
decisions/0012-umbrella-branding-fallow.mddocs/rename-plan.mdRuntime evidence
python3.13 -m compileall -q src tests mcp/src mcp/testspython3.13 -m pytest -qpython3.13 -m pytest -q mcp/testsPYTHONPATH=src python3.13 -m fallow_py analyze --root . --fail-on warning --min-confidence mediumPYTHONPATH=src:mcp/src python3.13 -m fallow_py analyze --root mcp --fail-on warning --min-confidence mediumCI_ARTIFACT_DIR=/tmp/fallow-py-ci-pr47 python3.13 scripts/ci/run_python_ci.pygit diff --checkKnown constraints
Repo URLs remain
pdurlej/pyfallowuntil PR #4/admin rename. MCP tool namespace and historical artifacts withpyfallowremain for compatibility.Explicit out-of-scope
Requested decision
Approve merge if CI is green and the rename contract is coherent.
Merge blockers
Broken canonical CLI/config/package metadata, missing compatibility shims, failing CI, or accidental generated artifacts.
Mandatory non-author review (ADR 0010 / AGENTS.md)
Terminal action:
approve_mergeReviewed by
claude(Opus 4.7). PR authored bycodex, non-author requirement satisfied. PR #3 of four-PR rename per ADR 0012 +docs/rename-plan.md, on top of merged PR #45 (ADR) + PR #46 (package shim).Claim vs. implementation
pyproject.tomlrenamename = "fallow-py",version = "0.3.0a3", description rebranded, authors updatedmcp/pyproject.tomlrenamename = "fallow-py-mcp",version = "0.1.0a3",dependencies = ["fallow-py>=0.3.0a3", ...]fallow-py = "fallow_py.cli:main"andfallow-py-mcp = "fallow_py_mcp.server:main"pyfallow = "pyfallow.cli:main"(routes through shim → prints banner) andpyfallow-mcp = "pyfallow_mcp.server:main".fallow-py.tomlexists at root (git rename R100 from.pyfallow.toml, also inexamples/demo_project/).fallow-py.toml→.fallow.toml→.pyfallow.toml→pyproject.toml;_warn_legacy_configemitsDeprecationWarningwhen legacy file or[tool.pyfallow]table is selected and no canonical override is presentfallow_py.cli.main(argv, *, prog="fallow-py")propagates throughbuild_parser(prog=prog),_configure_logging(args.debug, prog), version line; legacy shim calls withprog="pyfallow"after printing stderr bannergit diff main...HEAD -- decisions/000[1-9]*.md decisions/001[01]*.md decisions/README.mdis empty — only ADR 0012 stays as-is0.3.0a3 / 0.1.0a3 mcp - TBDblock enumerating dist rename + canonical scripts + legacy compat + config dual-read# fallow-pyheading; AGENTS bassist metaphor block updated; 11 files indocs/touched (architecture, philosophy, calibration, dogfood, limitations, performance, schema, integration docs, dogfood-log-template, rename-plan).forgejo/workflows/,.github/workflows/ci.yml+release.yml,examples/ci/forgejo-actions.yml;python -m pyfallow→python -m fallow_pyeverywhere; legacypython -m pyfallow --versionadded to CI as a shim smoke testdocs/rename-plan.mdrolling statusrename/cli-config-docsagent-fix-planupdatedschemas/pyfallow-fix-plan.schema.json"tool": { "const": "fallow-py" }; runtime output matches schema for that formatBehavior verified at runtime on head
d368f8eConfig dual-read smoke (tmpdir with
.pyfallow.tomlonly):Test suite + self-audit
python3 -m compileall -q src tests mcp/src mcp/tests→ rc 0python3 -m pytest -q→ 91/91 passpython3 -m pytest -q mcp/tests→ 22/22 passPYTHONPATH=src python3 -m fallow_py analyze --root . --fail-on warning --min-confidence medium→ 0 findings, rc 0, reports asfallow-py 0.3.0a3. Entrypoints line correctly lists both canonical and legacy paths.PYTHONPATH=src:mcp/src python3 -m fallow_py analyze --root mcp --fail-on warning --min-confidence medium→ 0 findings, rc 0Scope discipline — out-of-scope claims hold
pyproject.toml[project.urls]still point atgithub.com/pdurlej/pyfallowsrc/pyfallow/,mcp/src/pyfallow_mcp/,pyfallowconsole scripts,.pyfallow.tomlfallback,[tool.pyfallow]fallback all presentschemas/pyfallow-*.jsonfilenames unchanged (only contenttoolconst updated where applicable)examples/cursor-rules/pyfallow.mdc,examples/claude-skill/claude-skill-pyfallow-cleanup-*.zip,examples/cursor-rules/cursor-rules-pyfallow-*.zipunchangedNo PR #4 territory crossed.
Codex-reported merge blockers
.fallow-py.tomlfirst.pyfallow,pyfallow-mcp,python -m pyfallow,python -m pyfallow_mcp,.pyfallow.toml,[tool.pyfallow]) all function with DeprecationWarning.compileall+pytest× 2 +self-audit× 2) all green..gitignoreupdated, no stray build outputs in the diff.None tripped.
Non-blocking observations (fodder, not blockers)
Output tool-name string differs across formats.
agent-fix-planemits"tool": "fallow-py"(Python impl); JSON report format emits"tool": "fallow"(umbrella, schema was already this way pre-PR — not a regression); SARIF emitsdriver.name: "pyfallow"(intentionally kept per PR body "historical artifacts withpyfallowremain for compatibility" — SARIF consumers may have dashboards keyed on this name). The three-string story is coherent (umbrella vs Python impl vs SARIF-consumer compat) but undocumented. Worth a CHANGELOG sentence or short note indocs/schema.mdso the next reviewer (or fallow-ts implementer) knows what to expect.fallowshort alias in[project.scripts](fallow = "fallow_py.cli:main") takes the un-suffixed name. If fallow-ts ships its ownfallowcommand (likely, sincefallowis the umbrella short name), users with both packages installed get a console-script collision (last-installed wins on most systems). Worth deciding in the fallow-ts thread before both packages land on real PyPI: either dropfallowfromfallow-py's scripts in favor offallow-pyonly, or definefallowas a thin language-dispatcher. Not a blocker for this PR — only matters when fallow-ts publishes.examples/ci/render_pyfallow_comment.py— file content updated to reference "fallow-py", filename still haspyfallowin it. Same scope-class as historical artifact filenames; defer to 0.4.x cleanup, just noting for the rename-plan log.Runtime artifact filenames (
pyfallow-report.json,pyfallow.sarif,pyfallow-baseline.json,pyfallow-agent-context.md) remain in README + CI examples as user-picked output paths. Tool does not enforce these names; users with existing CI keep their muscle memory. Correct call for 0.3.x; rename in 0.4.x examples (operators free to rename in their own pipelines whenever).Entrypoints line in self-audit now lists 6 (root) and 4 (mcp) paths because
.fallow-py.tomlentrycovers both canonical and legacy. Cosmetic in human-readable output. PR #4 / 0.4.x could dedupe by canonical form. Same observation as on PR #46.Verdict
approve_merge. Rename is executed coherently across packaging metadata, CLI, config, docs, and CI templates; shims and legacy entry points behave exactly as the 0.3.x compat plan promises; scope discipline holds across out-of-scope boundaries. After operator's second approval and merge, PR #4 (admin repo rename + URL updates) is the remaining step to close out the rename plan.