Repository navigation
Drop the Registry Python Profile in Favor of Per-Directory Shape - #3569
Conversation
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>
|
A recorded local strict-review pass covers head |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
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>
|
A recorded local strict-review pass covers head |
Codecov Report❌ Patch coverage is
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
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…#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>
…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)
Closes on promotion: #3556
A Python profile belongs to each declared directory, so the registry no longer declares one.
registry/repos.json: dropsprofiles.pythonfrom ProjectTemplate and ESPHome-Config. ProjectTemplate'sprofilesis now absent, and ESPHome-Config keepscpp: lint-only.registry/repos.schema.json:profilesrefuses apythonkey, matching the validator.spec/project-types.json: the python type allows no registry profile.profileNoteandpython.profile.detectsay the directory'spyproject.tomlshape is the profile. The check now states that a committeduv.lockor any[project]table means build.spec/validate.py: the profile check moves intoprofile_errors(). Aprofiles.pythonentry is refused with a message namingpythonDirectoriesand thepyproject.tomlshape.spec/type-model.md: "Profiles: build vs lint-only" says the registry declares nopythonprofile, 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 throughmain().Local pass findings
spec/project-types.jsonpython.profile.detect,introduced, fixed in 42b67fb: apyproject.tomlwith a[project]table but no runtime dependencies, no[build-system], nouv.lock, and norequirements*.txtfitted neither stated shape. Before this change it was valid only when declared build, so any[project]table now means build.🤖 Generated with Claude Code