Skip to content

Spec questions from the PhotoCleaner conformance sweep (3 hub-side defects) #509

Description

@ptr727

Five spec questions surfaced by the PhotoCleaner conformance sweep of 2026-08-01, raised per AUDIT.md section 9 rather than resolved downstream. Three are hub-side defects that re-vendor fleet-wide, so each wants its own change.

Run stamp: audit run 2026-08-01T15:30:19Z | hub 6501479. The report is refreshed in #508, and PhotoCleaner PRs #26-#31 merged the convergence.

1. .github/copilot-instructions.md still describes the pre-split AGENTS.md

The carried Reviewing Carried Fleet Content section says:

Most of AGENTS.md is universal fleet law: every section that states a rule, as opposed to the two that describe this repository's own directory tree and devcontainer, is byte-locked ...

After the router split that is wrong in both halves. The rule sections live in GOVERNANCE.md, and it is GOVERNANCE.md that holds the two intent sections (Devcontainer, Repository Layout); AGENTS.md carries exactly two verbatim sections and no repo-specific ones.

This is carried at intent, so PhotoCleaner adapted the wording on the way down. Every other repo that carries the section inherits the stale description, and a reviewer following it looks for byte-locked rule text in the wrong file.

2. CODESTYLE.md contradicts .markdownlint-cli2.jsonc on MD033

CODESTYLE.md "Markdown and Spelling" item 1 says:

MD033 inline HTML stays enabled: HTML comments are permitted (markdownlint does not flag them), HTML elements are flagged, and anything with a native markdown equivalent uses the markdown.

The canonical config now sets "MD033": { "allowed_elements": ["details", "summary"] }, so two elements are not flagged. The prose was not swept when the config changed, which is the GOVERNANCE.md rule "when you change a behavior, search for prose that asserts the old one" applied to the hub's own files.

3. spec/readme-structure.md has no behavior for a private repository

shields.io cannot read a private repo, so every GitHub-sourced badge in Build Status and Releases renders broken. The spec states no behavior for that case, and section 2 reads as unconditional.

This is not a corner case: a repo is often private precisely while it is being made presentable, which is exactly when its README is written. PhotoCleaner is private now and goes public later, so its README carries Docker Hub shields only and picks up the GitHub ones at the visibility flip. Worth a sentence in the spec saying whether the GitHub-sourced shields are deferred or written-and-broken, so each repo does not decide separately.

4. The HISTORY.md mirror rule has no carried home

spec/readme-structure.md owns it and spec/audit.py enforces it, but that file is hub-only, so a downstream repo cannot point at the rule it is measured against. PhotoCleaner kept it as repo-local prose in CODESTYLE.md for want of a destination, which is duplication the fleet normally avoids.

Either promote it into a carried section, or state plainly that mechanical-only enforcement is the intent so downstream stops inventing a local copy.

5. WORKFLOW.md D2.2 "skipped on smoke" is ambiguous

D2.2 says the gate "is skipped on smoke". That names the validation, and scenario S1 confirms it: validate-release **skipped (smoke), succeeds**.

A Copilot review on PhotoCleaner#29 read it as the GitHub job status and proposed a job-level if: !inputs.smoke. That would have been a real regression: github-release has validate-release in its needs, and a skipped need skips the dependent, so the release job would have been coupled to smoke through a second path on top of the if: it already carries.

The canonical is right; the wording invites the misreading. Something like "the check exits early on smoke, and the job still reports success" would close it.

Not a spec question

A sixth item was raised with the PhotoCleaner maintainer and is answered: the repo is private deliberately and temporarily, going public once the conformance work settles, so the declared github-release channel becomes satisfiable at that flip rather than being wrong now. Recorded in the registry driftNotes in #508.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions