Visitar URL original
Refuse a configure.sh Apply for an Unregistered Repository and Name the Develop Checkout for an Unpromoted Entry by ptr727 · Pull Request #4082 · ptr727/ProjectTemplate · GitHub
Skip to content

Refuse a configure.sh Apply for an Unregistered Repository and Name the Develop Checkout for an Unpromoted Entry - #4082

Merged
ptr727 merged 13 commits into
developfrom
feature/configure-unregistered-refusal
Nov 11, 2026
Merged

ptr727 merged 13 commits into
developfrom
feature/configure-unregistered-refusal

Conversation

@ptr727

@ptr727 ptr727 commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

Summary

repo-config/configure.sh apply refuses a repository with no entry in the registry it reads, before any write. Without the entry, the rulesets and agent policy files came from the default policy, so a repository whose entry sat on develop only was silently given a required status check it may have declared off. The refusal names the registry and says the entry may be on develop only. apply also refuses when registry/repos.json is absent. check is unchanged.

The docs state the supported path for that case: a repository whose registry entry has merged to the hub's develop but not yet reached main is configured and checked, and its secrets audit run, from a hub checkout at develop. Every other repository's run stays on main. Per the maintainer's answer on the issue, no check refuses a non-main checkout.

  • repo-config/configure.sh: the refusal, matched case-insensitively so a case-only near-miss still reaches spec/resolve_description.py's own refusal. The jqr helper moves above the registry region, whose lookups use it, so its comment block reads as added and the pull request carries the comments label.
  • tests/test_configure_archived.py: the refusal's cases join the harness that already lifts the registry region (an unlisted name, an absent registry, a listed name in either letter case, a carriage return on the entry count), and the end-to-end case covers an unregistered apply --checkout with a recording gh stub. Four of them fail against the previous script.
  • STANDUP.md section 4, docs/repo-config.md, repo-config/README.md: the refusal and the develop checkout.
  • OPERATIONS.md, AUDIT.md section 6, and the branching-and-release-model branch-protection reference: each named only a main checkout, and two told an unregistered repository to pass the model to apply.
  • GOVERNANCE.md "Hub-Hosted Tooling": the develop case for configure.sh and spec/audit.py.
  • standup-a-repo step 8 and audit-a-repo's configuration-check line: the develop checkout. Generated skill trees regenerated through scripts/build_dist.py.

Local review

  • Declined: reusing archived_status for the presence test. Its exact-case match would refuse a case-only typo as "no entry, may be on develop only". The case-insensitive count lets that typo reach spec/resolve_description.py, whose refusal names the near-miss.

Findings listed at the opening push, fixed in 7fe1a00

Each was fixed on the next push, and the local pass over that head raised none.

  • docs/repo-config.md:18 (introduced): "apply refuses a repository without one" reads as a repository without a model.
  • repo-config/configure.sh:220 (introduced): the refusal message's second sentence runs past 25 words and carries two instructions.
  • repo-config/configure.sh:215 (introduced): the entry-count guard's "(invalid JSON?)" hint names a cause the earlier status read already catches.
  • tests/test_configure_archived.py:8 (introduced): the docstring says "absent entry" where it means an absent registry under check.

Dropped findings

  • repo-config/configure.sh workflowModel lookup, below the registry region: consolidation onto jqr, on text this change did not touch.

Closes on promotion: #4061

🤖 Generated with Claude Code

ptr727 and others added 10 commits November 11, 2026 10:18
An apply for a name with no registry entry composed the default policy and
wrote a ruleset requiring a status check the entry may have dropped. Apply
now exits before any write, naming the registry and that the entry may sit on
develop only. The standup and configuration docs state the develop-checkout
path for an unpromoted entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stry on apply

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rried configure text

OPERATIONS.md, AUDIT.md section 6, and the branch-protection reference named only a hub
checkout at main, and told an unregistered repository to pass the model to apply. apply now
refuses that repository, and an entry still only on develop is configured and checked from a
hub checkout at develop. docs/repo-config.md's opening said every command runs at main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Step 8 ran configure.sh from the hub at main, which a standup reaches before its registry
entry is promoted, so apply refuses there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AUDIT.md section 6 checks an entry still only on develop from a hub checkout at develop, and
the skill's summary of that section named main alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n alone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The refusal sits in the registry region tests/test_configure_archived.py already lifts, so its
cases join that harness rather than a second copy of it: an unlisted name, an absent registry,
a listed name in either letter case, and a carriage return on the entry count. The end-to-end
case records every gh call and covers an unregistered apply with --checkout. The module
docstring states the apply outcomes, and tests/test_configure_unregistered.py is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The section read main for every hub tool, while the configure docs direct a develop checkout
for a repository whose registry entry has not yet reached main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The docs named the develop checkout for configuring an unpromoted entry and then sent every
other run to main, which included that entry's own check. Hub-Hosted Tooling's exception sat
between the fetch rule and its reason and named only configure.sh, where the secrets audit runs
from the same checkout. docs/repo-config.md said apply waits for the entry, where it refuses.

The registry region's two lookups use the jqr helper, defined above the region, rather than
two inline copies of its pipeline.

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

coderabbitai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 28 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 111f353 and 07756ed.

Files ignored due to path filters: 9

  • .claude-plugin/fleet-skills/.source-digests/audit-a-repo is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/.source-digests/branching-and-release-model is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/.source-digests/standup-a-repo is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/skills/audit-a-repo/SKILL.md is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/skills/branching-and-release-model/references/branch-protection-and-promotion.md is excluded by !.claude-plugin/fleet-skills/**
  • .claude-plugin/fleet-skills/skills/standup-a-repo/SKILL.md is excluded by !.claude-plugin/fleet-skills/**
  • .github/skills/audit-a-repo/SKILL.md is excluded by !.github/skills/**
  • .github/skills/branching-and-release-model/references/branch-protection-and-promotion.md is excluded by !.github/skills/**
  • .github/skills/standup-a-repo/SKILL.md is excluded by !.github/skills/**
Files selected for processing: 11

  • .agents/skills/audit-a-repo/SKILL.md
  • .agents/skills/branching-and-release-model/references/branch-protection-and-promotion.md
  • .agents/skills/standup-a-repo/SKILL.md
  • AUDIT.md
  • GOVERNANCE.md
  • OPERATIONS.md
  • STANDUP.md
  • docs/repo-config.md
  • repo-config/README.md
  • repo-config/configure.sh
  • tests/test_configure_archived.py
Pre-merge checks: Passed 1 · Inconclusive 1

Failed Failed checks: 1 inconclusive

Check name Status Explanation Resolution
Title check Pending This assessment has not completed. The check will be retried on the next pre-merge check run.
Passed Passed checks: 1 passed

Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
  • 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

@ptr727 ptr727 added the comments Permits the comment lines the pull request adds or edits, which the prose gate otherwise refuses label Nov 11, 2026
@ptr727

ptr727 commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

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

docs/repo-config.md names the registry entry apply refuses without. The refusal message states
one instruction per sentence. The entry-count guard no longer guesses invalid JSON, a case the
status read before it already catches. The test docstring names the absent registry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ptr727

ptr727 commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head 7fe1a0046658d03ab440954fb7d2243d4aa83449, the content this pull request carries at that commit against develop, and it recorded 0 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.

🟡 Changes recommended

Six active documentation and diagnostic clarity issues remain across the configuration guidance, refusal message, and archived test description.

6 open issues
What changed in this PR

This PR makes repo-config/configure.sh apply fail closed when the registry is missing or does not contain the target repository, and documents using a hub checkout at develop for entries not yet promoted to main.

Changes:

  • Add registry-presence checks before any apply writes.
  • Expand tests for missing registries, unregistered repositories, case handling, CRLF output, and write protection.
  • Update configuration, operational, governance, and audit guidance.
  • Regenerate affected canonical skill distributions and source digests.
File Description
tests/​test_configure_archived.py Adds registry-presence and end-to-end refusal coverage, including missing registries, case variants, CRLF output, and write protection.
STANDUP.md Documents using the develop checkout for registry entries not yet promoted to main.
repo-config/​README.md Updates configuration guidance for apply refusals and checkout selection.
repo-config/​configure.sh Adds fail-closed checks for missing registry entries or registry files and relocates the jqr helper.
OPERATIONS.md Updates operational configuration instructions with the develop checkout exception.
GOVERNANCE.md Documents branch selection for hub-hosted tools handling unpromoted registry entries.
docs/​repo-config.md Updates repository configuration and audit procedures.
AUDIT.md Documents configuration, ruleset, and secrets audits for the applicable checkout.
.github/​skills/​standup-a-repo/​SKILL.md Updates standup configuration guidance for unpromoted entries.
.github/​skills/​branching-and-release-model/​references/​branch-protection-and-promotion.md Updates branch-protection configuration guidance for checkout selection.
.github/​skills/​audit-a-repo/​SKILL.md Updates live configuration audit guidance for the develop checkout case.
.claude-plugin/​fleet-skills/​skills/​standup-a-repo/​SKILL.md Regenerates the Claude standup skill distribution with the updated checkout guidance.
.claude-plugin/​fleet-skills/​skills/​branching-and-release-model/​references/​branch-protection-and-promotion.md Regenerates the Claude branch-protection reference with the updated checkout guidance.
.claude-plugin/​fleet-skills/​skills/​audit-a-repo/​SKILL.md Regenerates the Claude audit skill distribution with the updated checkout guidance.
.claude-plugin/​fleet-skills/​.source-digests/​standup-a-repo Updates the source digest for the standup skill distribution.
.claude-plugin/​fleet-skills/​.source-digests/​branching-and-release-model Updates the source digest for the branching-model skill distribution.
.claude-plugin/​fleet-skills/​.source-digests/​audit-a-repo Updates the source digest for the audit skill distribution.
.agents/​skills/​standup-a-repo/​SKILL.md Updates the authored standup skill source with the new checkout guidance.
.agents/​skills/​branching-and-release-model/​references/​branch-protection-and-promotion.md Updates the authored branch-protection reference with the new checkout guidance.
.agents/​skills/​audit-a-repo/​SKILL.md Updates the authored audit skill source with the new checkout guidance.

Review effort: Lite

Comment thread docs/repo-config.md Resolved
Comment thread docs/repo-config.md Resolved
Comment thread repo-config/README.md Resolved
Comment thread repo-config/configure.sh Resolved
Comment thread repo-config/configure.sh Resolved
Comment thread tests/test_configure_archived.py Resolved
@codecov

codecov Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.30%. Comparing base (b38e084) to head (07756ed).
⚠️ Report is 156 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #4082      +/-   ##
===========================================
+ Coverage    81.60%   82.30%   +0.69%     
===========================================
  Files           26       38      +12     
  Lines         9070    12963    +3893     
===========================================
+ Hits          7402    10669    +3267     
- Misses        1668     2294     +626     
Flag Coverage Δ
python-3.13 82.30% <ø> (+0.69%) ⬆️

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 and others added 2 commits November 11, 2026 11:55
@ptr727

ptr727 commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

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

@ptr727

ptr727 commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@ptr727

ptr727 commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

/review

@coderabbitai

coderabbitai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Action not completed

Review rate limited.

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 fcd594e into develop Nov 11, 2026
13 checks passed
@ptr727
ptr727 deleted the feature/configure-unregistered-refusal branch November 11, 2026 20:15
ptr727 added a commit that referenced this pull request Nov 12, 2026
…s Rule, Companion-Free Lint, Root hub_fetch_run, .codecov.yml (#4083)

## Summary

Promotes burndown round 3 of the attended run of 2026-11-10, together
with two pull requests from other hub sessions, from `develop` to
`main`.

- #4082: `configure.sh apply` refuses a repository the registry does not
list, before any write. A repository whose entry is on `develop` but not
yet on `main` is configured and audited from a hub checkout at
`develop`. `OPERATIONS.md`, `AUDIT.md`, `GOVERNANCE.md` "Hub-Hosted
Tooling", and the standup, audit, and branch-protection skill text now
say so.
- #4081: `WORKFLOW.md`'s contradictory trigger, merge, and release rules
are reconciled. D1.5 requires a gate to trigger on `pull_request`, and
the audit reports a gate that does not. A retarget is cleared by a push
or a close and reopen.
- #4078: `CODESTYLE.md` gains an Interrupts rule with Python and Shell
mechanics. `build_dist.py` no longer carries a file's trailing link
definitions into an include of its last heading.
- #4076: `docker_lint.py` imports only the standard library, so the Lint
tasks fetch no companions. The provenance label and the ruff task labels
are corrected. `GOVERNANCE.md` "Repo-Scoped Secrets" states the
owner-first host secret stem.
- #4080, from another session: `hub_fetch_run.py` lives in the
repository root for both hook shapes.
- #4077, from another session: only `.codecov.yml` is accepted as the
Codecov configuration name.

Fixes #4061
Fixes #4011
Fixes #4051
Fixes #4048
Fixes #4060
Fixes #3947
Fixes #4072
Fixes #3915
Fixes #4059
Fixes #4071

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


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Documentation**
* Clarified when repository checks and configuration use the `develop`
branch, and documented that configuration changes are not applied to
unregistered repositories.
* Expanded scripting guidance for handling interruptions, cleaning up
resources, and saving persistent state safely.
* Updated workflow, coverage, and hook setup guidance to reflect current
requirements and locations.

* **Bug Fixes**
* Audits now check only the declared baseline filename; repositories
using a different filename are reported as missing.
* Markdown heading extraction no longer includes trailing link
definitions in the heading body.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
ptr727 added a commit that referenced this pull request Nov 13, 2026
…ut (#4125)

## Summary

Addresses #4085, per the maintainer's answer there (option 1).
`scripts/carry.py` could not run `STANDUP.md` step 2 for a repository
whose registry entry had merged to `develop` but not yet reached `main`.
It refused any hub checkout not at `origin/main`, and the target's entry
was missing there.

- **`verify_hub` accepts `develop` for an unpromoted entry.** A hub
checkout at `origin/develop` is accepted when the target has no entry on
`origin/main`. It is refused for a target `main` already registers, so
every other carry stays on `main`. This matches
`repo-config/configure.sh` and `spec/audit.py` since #4082.
- **From `main`, a develop-only entry is named.** The run says to use a
`develop` checkout rather than reporting the repository unregistered.
- **Both branches are fetched by explicit refspec.** The hub menus clone
`main` with `--single-branch`, where a plain `git fetch origin main
develop` never creates `origin/develop`.
- **The menus stay main-only, as their own policy.** Their
`--ref`/`-Ref` refusal now names the unpromoted case and points at
running `scripts/carry.py` from a `develop` checkout. Their comments,
which stated the old carry.py rule, now state the menu's.
- **Docs agree.** `STANDUP.md` step 2, `GOVERNANCE.md` "Hub-Hosted
Tooling", `scripts/README.md` "`carry.py`", and `host-setup/README.md`.

`registry_matches` replaces the duplicate entry matching in
`resolve_repo`.

## Verification

- `tests/test_carry.py`: 85 tests pass. The new `CarryHubTests` build a
real two-branch hub and cover main, develop, the refusals both ways, a
checkout at neither, and a `--single-branch` main clone. Against the old
plain fetch, the single-branch case fails with `fatal: invalid object
name 'origin/develop'`, the defect it pins.
- Pre-commit gates clean: ruff format and check, mypy, prose gate, EOL.
`shellcheck host-setup/menu.sh` and a PowerShell parse of
`host-setup/menu.ps1` are clean.
- The menu change is a message string and comments only. `menu.ps1` was
parsed with `pwsh` on Linux, not run on native Windows.

## Labels

`comments`: the change corrects existing comments in both menus that the
new behavior made false.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comments Permits the comment lines the pull request adds or edits, which the prose gate otherwise refuses

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants