Skip to content

Drop the Registry Python Profile in Favor of Per-Directory Shape - #3569

Merged
ptr727 merged 4 commits into
developfrom
feature/3556-drop-registry-python-profile
Oct 28, 2026
Merged

ptr727 merged 4 commits into
developfrom
feature/3556-drop-registry-python-profile

Conversation

@ptr727

@ptr727 ptr727 commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Closes on promotion: #3556

A Python profile belongs to each declared directory, so the registry no longer declares one.

  • registry/repos.json: drops profiles.python from ProjectTemplate and ESPHome-Config. ProjectTemplate's profiles is now absent, and ESPHome-Config keeps cpp: lint-only.
  • registry/repos.schema.json: profiles refuses a python key, matching the validator.
  • spec/project-types.json: the python type allows no registry profile. profileNote and python.profile.detect say the directory's pyproject.toml shape is the profile. The check now states that a committed uv.lock or any [project] table means build.
  • spec/validate.py: the profile check moves into profile_errors(). A profiles.python entry is refused with a message naming pythonDirectories and the pyproject.toml shape.
  • spec/type-model.md: "Profiles: build vs lint-only" says the registry declares no python profile, and why. The false-declaration sentence is gone.
  • tests/test_spec_validate.py: constructed fixtures cover the rejection, other types' profiles, and the shipped registry. One case runs the rejection through main().

Local pass findings

  • spec/project-types.json python.profile.detect, introduced, fixed in 42b67fb: a pyproject.toml with a [project] table but no runtime dependencies, no [build-system], no uv.lock, and no requirements*.txt fitted neither stated shape. Before this change it was valid only when declared build, so any [project] table now means build.

🤖 Generated with Claude Code

ptr727 and others added 3 commits October 28, 2026 07:45
A Python profile belongs to each declared directory, read from its
pyproject.toml shape, so the registry no longer declares one. The python
type allows no registry profile, and validate.py refuses a profiles.python
entry with a message naming the per-directory reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The registry schema now refuses a python key under profiles, matching
validate.py. python.profile.detect names a shape matching neither profile
as the finding, since the shape now defines the profile. type-model.md
defers the shape criteria to that check, and the audit helper test keeps
exercising the python coverage carve-out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The neither-shape sentence contradicted the workspace-root rule and left
a locked project without runtime dependencies unclassified. The check now
states the decision's rule directly, which the workspace root follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings October 28, 2026 14:53
@ptr727

ptr727 commented Oct 28, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head 84193a107a773449a7de839b0e62a3e64471fff4, the content this pull request carries at that commit against develop, and it recorded 1 finding.

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • 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

Comment @coderabbitai help to get the list of available commands.

A pyproject.toml with a [project] table but no runtime dependencies, no
lock, and no requirements file fitted neither shape. Before the derived
profile it passed only when declared build, so the check keeps that.

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

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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@ptr727

ptr727 commented Oct 28, 2026

Copy link
Copy Markdown
Owner Author

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

@codecov

codecov Bot commented Oct 28, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.85714% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 81.60%. Comparing base (a70a543) to head (42b67fb).

Files with missing lines Patch % Lines
spec/validate.py 92.85% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #3569      +/-   ##
===========================================
+ Coverage    81.50%   81.60%   +0.10%     
===========================================
  Files           26       26              
  Lines         9066     9070       +4     
===========================================
+ Hits          7389     7402      +13     
+ Misses        1677     1668       -9     
Flag Coverage Δ
python-3.13 81.60% <92.85%> (+0.10%) ⬆️

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 merged commit 449aa8c into develop Oct 28, 2026
13 checks passed
@ptr727
ptr727 deleted the feature/3556-drop-registry-python-profile branch October 28, 2026 18:08
ptr727 added a commit that referenced this pull request Oct 28, 2026
…#3534)

## Summary

Declares `host-secrets` in Blog's registry `types`, step 1 of
ptr727/Blog#553. Blog's `deploy/make-release.sh` reads a host env file
under `~/.secrets/`, which `GOVERNANCE.md` "Operational Repositories"
routes through the carried readers, and `carry.py apply` carries
`lib/sh` to `lib/fleet/sh` only for a repository whose declared types
select it.

- **`registry/repos.json`**: Blog's `types` gains `host-secrets`.
- **`reports/conformance-matrix.md`**: the `host-secrets` overlay row
named HomeAutomation-Config as the first adopter, while its registry
entry declares only `source-only`. It now names Blog as the first to
declare the type, with the carry tracked in ptr727/Blog#553.

## Expected Drift Until Blog #553 Lands

Between this merge reaching `main` and Blog's carry, an audit of Blog
reports `lib/fleet/sh` missing and `hostsecrets.library.reader` unmet.
Both clear in Blog's own pull request for #553, steps 2 and 3, which
reads this change from hub `main`.

## Takeover

The hub session took this pull request over on 2026-10-28, at the
maintainer's direction, after the Blog session stepped away.

It merged `develop` in with a merge commit, since the branch was already
pushed and is not its own. The merge brought in #3569, which made the
validator refuse a `python` profile. Blog's entry declares no such
profile, and the merge applied without conflict. It also split the
matrix row's added sentence into two, each 25 words or fewer.

## Verification

- `spec/validate.py`: 22 cataloged repos classify cleanly.
- `scripts/prose_lint.py`, whole tree: 0 violations, and the changed row
trips no sentence-length finding.
- Local strict review, frontier tier, three passes. The first raised the
stale matrix row, the second a wording that read as if the carry were
done, and the third found nothing. Recorded.

🤖 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 Oct 28, 2026
…tence Length, Handoff Skills, and Blog host-secrets (#3572)

## Summary

Promotes `develop` to `main`, carrying round 4 of the resync-issue
burndown:

- #3569: the registry declares no `python` profile. The schema and
`spec/validate.py` refuse one, since each declared directory's
`pyproject.toml` shape states its profile.
- #3567: the `CODESTYLE.md` Python summary names the undeclared-root
default. `CODESTYLE.md`, python-codestyle, and shell-codestyle reach 25
words or fewer per sentence.
- #3568: the `pr_review.py` `refusal=` usage text names the `sent` and
`spent` readings. pr-review-conduct, drive-pr,
`docs/pr-reviewer-reference.md`, and the last Copilot-instructions
sentence reach the cap.
- #3570: backlog-burndown, session-handoff, and unattended-handoff reach
the cap.
- #3534: Blog declares the `host-secrets` overlay, and the conformance
matrix names it the first adopter. The hub session took this over from
the Blog session.
- #3573: promotion fix for Copilot's finding on this pull request. It
restores the full-page check sentence and repairs 11 more #3570 splits
that lost a subject, antecedent, or condition scope.
- #3574: promotion fix auditing the #3567 and #3568 splits the same way.
It repairs 16 that lost an antecedent, a reason, or a condition's reach.

#3567, #3568, and #3570 merged into `develop` on attested local passes,
after Copilot refusals read as possible quota. The maintainer authorized
each, as recorded on those pull requests. The sweep slices continue
#3531 and do not close it.

Fixes #3556
Fixes #3563
Fixes #3560

🤖 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