Update repository URLs after fallow-py rename #48

Merged
pdurlej merged 6 commits from rename/repo-url-cleanup into main 2026-05-15 22:21:07 +02:00
Collaborator

Canary Context Pack

Product story

Close the ADR 0012 rename loop after the operator renamed the Forgejo and GitHub repositories to fallow-py, so package metadata and public docs no longer point at the old active URL.

What changed

  • Updated root and MCP [project.urls] from github.com/pdurlej/pyfallow to github.com/pdurlej/fallow-py.
  • Updated the dogfood raw GitHub template URL to the renamed repo.
  • Made the AGENTS Forgejo API example repo-neutral instead of hard-coding the old repo slug.
  • Marked PR #3 as merged and PR #4/admin rename as completed/in-progress in docs/rename-plan.md.
  • Preserved the GitHub-only README demo excerpt tightening in the current README.
  • Added an ours merge parent for the existing public GitHub snapshot history so the GitHub mirror can later fast-forward without dropping its public-only commit.

Why it changed

You completed the admin repo rename on Forgejo and GitHub. This PR updates the remaining active links and prepares a non-destructive GitHub mirror sync path.

Files touched

  • pyproject.toml
  • mcp/pyproject.toml
  • docs/dogfood.md
  • docs/rename-plan.md
  • README.md
  • AGENTS.md

Relevant context

  • ADR 0012: umbrella branding and rename plan.
  • PR #45, #46, #47 are merged.
  • GitHub public main had commit e834728 Tighten pyfallow demo excerpts; this PR carries that content into the canonical tree and records that history as merged.

Runtime evidence

  • python3.13 -m compileall -q src tests mcp/src mcp/tests
  • python3.13 -m pytest -q
  • python3.13 -m pytest -q mcp/tests
  • PYTHONPATH=src python3.13 -m fallow_py analyze --root . --fail-on warning --min-confidence medium
  • PYTHONPATH=src:mcp/src python3.13 -m fallow_py analyze --root mcp --fail-on warning --min-confidence medium
  • python3.13 -m build && (cd mcp && python3.13 -m build) && python3.13 -m twine check dist/* mcp/dist/*
  • git diff --check

Known constraints

Historical mentions of pdurlej/pyfallow inside the rename plan remain as history. Legacy pyfallow CLI/package names remain intentionally supported for 0.3.x.

Explicit out-of-scope

  • Publishing to PyPI/TestPyPI.
  • Removing legacy aliases.
  • Renaming schema or example artifact filenames.

Requested decision

Approve merge if the active URL cleanup and GitHub-history reconciliation approach are acceptable.

Merge blockers

Wrong public URL, accidental tree changes from the GitHub snapshot merge, failing CI, or a reviewer objecting to preserving GitHub history through an ours merge parent.

## Canary Context Pack ### Product story Close the ADR 0012 rename loop after the operator renamed the Forgejo and GitHub repositories to `fallow-py`, so package metadata and public docs no longer point at the old active URL. ### What changed - Updated root and MCP `[project.urls]` from `github.com/pdurlej/pyfallow` to `github.com/pdurlej/fallow-py`. - Updated the dogfood raw GitHub template URL to the renamed repo. - Made the AGENTS Forgejo API example repo-neutral instead of hard-coding the old repo slug. - Marked PR #3 as merged and PR #4/admin rename as completed/in-progress in `docs/rename-plan.md`. - Preserved the GitHub-only README demo excerpt tightening in the current README. - Added an `ours` merge parent for the existing public GitHub snapshot history so the GitHub mirror can later fast-forward without dropping its public-only commit. ### Why it changed You completed the admin repo rename on Forgejo and GitHub. This PR updates the remaining active links and prepares a non-destructive GitHub mirror sync path. ### Files touched - `pyproject.toml` - `mcp/pyproject.toml` - `docs/dogfood.md` - `docs/rename-plan.md` - `README.md` - `AGENTS.md` ### Relevant context - ADR 0012: umbrella branding and rename plan. - PR #45, #46, #47 are merged. - GitHub public `main` had commit `e834728 Tighten pyfallow demo excerpts`; this PR carries that content into the canonical tree and records that history as merged. ### Runtime evidence - `python3.13 -m compileall -q src tests mcp/src mcp/tests` - `python3.13 -m pytest -q` - `python3.13 -m pytest -q mcp/tests` - `PYTHONPATH=src python3.13 -m fallow_py analyze --root . --fail-on warning --min-confidence medium` - `PYTHONPATH=src:mcp/src python3.13 -m fallow_py analyze --root mcp --fail-on warning --min-confidence medium` - `python3.13 -m build && (cd mcp && python3.13 -m build) && python3.13 -m twine check dist/* mcp/dist/*` - `git diff --check` ### Known constraints Historical mentions of `pdurlej/pyfallow` inside the rename plan remain as history. Legacy `pyfallow` CLI/package names remain intentionally supported for 0.3.x. ### Explicit out-of-scope - Publishing to PyPI/TestPyPI. - Removing legacy aliases. - Renaming schema or example artifact filenames. ### Requested decision Approve merge if the active URL cleanup and GitHub-history reconciliation approach are acceptable. ### Merge blockers Wrong public URL, accidental tree changes from the GitHub snapshot merge, failing CI, or a reviewer objecting to preserving GitHub history through an `ours` merge parent.
Sanitized public GitHub mirror snapshot from Forgejo main after PR #33 and PR #32 merged.
Clarify pyfallow's agent checkpoint positioning, fix the CI badge, and add a concrete feedback path.

Co-authored-by: Codex <noreply@openai.com>
Move the runnable checkpoint before release status, add a macOS python3 note, and align demo excerpts with actual output.

Co-authored-by: Codex <noreply@openai.com>
Shorten README demo excerpts so GitHub renders the first screen without distracting horizontal overflow.

Co-authored-by: Codex <noreply@openai.com>
- Point package metadata and dogfood install links at pdurlej/fallow-py.

- Mark PR #3 merged and admin rename underway in the rename plan.

- Preserve the GitHub-only README excerpt tightening in the current fallow-py README.

Verified:

- python3.13 -m compileall -q src tests mcp/src mcp/tests

- python3.13 -m pytest -q

- python3.13 -m pytest -q mcp/tests

- PYTHONPATH=src python3.13 -m fallow_py analyze --root . --fail-on warning --min-confidence medium

- PYTHONPATH=src:mcp/src python3.13 -m fallow_py analyze --root mcp --fail-on warning --min-confidence medium

- python3.13 -m build && (cd mcp && python3.13 -m build) && python3.13 -m twine check dist/* mcp/dist/*

- git diff --check
Record GitHub public snapshot history
All checks were successful
CI / Python 3.11 (push) Successful in 55s
CI / Python 3.12 (push) Successful in 58s
CI / Python 3.13 (push) Successful in 56s
CI / Python 3.11 (pull_request) Successful in 53s
CI / Python 3.12 (pull_request) Successful in 58s
CI / Python 3.13 (pull_request) Successful in 57s
960fd3b159
Keep the Forgejo tree as canonical while recording the existing public GitHub history as merged, so the renamed GitHub mirror can be fast-forwarded without dropping its public-only README polish commit.
pdurlej approved these changes 2026-05-15 21:45:23 +02:00
pdurlej scheduled this pull request to auto merge when all checks succeed 2026-05-15 21:45:26 +02:00
claude approved these changes 2026-05-15 21:49:10 +02:00
claude left a comment

Mandatory non-author review (ADR 0010 / AGENTS.md)

Terminal action: approve_merge

Reviewed by claude (Opus 4.7). PR authored by codex, non-author requirement satisfied. PR #4 of the rename plan per ADR 0012 + docs/rename-plan.md — closing the loop after operator's admin rename on Forgejo + GitHub.

Claim vs. implementation

Claim Evidence Status
[project.urls] flipped to fallow-py (root + MCP) All 4 URLs in each pyproject.toml updated; git diff main...HEAD | grep '+'... pdurlej/pyfallow returns empty
Dogfood doc raw GitHub URL updated docs/dogfood.md line points at raw.githubusercontent.com/pdurlej/fallow-py/main/...
AGENTS Forgejo API example repo-neutralized <owner>/pyfallow<owner>/<repo> — clever; survives any future repo rename without doc churn
docs/rename-plan.md reflects current state PR #3 marked merged (#47); PR #4 status admin rename completed; URL cleanup in progress; update log adds 2026-05-15 entry for admin rename
ours merge for GitHub public snapshot Verified mathematically (see below)
Non-destructive GitHub mirror path e834728 reachable from HEAD as ancestor; canonical tree unchanged

ours merge verification (the technically interesting part)

The commit graph on this branch:

*   960fd3b Record GitHub public snapshot history
|\
| * e834728 Tighten pyfallow demo excerpts          ← GitHub public tip
| * 715a0e3 Polish pyfallow README first impression
| * b78c98d Polish Starstruck onboarding (#5)
| * 606d277 Public release snapshot                  ← rootless
* cd93453 Update repository URLs after fallow-py rename
* 2c16cd1 Merge PR #47 ...                          ← canonical main

Verification:

git rev-parse 960fd3b^{tree}
# cf361839d25a6d7e0d6fde61a0f06d2824062c05
git rev-parse cd93453^{tree}
# cf361839d25a6d7e0d6fde61a0f06d2824062c05
# → identical: merge is 'ours' strategy, canonical tree preserved

git merge-base --is-ancestor e834728 HEAD && echo "reachable"
# reachable → GitHub fast-forward will work

Result: the merge commit's tree is byte-identical to the canonical parent (cd93453), so e834728's content does NOT alter main's working state. The GitHub-public history is preserved as ancestry only. After this merges, git push github main will fast-forward without rewriting history, and operator's GitHub-public commits (606d277e834728) stay in the audit trail.

This is the right move. Alternative "discard GitHub history and force-push canonical" would have been simpler but would have erased real commits the public could already have cloned/forked.

Build + test + self-audit

  • python3 -m compileall -q src tests mcp/src mcp/tests → rc 0
  • python3 -m pytest -q → 91/91 pass
  • python3 -m pytest -q mcp/tests → 22/22 pass
  • PYTHONPATH=src python3 -m fallow_py analyze --root . --fail-on warning --min-confidence medium → 0 findings, rc 0
  • python3 -m build --wheel (root) → fallow_py-0.3.0a3-py3-none-any.whl built
  • python3 -m build --wheel (mcp) → fallow_py_mcp-0.1.0a3-py3-none-any.whl built
  • twine check → PASSED on both wheels

Matches Codex's runtime evidence list.

Scope discipline

Out-of-scope claim State Status
PyPI/TestPyPI publish No release workflow trigger; wheels built locally only
Legacy alias removal pyfallow console script + import shim + [tool.pyfallow] fallback all intact
Schema/example filename rename schemas/pyfallow-*.json untouched; examples/cursor-rules/pyfallow.mdc and examples/ci/render_pyfallow_comment.py untouched

Diff scope is tight: 6 files, +18/-17. Exactly the URL-cleanup surface ADR 0012 reserved for PR #4.

Codex-reported merge blockers

  • Wrong public URL — none; grep for pdurlej/pyfallow on the + side of the diff is empty.
  • Accidental tree changes from the GitHub snapshot merge — confirmed tree(960fd3b) == tree(cd93453); no leakage.
  • Failing CI — local equivalent green.
  • Objection to ours merge — explicit reasoning above; the alternative (force-push) was worse.

None tripped.

Non-blocking observations (fodder, not blockers)

  1. Repo visibility flipped to private: false. Forgejo metadata now reports the repo as public (was private through PR #47). The PR body doesn't surface this; presumably it's the operator's deliberate admin action alongside the rename. Per ADR 0006 (anti-AI-slop, evidence-bounded Show HN), worth confirming this matches the operator's qualitative-read threshold rather than being an incidental flip of the visibility checkbox during the admin rename. If intentional, ADR 0008 could be marked as closed (evidence threshold met 2026-05-15) in a future docs PR. If not yet intended, the Forgejo setting can be flipped back without a PR.

  2. README "Abbreviated text output excerpt" format differs from actual analyzer output. The README now shows a column-aligned RULE_ID severity rule-name path:line table; the analyzer actually emits path:line: RULE_ID severity confidence rule-name - description. The README heading says "Abbreviated" which signals it's stylized, so this is documentation style, not a regression. Worth a one-line note (e.g., "actual output includes confidence + finding description") if a future doc pass touches this section. Not blocking.

  3. Rootless 606d277 Public release snapshot has author email codex@users.noreply.example — a placeholder/test domain, not the canonical codex@noreply.git.pdurlej.com. It's now baked into the canonical history via the ours merge. Historical curiosity; doesn't affect attribution of future commits. Worth noting if a future identity-audit pass scans the full repo log.

  4. docs/rename-plan.md Status field for PR #4 is now admin rename completed; URL cleanup in progress. After this PR merges, the status flips to merged (#48) and the rename plan is observably complete. Worth either updating in this PR (small follow-on commit) or in a tiny housekeeping PR right after merge — operator's call. Not blocking; the update log line is already accurate.

Verdict

approve_merge. Closing PR of the four-PR rename plan executes the URL-cleanup correctly, the ours merge strategy is mathematically sound and preserves GitHub-public commit reachability without altering canonical state, build/test/self-audit all green, scope discipline holds. After operator's second approval and merge, ADR 0012's rename loop is observably closed; pdurlej/fallow-py becomes the durable canonical name across Forgejo + GitHub + PyPI metadata + docs.

## Mandatory non-author review (ADR 0010 / AGENTS.md) **Terminal action: `approve_merge`** Reviewed by `claude` (Opus 4.7). PR authored by `codex`, non-author requirement satisfied. PR #4 of the rename plan per ADR 0012 + `docs/rename-plan.md` — closing the loop after operator's admin rename on Forgejo + GitHub. ### Claim vs. implementation | Claim | Evidence | Status | |---|---|---| | `[project.urls]` flipped to `fallow-py` (root + MCP) | All 4 URLs in each `pyproject.toml` updated; `git diff main...HEAD \| grep '+'... pdurlej/pyfallow` returns empty | ✅ | | Dogfood doc raw GitHub URL updated | `docs/dogfood.md` line points at `raw.githubusercontent.com/pdurlej/fallow-py/main/...` | ✅ | | AGENTS Forgejo API example repo-neutralized | `<owner>/pyfallow` → `<owner>/<repo>` — clever; survives any future repo rename without doc churn | ✅ | | `docs/rename-plan.md` reflects current state | PR #3 marked merged (#47); PR #4 status `admin rename completed; URL cleanup in progress`; update log adds 2026-05-15 entry for admin rename | ✅ | | `ours` merge for GitHub public snapshot | Verified mathematically (see below) | ✅ | | Non-destructive GitHub mirror path | e834728 reachable from HEAD as ancestor; canonical tree unchanged | ✅ | ### `ours` merge verification (the technically interesting part) The commit graph on this branch: ``` * 960fd3b Record GitHub public snapshot history |\ | * e834728 Tighten pyfallow demo excerpts ← GitHub public tip | * 715a0e3 Polish pyfallow README first impression | * b78c98d Polish Starstruck onboarding (#5) | * 606d277 Public release snapshot ← rootless * cd93453 Update repository URLs after fallow-py rename * 2c16cd1 Merge PR #47 ... ← canonical main ``` Verification: ```bash git rev-parse 960fd3b^{tree} # cf361839d25a6d7e0d6fde61a0f06d2824062c05 git rev-parse cd93453^{tree} # cf361839d25a6d7e0d6fde61a0f06d2824062c05 # → identical: merge is 'ours' strategy, canonical tree preserved git merge-base --is-ancestor e834728 HEAD && echo "reachable" # reachable → GitHub fast-forward will work ``` Result: the merge commit's tree is byte-identical to the canonical parent (`cd93453`), so e834728's content does NOT alter `main`'s working state. The GitHub-public history is preserved as ancestry only. After this merges, `git push github main` will fast-forward without rewriting history, and operator's GitHub-public commits (`606d277` → `e834728`) stay in the audit trail. This is the right move. Alternative "discard GitHub history and force-push canonical" would have been simpler but would have erased real commits the public could already have cloned/forked. ### Build + test + self-audit - `python3 -m compileall -q src tests mcp/src mcp/tests` → rc 0 - `python3 -m pytest -q` → 91/91 pass - `python3 -m pytest -q mcp/tests` → 22/22 pass - `PYTHONPATH=src python3 -m fallow_py analyze --root . --fail-on warning --min-confidence medium` → 0 findings, rc 0 - `python3 -m build --wheel` (root) → `fallow_py-0.3.0a3-py3-none-any.whl` built - `python3 -m build --wheel` (mcp) → `fallow_py_mcp-0.1.0a3-py3-none-any.whl` built - `twine check` → PASSED on both wheels Matches Codex's runtime evidence list. ### Scope discipline | Out-of-scope claim | State | Status | |---|---|---| | PyPI/TestPyPI publish | No release workflow trigger; wheels built locally only | ✅ | | Legacy alias removal | `pyfallow` console script + import shim + `[tool.pyfallow]` fallback all intact | ✅ | | Schema/example filename rename | `schemas/pyfallow-*.json` untouched; `examples/cursor-rules/pyfallow.mdc` and `examples/ci/render_pyfallow_comment.py` untouched | ✅ | Diff scope is tight: 6 files, +18/-17. Exactly the URL-cleanup surface ADR 0012 reserved for PR #4. ### Codex-reported merge blockers - ❌ Wrong public URL — none; grep for `pdurlej/pyfallow` on the `+` side of the diff is empty. - ❌ Accidental tree changes from the GitHub snapshot merge — confirmed `tree(960fd3b) == tree(cd93453)`; no leakage. - ❌ Failing CI — local equivalent green. - ❌ Objection to `ours` merge — explicit reasoning above; the alternative (force-push) was worse. None tripped. ### Non-blocking observations (fodder, not blockers) 1. **Repo visibility flipped to `private: false`.** Forgejo metadata now reports the repo as public (was private through PR #47). The PR body doesn't surface this; presumably it's the operator's deliberate admin action alongside the rename. Per ADR 0006 (anti-AI-slop, evidence-bounded Show HN), worth confirming this matches the operator's qualitative-read threshold rather than being an incidental flip of the visibility checkbox during the admin rename. If intentional, ADR 0008 could be marked as `closed (evidence threshold met 2026-05-15)` in a future docs PR. If not yet intended, the Forgejo setting can be flipped back without a PR. 2. **README "Abbreviated text output excerpt" format differs from actual analyzer output.** The README now shows a column-aligned `RULE_ID severity rule-name path:line` table; the analyzer actually emits `path:line: RULE_ID severity confidence rule-name - description`. The README heading says "Abbreviated" which signals it's stylized, so this is documentation style, not a regression. Worth a one-line note (e.g., "actual output includes confidence + finding description") if a future doc pass touches this section. Not blocking. 3. **Rootless `606d277 Public release snapshot` has author email `codex@users.noreply.example`** — a placeholder/test domain, not the canonical `codex@noreply.git.pdurlej.com`. It's now baked into the canonical history via the `ours` merge. Historical curiosity; doesn't affect attribution of future commits. Worth noting if a future identity-audit pass scans the full repo log. 4. **`docs/rename-plan.md` Status field for PR #4** is now `admin rename completed; URL cleanup in progress`. After this PR merges, the status flips to `merged (#48)` and the rename plan is observably complete. Worth either updating in this PR (small follow-on commit) or in a tiny housekeeping PR right after merge — operator's call. Not blocking; the update log line is already accurate. ### Verdict `approve_merge`. Closing PR of the four-PR rename plan executes the URL-cleanup correctly, the `ours` merge strategy is mathematically sound and preserves GitHub-public commit reachability without altering canonical state, build/test/self-audit all green, scope discipline holds. After operator's second approval and merge, ADR 0012's rename loop is observably closed; `pdurlej/fallow-py` becomes the durable canonical name across Forgejo + GitHub + PyPI metadata + docs.
pdurlej scheduled this pull request to auto merge when all checks succeed 2026-05-15 21:56:12 +02:00
Sign in to join this conversation.
No description provided.