Visitar URL original
Pass an Explicit Untracked Mode to the Hub Scripts' Cleanliness Reads and Name the Retire-Alone Read by ptr727 · Pull Request #4148 · ptr727/ProjectTemplate · GitHub
Skip to content

Pass an Explicit Untracked Mode to the Hub Scripts' Cleanliness Reads and Name the Retire-Alone Read - #4148

Merged
ptr727 merged 4 commits into
developfrom
burndown/untracked-mode-reads
Nov 13, 2026
Merged

ptr727 merged 4 commits into
developfrom
burndown/untracked-mode-reads

Conversation

@ptr727

@ptr727 ptr727 commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner

Summary

Verification

  • uv run --no-project --with-requirements requirements.txt python -m unittest test_carry test_skills_install from tests/: 178 tests, OK (3 skipped). The new verify_hub test fails with the old bare read restored.
  • python3 -m unittest test_bootstrap from tests/: 192 tests, OK (5 skipped), the new menu case running under both bash and pwsh. It fails on both menus with the old bare reads restored.
  • scripts/build_dist.py --check clean.
  • scripts/docker_lint.py with shellcheck, shfmt, PSScriptAnalyzer, markdownlint, and editorconfig-checker: success.

Pre-existing findings, filed

Both were raised by the third local pass, after the two-round edit budget was spent, so they take outcome 4's per-unit tracker bullet. Because each tracker still holds an open finding, this pull request closes neither.

Closes on promotion: #4142

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Hub and installation checks now detect untracked files at any depth, including when Git is configured to hide untracked files. Dirty checkouts continue to be rejected or refreshed as appropriate.
    • Worktree retirement guidance clarifies the clean-tree check and hand-removal procedure.

ptr727 and others added 4 commits November 13, 2026 01:22
A bare `git status --porcelain` obeys `status.showUntrackedFiles`, so with
that setting at `no` an untracked file reads as a clean tree. The hub
cleanliness checks in `menu.sh` and `menu.ps1`, `carry.py`'s `verify_hub`,
and `skills_install.py`'s `dirty` stamp now pass `--untracked-files=all`.
Tests cover the two Python sites.

`repo-worktree`'s retire-a-previous-worktree step and `backlog-burndown`'s
retire-alone test now name the hand-removal read in `repo-worktree`
"Listing and Cleanup", which judges a tree clean whatever that setting is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
verify_hub now uses git_status_paths, which already passes
--untracked-files=all and raises on a failed status. The source_ref
untracked-mode assertions fold into the existing status-call test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A shared HubRefFreshnessCases case sets status.showUntrackedFiles=no in
the cached hub, writes an untracked file, and expects both menus to
fetch again. It fails on both menus with the bare status read restored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
menu.sh's hub_root_clean and menu.ps1's Test-HubClean hold the one
status read that both the dry-run check and the freshness check call,
so the shared test case reaches the read the dry-run path uses too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings November 13, 2026 09:34
@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

Hub and installer cleanliness checks now include untracked files that Git settings might hide. The hub checks use shared helpers, and the carry check uses git_status_paths. Worktree retirement instructions now reference the hand-removal procedure.

Changes: Hub and installer cleanliness checks

Layer / File(s) Summary
Hub cleanliness checks
host-setup/menu.ps1, host-setup/menu.sh, tests/test_bootstrap.py
The shell and PowerShell hub checks use shared clean-tree helpers. A bootstrap test verifies that a hidden untracked file causes a cached hub to be refetched.
Python cleanliness checks
scripts/carry.py, scripts/skills_install.py, tests/test_carry.py, tests/test_skills_install.py
The carry check uses git_status_paths. The installer checks all untracked files under its watched paths. Tests cover the dirty-hub refusal and installer status arguments.

Worktree retirement guidance

Layer / File(s) Summary
Retirement instructions
.agents/skills/backlog-burndown/SKILL.md, .agents/skills/repo-worktree/SKILL.md
The instructions now reference “Listing and Cleanup” for hand removal of a clean worktree.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: Minimal · up to 3ba4c

Hub and installer cleanliness checks now treat untracked files as dirty even when Git is configured to hide them. No actionable merge risk remains.

Pre-merge checks: Passed 4

Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title names the main change: the hub cleanliness reads now pass an explicit untracked mode. It also names the retire-alone read change. The raw summary confirms both. The title is long, at 100 cha…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title names the main change: the hub cleanliness reads now pass an explicit untracked mode. It also names the retire-alone read change. The raw summary confirms both. The title is long, at 100 characters and 16 words, but it is specific and on topic.

Finishing Touches

Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between a878d9d and 3ba4ce0.

Files ignored due to path filters: 6

  • .claude-plugin/fleet-skills/.source-digests/backlog-burndown is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/.source-digests/repo-worktree is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/skills/repo-worktree/SKILL.md is excluded by !.claude-plugin/fleet-skills/**
  • .github/skills/backlog-burndown/SKILL.md is excluded by !.github/skills/**
  • .github/skills/repo-worktree/SKILL.md is excluded by !.github/skills/**
Files selected for processing: 9

  • .agents/skills/backlog-burndown/SKILL.md
  • .agents/skills/repo-worktree/SKILL.md
  • host-setup/menu.ps1
  • host-setup/menu.sh
  • scripts/carry.py
  • scripts/skills_install.py
  • tests/test_bootstrap.py
  • tests/test_carry.py
  • tests/test_skills_install.py

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

@ptr727

ptr727 commented Nov 13, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head 3ba4ce05344a6b967b5585130db076883f522f57, the content this pull request carries at that commit against develop, and it recorded 2 findings.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

No active review issues are reported, and the change includes regression coverage for the updated hub cleanliness checks.

No open issues 🎉

What changed in this PR

This PR makes hub cleanliness checks independent of status.showUntrackedFiles and names the existing cleanup read used by retire-alone procedures.

Changes:

  • Passes --untracked-files=all through hub menu, carry, and skills-install cleanliness checks.
  • Adds regression coverage for hidden untracked files under status.showUntrackedFiles=no.
  • Updates canonical and generated skills to identify the hand-removal cleanliness read.
File Description
tests/​test_skills_install.py Verifies the Skills installer passes the explicit untracked-file mode.
tests/​test_carry.py Verifies verify_hub rejects hidden untracked files.
tests/​test_bootstrap.py Verifies both menu implementations refetch dirty hub trees.
scripts/​skills_install.py Adds explicit untracked-file reporting to the dirty stamp.
scripts/​carry.py Reuses the existing comprehensive Git status reader.
host-setup/​menu.sh Centralizes and hardens the Bash hub cleanliness check.
host-setup/​menu.ps1 Centralizes and hardens the PowerShell hub cleanliness check.
.github/​skills/​repo-worktree/​SKILL.md Regenerated GitHub Copilot repo-worktree skill distribution.
.github/​skills/​backlog-burndown/​SKILL.md Regenerated GitHub Copilot backlog-burndown skill distribution.
.claude-plugin/​fleet-skills/​skills/​repo-worktree/​SKILL.md Regenerated Claude repo-worktree skill distribution.
.claude-plugin/​fleet-skills/​skills/​backlog-burndown/​SKILL.md Regenerated Claude backlog-burndown skill distribution.
.claude-plugin/​fleet-skills/​.source-digests/​repo-worktree Updates the generated repo-worktree source digest.
.claude-plugin/​fleet-skills/​.source-digests/​backlog-burndown Updates the generated backlog-burndown source digest.
.agents/​skills/​repo-worktree/​SKILL.md Names the hand-removal read used before retiring worktrees.
.agents/​skills/​backlog-burndown/​SKILL.md Names the hand-removal read used by retire-alone cleanup.

Review effort: Lite

@codecov

codecov Bot commented Nov 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 76.71%. Comparing base (b38e084) to head (3ba4ce0).
⚠️ Report is 185 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #4148      +/-   ##
===========================================
- Coverage    81.60%   76.71%   -4.90%     
===========================================
  Files           26       40      +14     
  Lines         9070    14148    +5078     
===========================================
+ Hits          7402    10853    +3451     
- Misses        1668     3295    +1627     
Flag Coverage Δ
python-3.13 76.71% <100.00%> (-4.90%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ptr727

ptr727 commented Nov 13, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@ptr727

ptr727 commented Nov 13, 2026

Copy link
Copy Markdown
Owner Author

/review

@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@ptr727
ptr727 merged commit 47dee74 into develop Nov 13, 2026
14 checks passed
@ptr727
ptr727 deleted the burndown/untracked-mode-reads branch November 13, 2026 14:56
ptr727 added a commit that referenced this pull request Nov 13, 2026
…epo-worktree and backlog-burndown (#4156)

## Summary

Points the remaining unnamed clean-tree judgments in `repo-worktree` and
`backlog-burndown` at `repo-worktree` "Listing and Cleanup"'s
hand-removal read, `git -C <exact-path> status --porcelain --ignored
--untracked-files=normal`, where any line not starting `!!` means the
tree is not clean. Under `status.showUntrackedFiles=no`, a bare `git
status --porcelain` prints nothing for untracked files, so a tree
holding untracked work would otherwise read clean.

- **`repo-worktree` "Creating a Worktree".** The base-clone return
before attaching a continuation's branch now names the read (#4143,
second finding).
- **`backlog-burndown` "Cleanup Is the Orchestrator's".** The merged
group's standalone-clone confirmation and the standalone-clone "The
clone must be clean" test now name the read (#4144, second finding).
- **Siblings in the files this change touches**, found by a class sweep
and by the local review pass:
- `repo-worktree` "Listing and Cleanup"'s "Return the base clone to
current `develop`" step said "confirm the base clone is clean" with no
read. It now names the hand-removal read in the bullet above it.
- `backlog-burndown` "Bounding the Wait on a Worker" sorted a dead
worker's tree into clean and dirty with no read. A tree holding only
untracked work would then be sent to the abandoned-group discard. The
sort now names the read, which the dirty-tree park in "Parking Instead
of Asking" reuses.
- `repo-worktree` "Listing and Cleanup"'s "A worktree that refuses
removal is dirty" bullet said to look at what is uncommitted with no
read. It now names the read.
- `backlog-burndown` "Raising a Blocked Question" told the maintainer
whether a stopped worktree holds uncommitted work with no read. It now
names the read.
- **Already fixed by #4148, confirmed on `develop` rather than redone.**
#4143's first finding (the continuation's retire step, "Remove it when
it is clean") and #4144's first finding ("A clean tree is the whole
test") both already name the read.

The generated trees under `.github/skills/` and `.claude-plugin/` are
regenerated with `scripts/build_dist.py`, and `--check` is clean.

Closes on promotion: #4143, #4144

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
ptr727 added a commit that referenced this pull request Nov 13, 2026
… Rules (#4189)

## Summary

Promotes the backlog-burndown rounds and changes from other hub sessions
from `develop` to `main`.

- Hooks and the prose gate: #4132, #4134, #4136, #4145, #4152, #4184.
The Husky hook reads its path list once and diffs a merge against
`MERGE_HEAD`. Interrupts re-raise their signal, a Markdown code span
reads as quoted data, and the gate picks a commit's diff base and
recognizes a conflicted promotion's branch cut from `main`.
- Procedures and carried rules: #4133, #4139, #4141, #4149, #4166,
#4177, #4179, #4183, #4185. Resync, audit and check-this-repo procedure
gaps, code style and shell interrupt rules, review-loop gaps across four
skills, the context and delegation section of `AGENTS.md`, question
rules in governance, the promotion line in pull request bodies,
closing-keyword behavior on promotion, and the history-rewrite premise.
- Review and cleanup tooling: #4138, #4148, #4154, #4156, #4157, #4163,
#4164, #4168, #4174, #4180. Cleanliness reads, parked handoffs, the
backlog report's JSON output, exact inline script pins, trusted inputs,
env-file includes, the bounded review wait, side-reviewer matching, and
a Copilot billing-failure notice read as a refusal.
- Workflow and runbook contract: #4153, #4155, #4169, #4171, #4178,
#4182. The runtime-secrets check, a registry entry and spec references,
the Copilot runbook pointers, credential-free checkout steps, and the
deploy-key and runner wording.
- From other hub sessions: #4159 (a repository's own .NET line under a
fleet default), #4161 (the 1Password CLI as an optional host tool),
#4162 (Codex's Windows installer and one managed opencode copy). These
carry no promotion line.

#4182 carries no promotion line by design, and #4175 holds the split-out
part of #4057's scope. Both #1448 and #4175 stay open.

Fixes #1071
Fixes #1154
Fixes #1391
Fixes #1471
Fixes #1594
Fixes #1620
Fixes #1627
Fixes #1650
Fixes #1801
Fixes #2853
Fixes #3620
Fixes #3668
Fixes #3697
Fixes #3766
Fixes #3787
Fixes #3837
Fixes #3840
Fixes #3842
Fixes #3844
Fixes #3865
Fixes #3882
Fixes #3890
Fixes #3894
Fixes #3912
Fixes #3916
Fixes #3954
Fixes #4014
Fixes #4015
Fixes #4016
Fixes #4043
Fixes #4050
Fixes #4057
Fixes #4058
Fixes #4062
Fixes #4084
Fixes #4097
Fixes #4098
Fixes #4099
Fixes #4104
Fixes #4108
Fixes #4114
Fixes #4115
Fixes #4117
Fixes #4118
Fixes #4119
Fixes #4121
Fixes #4122
Fixes #4123
Fixes #4131
Fixes #4135
Fixes #4140
Fixes #4142
Fixes #4143
Fixes #4144
Fixes #4151

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants