Skip to content

Promote develop to main With the Pilot Follow-Ups and the Get-Version Fix - #786

Merged
ptr727 merged 6 commits into
mainfrom
develop
Aug 17, 2026
Merged

Promote develop to main With the Pilot Follow-Ups and the Get-Version Fix#786
ptr727 merged 6 commits into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Promote develop to main, carrying:

The release that follows is the pin PhotoCleaner's Dependabot bumps to, and PhotoCleaner's next release through it is the proof that the executable asset is named PhotoCleaner.7z again.

Closes #769.

ptr727 and others added 6 commits August 16, 2026 15:17
…nippets (#775)

Release `2.0.352` (`main` `0b07a59d7c65d07d8df275a96deaf2e06cbefd51`) is
the
first tag carrying every hub-hosted reusable workflow task, produced by
[the publish-release
run](https://github.com/ptr727/ProjectTemplate/actions/runs/31974067182)
after promotion #774. In that run `build-release-task.yml` ran with
every
target disabled and its `github-release` job succeeded while all five
build
jobs skipped, proving the `github-release` skip fix (#762) and the
caller-granted scopes (#772). The earlier release attempt on `82fecef`

([run](https://github.com/ptr727/ProjectTemplate/actions/runs/31972504539))
ended in `startup_failure` because `build-nuget`/`github-release`
declared
job-level permissions; #772 fixed it.

## docs/reusable-workflows.md "Rollout"

- Ticks the two stage-0 merge-bot proof items: Dependabot PR #771 merged
to
  `develop` with `--squash` through `merge-bot-task.yml`

([run](https://github.com/ptr727/ProjectTemplate/actions/runs/31972622149)),
  and Dependabot PR #770 merged to `main` with `--merge`

([run](https://github.com/ptr727/ProjectTemplate/actions/runs/31972611554)).
- Ticks "Promoted and released" in stages 2, 3, 4, and 5 with `2.0.352`
on
  `0b07a59d` and #774, and stage 4 also notes the first attempt's
  `startup_failure` and its #772 fix.
- Leaves every adoption and pilot checkbox untouched.
- Does **not** tick either stage's "Catalog snippets ... pinned to that
release" item, since neither stage's full set of snippets is complete
this
  time: stage 2's release-with-smoke shape still calls its own repo's
`build-release-task.yml` by `./` path rather than the hub's, and stage
5's
  `deploy-site.yml`, `publish-docker-readme-task.yml`, and
  `check-upstream-version-task.yml` each stay open for reasons the doc
  itself already states (no manifest-wide snippet by design, or a job
  embedded in a larger stub rather than a standalone caller). Both items
  gain an inline note identifying which of their snippets this PR adds.

## New catalog snippets

Three of the five/six candidate files, each pinned
`0b07a59d7c65d07d8df275a96deaf2e06cbefd51 # 2.0.352` and byte-identical
to
its doc stub block apart from the pin (and, where the doc's own comment
wrapping does not survive an actual YAML file's comment-wrap rule, a
reworded comment kept in sync on both sides):

- `catalog/snippets/workflows/test-pull-request.yml` (the no-build gate
  shape from "Adopting the Gates")
- `catalog/snippets/workflows/publish-release.yml` (the release-repo
shape
  from "Adopting the Release Chain")
- `catalog/snippets/workflows/run-periodic-codegen-pull-request.yml`
(the
  codegen stub, which the doc already says keeps today's per-repo shape)

Skipped, with the doc updated to say why:

- `test-pull-request-smoke.yml` - the doc's smoke stub still calls the
caller's own `./.github/workflows/build-release-task.yml` by local path,
  never the hub's `build-release-task.yml` directly, so it does not meet
  the "calls the hub task" condition.
- `deploy-site.yml` - the doc's own "Deploy-site" paragraph states it
  "has no manifest-wide catalog snippet either," the same reason
`get-version-task.yml`/`publish-plan-task.yml` have none: each site's
own
  shape varies too much around the shared `deploy` job.
- `check-upstream-version.yml` - the doc gives only the
`check-upstream-version:`
job body, not a complete top-level trigger/concurrency shape, and unlike
the codegen stub there is no doc statement that a uniform shape exists
to
  copy.

`catalog/snippets/workflows/README.md` gained rows for the three new
snippets and an updated intro paragraph explaining the partial rollout.

## TODO.md

Added one **Settled** line under "Host the type-specific tasks" naming
`2.0.352` as the release that makes stages 2-5 adoptable and the run
that
proved the release chain, and noting #769 as the one open follow-up from
the promotion review.

## reports/workflow-reuse.md

Regenerated with `python3 spec/workflow_reuse.py --report` against the
live
fleet at hub `63d244b` (this branch's base). The numbers move against
the
last committed report only because the live fleet moved since then, not
because of anything in this PR.

## Gates run locally

`spec/validate.py`, `python3 -m unittest discover -s scripts/tests` (686
tests), `spec/audit.py --selftest`, `spec/workflow_reuse.py --selftest`,
`scripts/repo_gate.py` (sha-pin resolved against GitHub),
`scripts/build_dist.py --check`,
`scripts/prose_lint.py` (all nine checks), `ruff check`/`ruff format
--check`,
`mypy`, and the Docker `actionlint`, `markdownlint-cli2`, and
`editorconfig-checker` linters (only `.ruff_cache` noise there).
Fixes #767. Supersedes the last-command-wins behavior with the strict
single-action contract the Windows tooling already enforces.

## What changed

The Linux host-setup scripts (`bootstrap.sh`, `install-tools.sh`,
`setup-github.sh`, `upgrade-host.sh`) overwrote `MODE` in the argument
loop, so the last action given won. That silently discards an intent in
the dangerous direction: `--report --install` drops the safe action and
keeps the one that changes the host.

Each script now collects the actions it is given and refuses when more
than one is named, mirroring the Windows `Resolve-Mode` refusal:

```sh
ERROR: More than one action given (report install), name one
```

The `parse_args` functions also `return 0` on the no-action/default
path, which keeps the default action reachable under `set -e`.

## Files

- `host-setup/bootstrap.sh` - actions collected and refused when more
than one; help now says "Actions, name one"
- `host-setup/linux/install-tools.sh` - same, and the `--sudo-timestamp`
tool-name refusal reworded against the resolved action
- `host-setup/linux/setup-github.sh` - same
- `host-setup/linux/upgrade-host.sh` - same
- `host-setup/windows/README.md` - the "Actions, the last one given wins
| Actions, name one" differences-table row is deleted rather than kept
- `TODO.md` - the #673 entry is broadened to carry the loader (#767),
with a refreshed check anchor

## Verification

- `bash -n` and `shellcheck` clean on all four scripts
- Prose gate, markdownlint, and editorconfig-checker clean
- `python3 -m unittest discover -s scripts/tests` - 686 tests pass
- Manual refusal tests for every multi-action combination, plus
single-action and no-action paths
## What

Adds `powershell` to the host tools `install-tools.sh` manages, as the
one optional member. It installs from Microsoft's apt repository, the
same feed `dotnet` already falls back to, so no separate download step
is needed (the path HomeAutomation-Config's PR #56 took with a tar.gz
build).

- `install-tools.sh --optional` (or a stand-up's `--optional` tools
step) now also installs `pwsh`.
- Naming it explicitly (`install-tools.sh --install powershell`) selects
it regardless of `--optional`.
- The feed registration is extracted into a shared `microsoft_feed()`,
used by both `dotnet` and `powershell`; `dotnet`'s behavior is
unchanged.
- `--list` marks it `(optional)`, and the report notes when Microsoft's
repository is not configured.
- Non-amd64 hosts get a named skip, matching `dotnet`.

Verified: shellcheck, prose_lint, markdownlint, and editorconfig are
clean, and all 686 tests in `scripts/tests` pass. On a Debian 13 host
the report shows `powershell 7.6.5-1.deb` available from
`packages.microsoft.com`, and a default report (without `--optional`)
omits it.

## Docs

- `host-setup/linux/README.md` source taxonomy and the
docker/node/dotnet section.
- `docs/host-setup.md` source paragraph and the "not in the table"
sentence.
… Pilot (#778)

## What

- `.github/actions/build-executable-default/action.yml`: the release
archive is named for the project file's stem
(`./PhotoCleaner/PhotoCleaner.csproj` gives `PhotoCleaner.7z`) unless
the new `asset-name` input names it, and `build-release-task.yml`
exposes that as `executable_asset_name`. PhotoCleaner's first publish
through the task (run 31977092102, release 1.1.11) attached `Console.7z`
where its own leaf had attached `PhotoCleaner.7z`, the one regression
the pilot found. PlexCleaner names its archive the same way, so the
derived default is right for both known callers.
- `catalog/snippets/workflows/publish-release.yml` and the doc's
byte-identical stub: `permissions: {}` at workflow level, `contents:
read` on the `validate` job, the publish job's grants unchanged. These
are the four suppressed findings raised on #775 after its clean round.
- `docs/reusable-workflows.md` Rollout: PhotoCleaner ticked as the stage
2 pilot (ptr727/PhotoCleaner#55, #56, the validate default-hook path
observed) and the stage 4 pilot (smoke run 31974932749 and publish run
31977092102, release 1.1.11), a proof item for the asset-name fix on the
next PhotoCleaner release.
- `reports/workflow-reuse.md` regenerated: PhotoCleaner 8 workflow files
to 3, all three callers, fleet callers 1 to 3.

## Verification

actionlint, prose gate, repo gate, audit self-test, unit tests,
markdownlint. The asset-name change is proven by the next PhotoCleaner
release, recorded as a proof item.

Refs ptr727/PhotoCleaner#55, ptr727/PhotoCleaner#56.
 Phase 2) (#773)

Reduces conditional-load token cost of the three largest un-converted
skills by extracting detail content into `references/` subdirectories,
keeping common-path rules in `SKILL.md`.

## Changes

### `python-codestyle` — 17.3 KB → 8.7 KB (−50%)

- **`references/profiles.md`** — full `build`/`lint-only` profile spec,
per-repo adaptation axes (type checker, dep declaration, versioning, VS
Code config)
- **`references/code-style.md`** — comments, docstrings, type hints,
naming, imports, patterns to avoid
- **`references/testing.md`** — pytest conventions
- SKILL.md retains: profile decision table (condensed), toolchain table,
dev loop, layout, key lint rules, linter checklist

### `dotnet-codestyle` — 16.0 KB → 11.5 KB (−28%)

- **`references/conventions.md`** — C# language features, naming, code
structure, XML doc examples
- **`references/testing.md`** — xUnit v3 + AwesomeAssertions template
- **`references/project-config.md`** — target framework, AOT,
SourceLink, `InternalsVisibleTo`
- SKILL.md retains: zero-warnings policy, build tasks, central config
rules, suppression hierarchy, logging/library split, code patterns

### `git-commit-conventions` — 12.8 KB → 11.9 KB (−7%)

- **`references/history-rewrite.md`** — two-gate re-identification rule
for `git filter-repo` rewrites
- SKILL.md retains: all core rules — staging, signing probe (both
shells), identity check, no force-push, destructive-command ban

### `.claude-plugin` dist

Regenerated via `build_dist.py`; reference files included in the
generated tree.

## Metrics

| Skill | Before | After | Reduction |
|---|---:|---:|---:|
| `python-codestyle` | 17,312 B | 8,696 B | −50% |
| `dotnet-codestyle` | 15,959 B | 11,523 B | −28% |
| `git-commit-conventions` | 12,784 B | 11,869 B | −7% |
| All skills total | 156,243 B | 142,276 B | −9% |

No rules removed. All behavioral constraints, safety gates, and
verification requirements are preserved — content is moved, not deleted.

## Out of scope

- AGENTS.md reduction (Phase 4) — deferred pending a hub-vs-local scope
decision
- Skill description compression (Phase 5) — deferred until body
compression is complete
- `comment-and-doc-style` — already has three references; no additional
split warranted

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ptr727 <2061579+ptr727@users.noreply.github.com>
Co-authored-by: Pieter Viljoen <ptr727@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
`get-version-task.yml` follows WORKFLOW.md D3.1 like the inline
`get-version` job in `build-release-task.yml` already does: one branch
per run, `GITHUB_REF` names it, NBGV classifies it directly, no
`IGNORE_GITHUB_REF`. The override was carried over from the retired
branch-matrix snippet, and its comments described that model. Every
current caller passes the default ref, where the two spellings agree, so
no behavior changes for them.

Refs #769, which the promotion to `main` closes.
Copilot AI lite review requested due to automatic review settings August 17, 2026 02:52

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.

Pull request overview

Promotes develop to main while folding in the follow-ups that finalize the reusable-workflow rollout (pins/snippets, permissions), align the hosted get-version task with WORKFLOW.md D3.1, and incorporate the PhotoCleaner pilot learnings (executable asset naming), plus host-setup improvements (single-action contract + optional PowerShell).

Changes:

  • Align .github/workflows/get-version-task.yml with WORKFLOW.md D3.1 by removing the IGNORE_GITHUB_REF override and updating its contract comments.
  • Fix executable release asset naming by deriving the .7z archive name from the project file (with an override input), and expose it via build-release-task.yml.
  • Add pinned catalog workflow snippets for newly adoptable stubs, regenerate the workflow-reuse report, and update host-setup docs/scripts (single-action refusal + optional PowerShell from Microsoft feed); split large Skill files into references/ for progressive disclosure.

Reviewed changes

Copilot reviewed 38 out of 38 changed files in this pull request and generated no comments.

Show a summary per file
File Description
TODO.md Records 2.0.352 rollout proof and updates tracking entries/links for the promotion follow-ups.
reports/workflow-reuse.md Regenerated fleet reuse metrics after workflow adoption/pilot changes.
host-setup/windows/README.md Removes the Linux-vs-Windows “last action wins” divergence row now that Linux matches “name one action”.
host-setup/linux/upgrade-host.sh Enforces “exactly one action” CLI contract (refuse multiple).
host-setup/linux/setup-github.sh Enforces “exactly one action” CLI contract (refuse multiple).
host-setup/linux/README.md Documents PowerShell as an upstream apt-repo tool and updates Linux host-tool taxonomy.
host-setup/linux/install-tools.sh Adds optional powershell tool, factors Microsoft feed registration, and enforces single-action parsing.
host-setup/bootstrap.sh Enforces single-action parsing while preserving the menu/default behavior.
docs/reusable-workflows.md Updates rollout stages with 2.0.352 release/pilot proofs and adds pinned stub/snippet guidance.
docs/host-setup.md Documents pwsh/PowerShell sourcing as optional tooling from Microsoft’s feed.
catalog/snippets/workflows/test-pull-request.yml New pinned no-build gate stub that calls hub validate-task.yml plus required-check aggregator.
catalog/snippets/workflows/run-periodic-codegen-pull-request.yml New pinned scheduled codegen caller stub for run-codegen-pull-request-task.yml.
catalog/snippets/workflows/README.md Documents which caller stubs now have snippets post-2.0.352 and why others remain reference-only.
catalog/snippets/workflows/publish-release.yml New pinned publish-release caller stub with explicit permissions model and hub task pins.
.github/workflows/get-version-task.yml Drops IGNORE_GITHUB_REF and updates task semantics to match D3.1 branch-per-run versioning.
.github/workflows/build-release-task.yml Adds executable_asset_name input and forwards it to the hub executable default action.
.github/actions/build-executable-default/action.yml Derives release archive name from project stem (or explicit input), validates it, and uploads the derived artifact path.
.claude-plugin/fleet-skills/skills/python-codestyle/SKILL.md Moves detailed Python guidance into references/ to reduce default load size.
.claude-plugin/fleet-skills/skills/python-codestyle/references/testing.md New: Python testing conventions reference.
.claude-plugin/fleet-skills/skills/python-codestyle/references/profiles.md New: Full Python profile spec + adaptation axes reference.
.claude-plugin/fleet-skills/skills/python-codestyle/references/code-style.md New: Full Python code style reference.
.claude-plugin/fleet-skills/skills/git-commit-conventions/SKILL.md Condenses history-rewrite rule and points to extracted reference.
.claude-plugin/fleet-skills/skills/git-commit-conventions/references/history-rewrite.md New: Full history rewrite re-identification rule reference.
.claude-plugin/fleet-skills/skills/dotnet-codestyle/SKILL.md Condenses .NET guidance and points to extracted references.
.claude-plugin/fleet-skills/skills/dotnet-codestyle/references/testing.md New: .NET testing conventions reference.
.claude-plugin/fleet-skills/skills/dotnet-codestyle/references/project-config.md New: .NET project configuration reference.
.claude-plugin/fleet-skills/skills/dotnet-codestyle/references/conventions.md New: Full .NET coding conventions reference.
.claude-plugin/fleet-skills/.source-digest Updates plugin digest to reflect the regenerated skill tree content.
.agents/skills/python-codestyle/SKILL.md Mirrors the Python Skill progressive-disclosure refactor in the agent skills tree.
.agents/skills/python-codestyle/references/testing.md New: Python testing conventions reference (agent skills tree).
.agents/skills/python-codestyle/references/profiles.md New: Python profiles reference (agent skills tree).
.agents/skills/python-codestyle/references/code-style.md New: Python code style reference (agent skills tree).
.agents/skills/git-commit-conventions/SKILL.md Mirrors the condensed history-rewrite guidance in the agent skills tree.
.agents/skills/git-commit-conventions/references/history-rewrite.md New: History rewrite reference (agent skills tree).
.agents/skills/dotnet-codestyle/SKILL.md Mirrors the .NET Skill progressive-disclosure refactor in the agent skills tree.
.agents/skills/dotnet-codestyle/references/testing.md New: .NET testing conventions reference (agent skills tree).
.agents/skills/dotnet-codestyle/references/project-config.md New: .NET project configuration reference (agent skills tree).
.agents/skills/dotnet-codestyle/references/conventions.md New: .NET conventions reference (agent skills tree).

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 5d0fa7f into main Aug 17, 2026
8 checks passed
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.

Reconcile IGNORE_GITHUB_REF between get-version-task.yml and WORKFLOW.md D3.1

3 participants