chore(.gitignore): ignore .deploy/ for private operator tooling#52
Conversation
The .deploy/ directory holds operator scripts and design docs that are specific to the maintainer's deployment of CT 112. Other self-hosters can use plain `uv pip install --upgrade pypi-winnow-downloads`; this tooling does not need a public contract or maintenance burden. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Match the existing convention in the file — no other rule uses a repo-root anchor (.venv/, dist/, __pycache__/ etc. are all unanchored). The original /.deploy/ form was technically more explicit but stylistically out of place. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
cmeans
left a comment
There was a problem hiding this comment.
QA round 1 — FAIL (1 observation; no functional issues)
Tiny diff (3 lines, .gitignore only). All three test-plan items verified, CI fully green, no .deploy/ paths tracked or in history, no public artifact references .deploy/.
Findings
1. (observation) CHANGELOG.md ## [Unreleased] has no entry for this PR. The [Unreleased] heading exists (left empty after v0.2.0 stamp) but no bullet has been added. Project precedent puts entries on every PR, including purely-internal ones — e.g., v0.1.3's ### Fixed entry for PR #45 (.github/ISSUE_TEMPLATE/bug_report.yml placeholder refactor) is a comparably internal/non-published change and got an entry. The PR template's CHANGELOG checkbox (and its CLAUDE.md cross-reference) reinforce the same convention. Per the standing observation-blocks-signoff rule, this needs to land before signoff.
Suggested fix — one bullet under ### Changed in ## [Unreleased], roughly:
.gitignoreignores private operator-tooling directory.deploy/so maintainer-specific deploy scripts stay out of public history. Internal-only — no user-facing behavior change.
If the project would rather codify a carve-out for .gitignore-only / private-tooling chores instead, that's also a clean resolution — note it in CLAUDE.md and the PR template, and I'll respect the carve-out going forward.
Verifications run
git check-ignore -v .deploy/scripts/update-collector.sh→.gitignore:20:.deploy/ .deploy/scripts/update-collector.sh✓- With PR's
.gitignoreapplied,git statusshows clean working tree even with populated.deploy/scripts/,.deploy/specs/,.deploy/plans/on disk ✓ git ls-files | grep -E '^\.deploy'→ empty (no leakage into tracked tree) ✓git log --all -- .deploy '.deploy/*'→ empty (no leakage into history) ✓grep -rn "\.deploy" README.md SECURITY.md CONTRIBUTING.md docs/ deploy/ src/→ no matches (no public-artifact reference) ✓- Style:
.deploy/unanchored, consistent with.venv/,dist/,__pycache__/, etc. ✓ - CI: 8 pass / 3 expected-skip (
changelog/on-label/on-unlabel) / 1 pending QA Gate ✓
Tiny FYI for the squash-merge subject
The PR title still says chore(.gitignore): ignore /.deploy/ for private operator tooling (/.deploy/, leading slash) but the final state of the file is the unanchored .deploy/ after commit 626c203. Worth dropping the leading slash from the squash-commit subject at merge time so the durable git-log entry matches the actual rule.
|
Audit trail: applying QA Failed (1 observation: CHANGELOG missing). Findings posted in formal review above. Workflow: |
QA round 1 found the [Unreleased] section had no entry for this PR, inconsistent with project precedent (every PR including internal-only ones gets a CHANGELOG bullet). Adds one bullet under ### Changed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Round 2 resolutionObservation 1 (CHANGELOG missing) — fixed in Added one bullet under FYI accepted: PR title now says Re-applied |
cmeans
left a comment
There was a problem hiding this comment.
QA round 2 — PASS (round-1 observation resolved)
Both round-1 items addressed:
- CHANGELOG entry — commit
cec6684adds a well-formed### Changedbullet under## [Unreleased]. Bold-filename + prose-body shape matches the house style of recent entries (v0.1.3 PR #45 etc.); KaC ordering correct (### Changedis the only subsection in Unreleased so trivially compliant).Internal-only; no user-facing behavior change.framing makes the scope explicit for future readers. - Title de-slashed — PR title now reads
chore(.gitignore): ignore .deploy/ for private operator tooling, matching the unanchored final state of the rule. Squash-commit subject will land in git log accurately.
Re-verification on round-2 head (cec6684)
uv run pytest --cov --cov-report=xml→ 79/79 pass at 100% coverage (Required test coverage of 100.0% reached)uv run ruff check src/ tests/→ All checks passeduv run ruff format --check src/ tests/→ 11 files already formatteduv run mypy src/pypi_winnow_downloads/→ Success: no issues found in 5 source files- CI: 8 pass / 3 expected-skip (
changelog/on-push/on-unlabel) / 1 pending QA Gate
Round-1 verifications still hold (check-ignore matches; clean status with PR's gitignore; no .deploy/ in tracked tree, history, or public artifacts).
Labels: Ready for QA → QA Active → Ready for QA Signoff. Awaiting maintainer QA Approved.
|
Audit trail: applying Ready for QA Signoff — round-1 observation (CHANGELOG missing) resolved at |
Adds `.claude/settings.local.json` (Claude Code's per-machine permission overrides) to `.gitignore`. The maintainer's global `~/.config/git/ignore` already covers this pattern; the per-repo rule extends the same coverage to anyone else cloning the repo who uses Claude Code without that global ignore. Sits in its own `# Per-machine Claude Code permission overrides` block after PR #52's `.deploy/` block. CHANGELOG `## [Unreleased]` → `### Changed` entry added per project precedent. Closes #53.
Bumps version 0.2.0 → 0.3.0 and promotes the [Unreleased] section to [0.3.0] - 2026-04-29. One feature PR plus three small chore PRs land in this release; full bullets in CHANGELOG.md. Minor bump (rather than patch): run_pypinfo()'s return type changed from dict[str, int] to a TypedDict carrying both by_installer and by_system aggregates in #57. The feature surface is also new (3 new badge files per package per window: linux / macos / windows). Shipping: - feat(collector): per-OS download breakdown badges (#57, d7688ce) - ci: weekly uv lock --upgrade refresh cron (#54, 3ed03b9) - chore(deps): refresh uv.lock transitive pins (#55, 92ec030) - chore(.gitignore): private operator tooling (#52, 5bae606) - chore(.gitignore): Claude Code permission overrides (#53, 2bd764a)
Summary
Adds
.deploy/to.gitignoreso a private operator-tooling directory at the repo root stays out of public history.Why
The
.deploy/directory holds maintainer-specific operator scripts (e.g.,update-collector.shfor driving the CT 112 deployment viaWINNOW_REMOTE_RUN) and matching design / plan documents. It's parameterized in principle (any deploy could use it) but maintainer-shaped in practice — SSH-to-Holodeck,pct exec, journald awareness, etc.Other self-hosters can use plain
uv pip install --upgrade pypi-winnow-downloadsand don't need this tooling. Keeping it private avoids a public-contract maintenance burden if conventions shift.What's in the diff (round 2)
.gitignore(3 lines added):CHANGELOG.md(4 lines added):Rule is unanchored to match the convention of the rest of the file (
.venv/,dist/,__pycache__/etc. are all unanchored).Test plan
git check-ignore -v .deploy/scripts/update-collector.shreports the rule matched (verified locally —.gitignore:20:.deploy/).git statusafter merge shows clean working tree even with.deploy/populated..deploy/content.## [Unreleased]has a### Changedentry describing this PR.Round 2 changes
QA round 1 surfaced one observation:
## [Unreleased]had no entry for this PR. Project precedent puts entries on every PR including internal-only ones. Added one bullet under### Changed(commitcec6684).Also: PR title and squash-merge subject updated to drop the leading slash so the durable git-log entry matches the actual rule (round 1's title said
/.deploy/; final state is unanchored.deploy/after626c203).Commits
This PR has three commits. The squash-merge will collapse them.
2f7e652— original add of/.deploy/(leading slash, anchored)626c203— drop leading slash for consistency with rest of filecec6684— CHANGELOG Unreleased entry (round 2)🤖 Generated with Claude Code