Bring the README and HISTORY up to the fleet structure - #30
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #30 +/- ##
========================================
Coverage 44.96% 44.96%
========================================
Files 25 25
Lines 3398 3398
Branches 259 259
========================================
Hits 1528 1528
Misses 1824 1824
Partials 46 46 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR standardizes the repository’s public-facing documentation by tightening the shared short description and reshaping README.md/HISTORY.md to match the expected fleet README/HISTORY structure.
Changes:
- Shorten and unify the intro line in both
README.mdandHISTORY.md. - Add required README sections (Build and Distribution, Table of Contents, Questions or Issues) and reorganize link definitions.
- Update
HISTORY.mdto include an initialVersion: 1.0release entry.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| README.md | Reworks README structure and link-definition layout; updates the canonical short description. |
| HISTORY.md | Mirrors the new short description and replaces the placeholder release-history text with a 1.0 entry. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (3)
README.md:630
- This heading ends with an extra
"character (**:"), which renders oddly in Markdown and looks like a typo.
**Run [immich-go][immich-go-link] to import photos into Immich**:"
README.md:604
- This heading ends with an extra
"character (**:"), which renders oddly in Markdown and looks like a typo.
This issue also appears on line 630 of the same file.
**Run [Immich CLI][immich-cli-link] to import photos into Immich**:"
HISTORY.md:3
- AGENTS.md specifies that README.md and HISTORY.md must share the exact same
# PhotoCleanertitle and one-line intro. README's title now includes<!-- omit from toc -->, but HISTORY's does not, so the titles no longer match exactly.
# PhotoCleaner
A .NET console application that prepares photos and videos for import into photo managers.
|
Answering the three collapsed findings from the review on README.md:604 and :630, stray trailing HISTORY.md:3, titles no longer match exactly. Declined, this one is correct as written. The finding also cites |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (1)
README.md:7
- The PR description says the short description is now canonical across surfaces, but the README still contains (and the code still emits) the older description text. In this README, the
$> PhotoCleaner --helpsnippet still shows "PhotoCleaner - Pre-process media files for photo management systems." (README.md:94-98), and the actual CLI description is still set to that string inPhotoCleaner/CommandLine.cs:48. The Docker image label also still uses "Pre-process media files for photo management systems" (Docker/Dockerfile:38). If the intent is to align the short description everywhere, those surfaces should be updated too (or the README should avoid presenting the--helpoutput as verbatim until the CLI text is updated).
A .NET console application that prepares photos and videos for import into photo managers.
## Build and Distribution <!-- omit from toc -->
- **Source Code**: [GitHub][photocleaner-link], holding the source, the issues, and the CI/CD pipelines.
|
The collapsed finding on the review of The PR did claim one canonical sentence across surfaces while three others still carried the old text. Found a fourth beyond the two you named:
All four now read the same sentence, so the Verified with the full post-change set rather than the build alone, since this touched C#: CSharpier, build (0 warnings, 0 errors), |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.
Suppressed comments (2)
Docker/Dockerfile:39
- The Docker image label description is missing the trailing period, so it no longer exactly matches the canonical short description used in README.md and PhotoCleaner/CommandLine.cs. Keeping these strings identical avoids subtle drift between help output, docs, and image metadata.
LABEL name="PhotoCleaner" \
version="${LABEL_VERSION}" \
description="A .NET console application that prepares photos and videos for import into photo managers" \
maintainer="ptr727"
README.md:566
- This heading still says "organize" even though the subcommand and surrounding examples use
import. Given the earlier rename fromorganize->import, this wording is likely to confuse readers into searching for anorganizecommand again.
**Run [PhotoCleaner][photocleaner-link] to organize new photos**:
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.
Suppressed comments (1)
HISTORY.md:3
- HISTORY.md is described (and repo conventions expect) as a mirror of the README header, but the README title includes
<!-- omit from toc -->while HISTORY's title does not. This makes the headers no longer identical between the two files.
# PhotoCleaner
A .NET console application that prepares photos and videos for import into photo managers.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.
Suppressed comments (6)
Docker/README.md:3
- The Docker README intro should match the canonical short description stated in the PR description ("A .NET console application...") to keep the documentation consistent across README/HISTORY/Docker docs.
An application that prepares photos and videos for import into photo managers.
Docker/Dockerfile:38
- The PR description calls out a single canonical short description ("A .NET console application...") shared across README/About/Docker Hub. This Docker image label currently uses a different sentence, so it won't stay consistent with the documented canonical string.
description="An application that prepares photos and videos for import into photo managers." \
README.md:3
- The PR description defines the canonical short description as "A .NET console application that prepares photos and videos for import into photo managers.", but the README intro currently omits ".NET console" and uses a different sentence. Update this line to match the stated canonical description so it stays consistent across surfaces (README/HISTORY/Docker/CLI).
An application that prepares photos and videos for import into photo managers.
README.md:97
- The help output snippet should match the canonical short description stated in the PR description (and the actual CLI string). Right now it repeats the non-canonical "An application..." sentence.
PhotoCleaner - An application that prepares photos and videos for import into photo managers.
PhotoCleaner/CommandLine.cs:48
- This CLI description string should match the canonical short description stated in the PR description ("A .NET console application...") so README help output, GitHub About, and Docker Hub short description can stay in sync.
"PhotoCleaner - An application that prepares photos and videos for import into photo managers."
HISTORY.md:3
- The PR description says HISTORY.md should mirror the README's canonical short description "A .NET console application...", but this line uses a different sentence. Align it to the canonical description.
An application that prepares photos and videos for import into photo managers.
|
All six collapsed findings on the review of Worth recording because the finding is correct in substance even though its direction is inverted: a PR description that names a canonical string becomes a seventh surface that string has to stay in sync with. The description now states the sentence once and tables the six code surfaces that carry it. Canonical sentence is now An application that prepares photos and videos for import into photo managers. (78 characters), identical across |
* Bring the README and HISTORY up to the fleet structure The audit reported the intro line at 150 characters against the 100-char cap, and the Docker Hub short description no longer matching it. The README was also missing the Build and Distribution block, the Table of Contents, and Questions or Issues. The intro is now one 90-character link-free sentence, which is the single canonical short description the README, the GitHub About panel, and the Docker Hub short description all carry. HISTORY.md mirrors the title and intro as the README's twin, and its Release History replaces the stale claim that no release has been published with the 1.0 entry. Build and Distribution lists the three channels this project ships, carrying Build Status, Releases, and Release Notes. Only the Docker Hub shields are included: this repository is private, so shields.io cannot read its GitHub release, build, or commit data and those badges would render broken. Raised with the hub rather than resolved here. Development Tooling is renamed Development Environment Setup to match the spec's slot, Questions or Issues is added before it, and Workflow Example moves ahead of both so the tail follows the section order. Link definitions are grouped under Shields, Repo, and External and alphabetized within each group. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Fix the organize command name and convert the inline links Copilot caught a Docker example invoking `organize`, which is not a subcommand: the CLI defines process, undo, import, index, and trash (PhotoCleaner/CommandLine.cs:55-59), and `import` is the one that takes --outpath and writes date-based subdirectories. Every copy-pasteable Docker example in the README was therefore broken. Swept the class rather than the cited line. All four `organize` invocations become `import`, and the stale "Preview what organize would do" comment above an `import` example is corrected. The remaining use of the word is the verb in prose, which is fine. All six inline URLs become reference links with definitions in the External group, per the GOVERNANCE.md documentation rule. The README carries no inline link outside the Table of Contents now. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Remove the stray quote from two Workflow Example headings Copilot's collapsed findings caught a trailing double-quote on the Immich CLI and immich-go step headings, left over from an earlier edit. Swept the six headings in that section; only those two carried it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Align the CLI, Docker label, and Docker Hub overview to the one sentence Copilot's collapsed finding was right that the PR claimed one canonical sentence across surfaces while three others still carried the old text: the root command description in CommandLine.cs, the Docker image description label, and the Docker/README.md overview. The README made that visible by quoting --help output verbatim, so the transcript was wrong the moment the intro changed. All four surfaces now read the same sentence, and the --help transcript matches what the binary prints. Verified with the full post-change set: CSharpier, build (0 warnings, 0 errors), dotnet format style --verify-no-changes, and dotnet test (324 passed, 0 failed). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Match the Docker label punctuation and reword the organize heading Two collapsed findings from the review on c276f86, both accepted. The Docker description label kept the file's existing no-trailing-period style, which left it one character off the sentence the other three surfaces carry. Exact match is the point, so it takes the period. The Workflow Example heading still read "to organize new photos" over an import example, which is what would send a reader looking for the organize command again. The remaining "organized" occurrences are deliberate: the --outpath, --tagpath, and --tags help text is a verbatim transcript that matches CommandLine.cs:355, :362, and :438 exactly, and /organized is a host directory name in the volume mounts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Shorten the canonical description to drop the .NET console framing Maintainer request: the one-line description says what the thing does for a reader, and the implementation language is not part of that. Now "An application that prepares photos and videos for import into photo managers", 78 characters. Applied to all six sites in one pass so the surfaces cannot drift: the README intro and its --help transcript, the HISTORY twin, the Docker Hub overview, the Docker image description label, and the root command description the binary prints. AGENTS.md keeps the fuller ".NET 10 console application" framing in its project intro, which is orientation for an agent rather than the canonical description, and the toolchain is the point there. Verified with the full post-change set: CSharpier, build (0 warnings, 0 errors), dotnet format style --verify-no-changes, dotnet test (324 passed, 0 failed), dotnet husky run. markdownlint, cspell, and editorconfig-checker all clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The README was also missing three sections
spec/readme-structure.mdrequires: Build and Distribution, Table of Contents, and Questions or Issues.The intro
One 78-character link-free sentence: An application that prepares photos and videos for import into photo managers.
That is the single canonical short description, carried by the README, the GitHub About panel, and the Docker Hub short description alike (
GOVERNANCE.md"Repository Details"). The implementation language is deliberately not in it: the line tells a reader what the thing does, and.NETis an implementation detail that belongs in Overview, alongside the three named systems (Lightroom, Immich, PhotoPrism) the cap forced out.It is applied to six sites in one pass so the surfaces cannot drift:
README.md:3--helptranscriptREADME.md:97HISTORY.md:3Docker/README.md:3Docker/Dockerfile:38PhotoCleaner/CommandLine.cs:48The last two matter because the README quotes
--helpverbatim, so the transcript was wrong the moment the intro changed.AGENTS.mdkeeps the fuller ".NET 10 console application" framing in its project intro, which is orientation for an agent rather than the canonical description.HISTORY.mdmirrors the title and intro as the README's twin, and its Release History replaces the stale "formal release notes have not been published yet" with the 1.0 entry, since 1.0.9 shipped on 2026-07-23.Structure
<!-- omit from toc -->on the headings above it.<!-- Shields -->,<!-- Repo -->,<!-- External -->, alphabetized within each group.Two bugs found in review
organizesubcommand exists.CommandLine.cs:55-59registersprocess,undo,import,index,trash. Every copy-pasteable Docker example invokedorganize, so all four were broken;importis the one declaring--outpath. Fixed, along with a stale comment and a heading that would have sent a reader looking for the command again.Shields, and why only Docker Hub
The repository is private for now, so shields.io cannot read its GitHub release, build, or commit data and every GitHub-sourced badge would render broken. The pre-existing License shield was already broken for that reason and is kept rather than silently dropped. The repo goes public once the conformance work settles, and the GitHub build and release shields land at that flip. Recorded in the registry
driftNotesand raised as a spec question in ProjectTemplate#508, since a repo is often private precisely while its README is being written.Verification
markdownlint-cli2over**/*.md: 0 issues in 9 files.cspelloverREADME.md+HISTORY.md(the CI file list): 0 issues.editorconfig-checkerexits 0; files ASCII-clean and CRLF.dotnet format style --verify-no-changes,dotnet test(324 passed, 0 failed),dotnet husky run.Part of the conformance sweep against the hub baseline (
audit run 2026-08-01T15:30:19Z | hub 6501479).