Skip to content

chore(.gitignore): ignore .deploy/ for private operator tooling#52

Merged
cmeans-claude-dev[bot] merged 3 commits into
mainfrom
chore/ignore-deploy-dir
Apr 29, 2026
Merged

chore(.gitignore): ignore .deploy/ for private operator tooling#52
cmeans-claude-dev[bot] merged 3 commits into
mainfrom
chore/ignore-deploy-dir

Conversation

@cmeans-claude-dev

@cmeans-claude-dev cmeans-claude-dev Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds .deploy/ to .gitignore so 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.sh for driving the CT 112 deployment via WINNOW_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-downloads and 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):

+
+# Private operator tooling — never published. See .deploy/specs/ for design.
+.deploy/

CHANGELOG.md (4 lines added):

+### Changed
+
+- **`.gitignore`** ignores a private operator-tooling directory `.deploy/` ...
+

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.sh reports the rule matched (verified locally — .gitignore:20:.deploy/).
  • git status after merge shows clean working tree even with .deploy/ populated.
  • No public artifact (sdist, wheel, README, etc.) references .deploy/ content.
  • ## [Unreleased] has a ### Changed entry 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 (commit cec6684).

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/ after 626c203).

Commits

This PR has three commits. The squash-merge will collapse them.

  1. 2f7e652 — original add of /.deploy/ (leading slash, anchored)
  2. 626c203 — drop leading slash for consistency with rest of file
  3. cec6684 — CHANGELOG Unreleased entry (round 2)

🤖 Generated with Claude Code

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>
@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA Ready for QA Dev work complete — QA can begin review and removed Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels Apr 29, 2026
@codecov-commenter

Copy link
Copy Markdown

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>
@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA Ready for QA Dev work complete — QA can begin review and removed Ready for QA Dev work complete — QA can begin review Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels Apr 29, 2026
cmeans
cmeans previously approved these changes Apr 29, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@cmeans cmeans added QA Active QA is actively reviewing; Dev should not push changes and removed Ready for QA Dev work complete — QA can begin review labels Apr 29, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

.gitignore ignores 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 .gitignore applied, git status shows 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.

@cmeans

cmeans commented Apr 29, 2026

Copy link
Copy Markdown
Owner

Audit trail: applying QA Failed (1 observation: CHANGELOG missing). Findings posted in formal review above. Workflow: Ready for QA → QA Active → QA Failed.

@cmeans cmeans added QA Failed QA found issues — needs dev attention and removed QA Active QA is actively reviewing; Dev should not push changes labels Apr 29, 2026
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>
@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA and removed QA Failed QA found issues — needs dev attention labels Apr 29, 2026
@cmeans-claude-dev cmeans-claude-dev Bot changed the title chore(.gitignore): ignore /.deploy/ for private operator tooling chore(.gitignore): ignore .deploy/ for private operator tooling Apr 29, 2026
@cmeans-claude-dev cmeans-claude-dev Bot added the Ready for QA Dev work complete — QA can begin review label Apr 29, 2026
@cmeans-claude-dev

Copy link
Copy Markdown
Contributor Author

Round 2 resolution

Observation 1 (CHANGELOG missing) — fixed in cec6684.

Added one bullet under ## [Unreleased]### Changed describing the rule, the directory's purpose (update-collector.sh operator tooling for CT 112), why it stays private (maintainer-shaped despite being parameterized), and why the rule is unanchored (matches the rest of the file's convention).

FYI accepted: PR title now says .deploy/ without the leading slash so the squash-merge subject matches the final state.

Re-applied Ready for QA for round 2.

@github-actions github-actions Bot removed the Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA label Apr 29, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@cmeans cmeans added QA Active QA is actively reviewing; Dev should not push changes and removed Ready for QA Dev work complete — QA can begin review labels Apr 29, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QA round 2 — PASS (round-1 observation resolved)

Both round-1 items addressed:

  1. CHANGELOG entry — commit cec6684 adds a well-formed ### Changed bullet under ## [Unreleased]. Bold-filename + prose-body shape matches the house style of recent entries (v0.1.3 PR #45 etc.); KaC ordering correct (### Changed is the only subsection in Unreleased so trivially compliant). Internal-only; no user-facing behavior change. framing makes the scope explicit for future readers.
  2. 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=xml79/79 pass at 100% coverage (Required test coverage of 100.0% reached)
  • uv run ruff check src/ tests/ → All checks passed
  • uv run ruff format --check src/ tests/ → 11 files already formatted
  • uv 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 QAQA ActiveReady for QA Signoff. Awaiting maintainer QA Approved.

@cmeans

cmeans commented Apr 29, 2026

Copy link
Copy Markdown
Owner

Audit trail: applying Ready for QA Signoff — round-1 observation (CHANGELOG missing) resolved at cec6684, all four verification commands re-run clean in this session, CI fully green. Workflow: Ready for QA → QA Active → Ready for QA Signoff.

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge QA Approved Manual QA testing completed and passed and removed QA Active QA is actively reviewing; Dev should not push changes Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Apr 29, 2026
@cmeans-claude-dev cmeans-claude-dev Bot merged commit 5bae606 into main Apr 29, 2026
40 checks passed
@cmeans-claude-dev cmeans-claude-dev Bot deleted the chore/ignore-deploy-dir branch April 29, 2026 21:17
cmeans-claude-dev Bot added a commit that referenced this pull request Apr 29, 2026
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.
cmeans-claude-dev Bot added a commit that referenced this pull request Apr 30, 2026
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

QA Approved Manual QA testing completed and passed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants