Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
b6d790d
fix: generate and preserve variant J README badges
CompleteDotTech Oct 30, 2026
e93ce68
fix: refresh owned variant J badge rows after metadata changes
CompleteDotTech Oct 30, 2026
e3e1d15
fix: retain profile badges through legacy upgrades and bootstrap
CompleteDotTech Oct 30, 2026
56c135d
fix: migrate inherited template badges and count local badge images
CompleteDotTech Oct 30, 2026
c07796e
fix: migrate legacy profile badge formats across metadata changes
CompleteDotTech Oct 30, 2026
51b3e70
fix: count rendered Markdown reference badge images
CompleteDotTech Oct 30, 2026
1911343
fix: parse valid HTML and nested Markdown badge images
CompleteDotTech Oct 30, 2026
1792e3f
fix: preserve unmarked license claims when metadata is unknown
CompleteDotTech Oct 30, 2026
f0a7909
fix: migrate inherited badges after template body edits
CompleteDotTech Oct 30, 2026
d4133bf
fix: preserve image syntax context during README validation
CompleteDotTech Oct 30, 2026
376abaa
Merge origin/main into fix/badges-variant-j
CompleteDotTech Oct 31, 2026
4695a5f
fix: recognize personal-profile CI badges in legacy migration
CompleteDotTech Oct 31, 2026
94cd2ef
fix: keep Markdown alt backticks and angle-bracket shield URLs in REA…
CompleteDotTech Oct 31, 2026
b5a7f79
fix: restore LF line endings in readme.py (no semantic change)
CompleteDotTech Oct 31, 2026
d646ac1
fix: keep README lint offsets stable across comments; case-insensitiv…
CompleteDotTech Oct 31, 2026
cb65567
fix: keep README lint source offsets when HTML appears inside Markdow…
CompleteDotTech Oct 31, 2026
378b5cf
fix: replace HTMLParser tokenizer with strict CommonMark tags; mask c…
CompleteDotTech Oct 31, 2026
5fd324a
fix: re-find code spans after HTML tags/comments, multiline reference…
CompleteDotTech Oct 31, 2026
5d245a3
fix(mdcode): backslash-escaped backtick cannot open an inline code span
CompleteDotTech Oct 31, 2026
4145cc1
test: cover escaped and real backticks around angle-bracketed README …
CompleteDotTech Oct 31, 2026
0889e95
Merge Haiku mdcode escaped-backtick fix
CompleteDotTech Oct 31, 2026
5cccce5
Merge Haiku escaped-backtick regression test
CompleteDotTech Oct 31, 2026
53759ac
readmelint: parity-aware code, escaped HTML openers, definition title…
CompleteDotTech Oct 31, 2026
a8e691e
mdcode: find inline code spans by backslash parity
CompleteDotTech Oct 31, 2026
305c0d7
test: cover backslash parity, escaped comments, definition titles and…
CompleteDotTech Oct 31, 2026
8758880
Merge Haiku mdcode backslash-parity fix
CompleteDotTech Oct 31, 2026
9b6842e
Merge Haiku readmelint parity fix
CompleteDotTech Oct 31, 2026
85c6ac8
Fix image destinations with backticks and shortcut fallback in readme…
CompleteDotTech Oct 31, 2026
f956e42
mdcode: allow inline code spans across soft line breaks
CompleteDotTech Oct 31, 2026
13fb1de
Merge Haiku mdcode multiline code span fix
CompleteDotTech Oct 31, 2026
1974ddd
Merge Haiku readmelint image destination fix
CompleteDotTech Oct 31, 2026
408b3aa
test: cover multiline code spans, backtick image destinations and sho…
CompleteDotTech Oct 31, 2026
e6cf528
fix(readmelint): ignore reference definitions inside inline code and …
CompleteDotTech Oct 31, 2026
b0a481e
Merge Haiku readmelint reference-definition and palette dedupe fix
CompleteDotTech Oct 31, 2026
735a361
mdcode: decide block boundaries before inline code spans; keep link d…
CompleteDotTech Oct 31, 2026
dec3b31
readmelint: read badge colours from complete parsed destinations
CompleteDotTech Oct 31, 2026
ff0fdaf
mdcode: container-aware quoted fences, bisected inline-code scan, cac…
Oct 31, 2026
465e318
Merge Haiku mdcode quote-fence and span-cache work (ff0fdaf)
CompleteDotTech Oct 31, 2026
0330f4d
Merge Haiku readmelint structural Shields colour (dec3b31)
CompleteDotTech Oct 31, 2026
c0fe0df
mdcode/readmelint: quote-contained fences, structural Shields colour,…
CompleteDotTech Oct 31, 2026
46cd88f
mdcode: list-item fences are containers; continuation-line offsets
CompleteDotTech Oct 31, 2026
7683198
Merge Haiku mdcode list-item fences and continuation_starts (46cd88f)
CompleteDotTech Oct 31, 2026
757ffc3
readmelint: definitions need a block start, literal badge delimiters,…
CompleteDotTech Oct 31, 2026
48eec72
readmelint: parse escaped badge dashes and scope comment masking
Oct 31, 2026
33a4cdc
Merge Haiku readmelint escaped badge dashes and comment masking (48ee…
CompleteDotTech Oct 31, 2026
418b175
mdcode: quoted fences strip only their own quote depth; regression te…
CompleteDotTech Oct 31, 2026
a7546f8
tests: regression cases for backticks inside resolved reference label…
CompleteDotTech Oct 31, 2026
3aefb18
readmelint: resolved full-reference labels are literal, not inline code
CompleteDotTech Oct 31, 2026
4b39d46
Merge Haiku readmelint reference-label regression tests (a7546f8)
CompleteDotTech Oct 31, 2026
cdd134a
Merge Haiku readmelint resolved reference-label masking (3aefb18)
CompleteDotTech Oct 31, 2026
aed30ff
tests: give the second reference-label body its own tree (#7)
CompleteDotTech Oct 31, 2026
08542f0
tests: cover reference definitions inside containers (#7)
Oct 31, 2026
12bd429
Merge Haiku container-definition regression tests (08542f0)
CompleteDotTech Oct 31, 2026
b85e170
readmelint: read reference definitions inside quote and list containe…
CompleteDotTech Oct 31, 2026
182c37e
test(mdcode): regression tests for backticks inside raw HTML blocks (#7)
CompleteDotTech Oct 31, 2026
2a20e35
Merge Haiku raw HTML block regression tests (182c37e)
CompleteDotTech Oct 31, 2026
011b20a
mdcode: track raw HTML block extent so literal backticks stay literal…
CompleteDotTech Oct 31, 2026
a136b1b
Merge origin/main (85f12d8) into fix/badges-variant-j
CompleteDotTech Oct 31, 2026
8e3329b
mdcode: expose raw HTML block spans from _layout
CompleteDotTech Nov 1, 2026
2a36ccb
readmelint: raw HTML blocks are literal for definitions, escapes and …
CompleteDotTech Nov 1, 2026
ffe55e0
Merge Haiku mdcode html_block_spans (8e3329b)
CompleteDotTech Nov 1, 2026
c407c85
Merge Haiku readmelint raw HTML block handling (2a36ccb)
CompleteDotTech Nov 1, 2026
d59c631
test: raw HTML block definitions, escapes and html_block_spans extent…
CompleteDotTech Nov 1, 2026
98fac0d
fix: end list-item fence at a dedented quote opened by a non-indented…
CompleteDotTech Nov 1, 2026
9d651ce
test: dedented quote after a list-item fence (#7)
CompleteDotTech Nov 1, 2026
5ec352f
Merge Haiku mdcode dedented quote ends list-item fence (98fac0d)
CompleteDotTech Nov 1, 2026
2efdcb6
Merge Haiku dedented quote tests (9d651ce)
CompleteDotTech Nov 1, 2026
b7b8409
mdcode: dedented line ends an item raw HTML block; lint regressions f…
CompleteDotTech Nov 1, 2026
d11c692
readmelint: Markdown image syntax inside raw HTML blocks is literal t…
CompleteDotTech Nov 1, 2026
663f031
test(badges): use valid GFM mixed fixtures and pin the adjacent-mix c…
CompleteDotTech Nov 1, 2026
a358707
Merge Haiku valid mixed badge fixture tests (663f031) (#7)
CompleteDotTech Nov 1, 2026
4ef02c4
test(readmelint): add regression cases for backslash comments and lin…
CompleteDotTech Nov 1, 2026
8adf5ff
fix(readmelint): honour literal backslashes in raw HTML comments and …
CompleteDotTech Nov 1, 2026
e24293a
Merge Haiku readmelint comment/destination fix (8adf5ff) (#7)
CompleteDotTech Nov 1, 2026
3e85537
Merge Haiku readmelint regression tests (4ef02c4) (#7)
CompleteDotTech Nov 1, 2026
fb88f70
test(readmelint): add round-11 active link opener regressions
Nov 1, 2026
7cd6a88
fix(readmelint): match only active link openers in one linear pass
CompleteDotTech Nov 1, 2026
8025dee
Merge Haiku readmelint active link opener fix (7cd6a88) (#7)
CompleteDotTech Nov 1, 2026
4f32c0a
Merge Haiku readmelint opener regression tests (fb88f70) (#7)
CompleteDotTech Nov 1, 2026
3924fac
test: add active link opener block-boundary regressions
CompleteDotTech Nov 1, 2026
0ab7405
fix(readmelint): reset link-opener state at block boundaries (#7)
CompleteDotTech Nov 1, 2026
9fe4395
Merge Haiku readmelint block-boundary opener reset (0ab7405) (#7)
CompleteDotTech Nov 1, 2026
a8688bf
Merge Haiku readmelint block-boundary regressions (3924fac) (#7)
CompleteDotTech Nov 1, 2026
2d3a866
test(readmelint): cover ordered-list and thematic-break opener bounda…
CompleteDotTech Nov 1, 2026
0d945fa
test(readmelint): add raw HTML block opener and nested link regressio…
CompleteDotTech Nov 1, 2026
194cb8f
fix(readmelint): raw HTML blocks are inert boundaries; completed link…
CompleteDotTech Nov 1, 2026
af204ee
Merge Haiku readmelint raw-HTML opener and nested-link fix (194cb8f) …
CompleteDotTech Nov 1, 2026
e90d748
Merge Haiku readmelint raw-HTML opener and nested-link regressions (0…
CompleteDotTech Nov 1, 2026
a91c49c
readmelint: reference-style links deactivate earlier link openers
CompleteDotTech Nov 1, 2026
af95f8e
test: add round-2 opener invariant regressions for readmelint
CompleteDotTech Nov 1, 2026
05aa22f
Merge Haiku readmelint reference-link opener fix (a91c49c) (#7)
CompleteDotTech Nov 1, 2026
daf8930
Merge Haiku round-2 opener invariant regressions (af95f8e) (#7)
CompleteDotTech Nov 1, 2026
0795db9
test(readmelint): resolve reference-link xfail, pin nine GFM-rendered…
CompleteDotTech Nov 1, 2026
77004e6
Merge origin/main into fix/badges-variant-j
CompleteDotTech Nov 1, 2026
92961c5
Keep list-item container state so fences in list continuations stay i…
CompleteDotTech Nov 1, 2026
6ff9faf
readmelint: bound destination parsing and reset openers at setext und…
Nov 1, 2026
76a3bf6
Merge Haiku round-4 mdcode list-fence container state (92961c5) (#7)
CompleteDotTech Nov 1, 2026
47d741d
Merge Haiku round-4 readmelint destination bound and setext reset (6f…
CompleteDotTech Nov 1, 2026
4970f48
test(#7): pin list-continuation fences, setext boundaries and bounded…
CompleteDotTech Nov 1, 2026
b3fb66c
Merge remote-tracking branch 'origin/main' into fix/badges-variant-j
CompleteDotTech Nov 1, 2026
6dcc3b5
fix(#7): an orphan reference junction is no reference label, so its b…
CompleteDotTech Nov 1, 2026
c868e46
test(#7): add consecutive reference control to orphan junction cases
CompleteDotTech Nov 1, 2026
743d390
fix(#7): read a resolved reference label past inline code
CompleteDotTech Nov 1, 2026
558d3c9
Merge Haiku round-2 readmelint resolved-label opener fix (743d390) (#7)
CompleteDotTech Nov 1, 2026
a314190
Merge Haiku round-2 consecutive reference control test (c868e46) (#7)
CompleteDotTech Nov 1, 2026
bcbbb03
Merge origin/main into issue-7
CompleteDotTech Nov 1, 2026
130c150
test(readme): add distinct-label and three-same-label consecutive ref…
CompleteDotTech Nov 1, 2026
585191c
Merge Haiku round-2 distinct/triple consecutive reference controls (1…
CompleteDotTech Nov 1, 2026
9ab4347
fix(readme): reject unbalanced bare definitions and make definitions …
CompleteDotTech Nov 1, 2026
cf74f51
Merge Haiku round-3 balanced bare definitions and inert definition op…
CompleteDotTech Nov 1, 2026
587dd58
test(readme): cover inert definitions and balanced bare destinations;…
CompleteDotTech Nov 1, 2026
4845010
test(readme): cover balanced parenthesised image destination as missi…
Nov 1, 2026
8783e0e
Merge Haiku round-2 valid_balanced_reference control (4845010) (#7)
CompleteDotTech Nov 1, 2026
62e40dc
Reject unescaped opening bracket in reference label
CompleteDotTech Nov 1, 2026
432f5e4
mdcode: keep list containers across quotes and raw HTML in items (#7)
CompleteDotTech Nov 1, 2026
1b961eb
test(readme): regression cases for invalid labels, item HTML and quot…
CompleteDotTech Nov 1, 2026
d1a7982
Merge Haiku round-3 mdcode container handling (432f5e4) (#7)
CompleteDotTech Nov 1, 2026
a6089a7
Merge Haiku round-3 reference label bracket rule (62e40dc) (#7)
CompleteDotTech Nov 1, 2026
f46b598
docs: document bracket labels and list/quote container handling in RE…
CompleteDotTech Nov 1, 2026
3d942e0
fix(readme): digest generated badge rows with badge_sha preserving le…
CompleteDotTech Nov 1, 2026
46be40e
fix(readme-lint): treat link titles as literal and respect HTML attri…
Nov 1, 2026
1ea070a
Merge Haiku round-4 readmelint link-literal and definition fix (46be4…
CompleteDotTech Nov 1, 2026
2a755dc
Merge Haiku round-4 readme badge_sha digest (3d942e0) (#7)
CompleteDotTech Nov 1, 2026
24086a7
test(readme): link-title, comment-in-tag and badge digest regressions…
CompleteDotTech Nov 1, 2026
e6d882d
test(readme): tab-indented badge digest ownership and untouched-row r…
CompleteDotTech Nov 1, 2026
469073b
Merge Haiku round-5 tab-indent and untouched-row digest tests (e6d882…
CompleteDotTech Nov 1, 2026
75cb59a
docs(changelog): note badge digest ownership regression coverage (#7)
CompleteDotTech Nov 1, 2026
2cf18b9
fix(readme): keep indented and edited badge rows authored
CompleteDotTech Nov 1, 2026
39afd90
fix(readmelint): container definitions, link-title comments and bound…
CompleteDotTech Nov 1, 2026
91d2bd6
Merge Haiku round-6 readme template indent (2cf18b9) (#7)
CompleteDotTech Nov 1, 2026
6b3184b
Merge Haiku round-6 readmelint boundaries (39afd90) (#7)
CompleteDotTech Nov 1, 2026
f0b1099
test(readme): round-6 template-indent, list-continuation, link-title …
CompleteDotTech Nov 1, 2026
e0d9745
Merge origin/main into issue-7 branch
CompleteDotTech Nov 1, 2026
8467050
test: cover 75c case 4 fake badges beside a real type image
CompleteDotTech Nov 1, 2026
1ce0224
Merge Haiku round-2 fake-badge control (8467050) (#7)
CompleteDotTech Nov 1, 2026
0a8cf21
test(readme): commit remaining 75c controls (paragraph-split local im…
CompleteDotTech Nov 1, 2026
402dd95
test(readme): add label-split shortcut fallback and unresolved-alt co…
Nov 1, 2026
f7746de
Merge Haiku round-3 label-shortcut controls (402dd95) (#7)
CompleteDotTech Nov 1, 2026
e4c9fcc
Use whitespace-preserving badge digests for migration replaces
CompleteDotTech Nov 1, 2026
0e34b76
fix(readmelint): keep inline titles inside a paragraph and consume li…
CompleteDotTech Nov 1, 2026
20ee345
Merge Haiku round-4 readme digest fix (e4c9fcc) (#7)
CompleteDotTech Nov 1, 2026
c72f199
Merge Haiku round-4 readmelint fix (0e34b76) (#7)
CompleteDotTech Nov 1, 2026
c5c2e88
test+docs(readme): round-4 regressions for badge digests, paragraph-b…
CompleteDotTech Nov 1, 2026
641b0e1
fix(readmelint): inline HTML comments cannot span paragraph breaks
CompleteDotTech Nov 1, 2026
d73ec53
test(readme): align orphan-opener tests with saved GFM output (#7)
CompleteDotTech Nov 1, 2026
69a7367
Merge Haiku round-5 readmelint fix (641b0e1) (#7)
CompleteDotTech Nov 1, 2026
c9c2b9f
Merge Haiku round-5 readmelint tests (d73ec53) (#7)
CompleteDotTech Nov 1, 2026
a4f5cb7
docs(readme): inline HTML comments close within their paragraph (#7)
CompleteDotTech Nov 1, 2026
26c4933
Merge origin/main into fix/badges-variant-j (#7)
CompleteDotTech Nov 1, 2026
6272f0d
test: add readmelint regressions for heading/list title boundaries, m…
CompleteDotTech Nov 1, 2026
aab1934
Merge Haiku round-6 readmelint tests (6272f0d) (#7)
CompleteDotTech Nov 1, 2026
0af2a07
fix(readmelint): link titles end at block boundaries, multiline defin…
CompleteDotTech Nov 1, 2026
fdb8b09
docs: block-bounded link titles, multiline definition labels and tab …
CompleteDotTech Nov 1, 2026
1204767
test(readmelint): parenthesized-title paren and ordered-marker interr…
CompleteDotTech Nov 1, 2026
af47cc9
Merge Haiku round-5 readmelint tests (1204767) (#7)
CompleteDotTech Nov 1, 2026
7d85785
fix(readmelint): parenthesized titles reject unescaped '(', ordered m…
CompleteDotTech Nov 1, 2026
f9d6358
docs: parenthesized-title parens and ordered-marker paragraph interru…
CompleteDotTech Nov 1, 2026
e8a3e22
Merge origin/main (2243010) into fix/badges-variant-j (#7)
CompleteDotTech Nov 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,17 @@ All notable changes to `github-showcase-skill` are recorded here. Versions follo

### Fixed

- Variant J READMEs generate the GitHub-profile type badge from standard data and the known license in the brand palette. Digest-verified generated badge rows refresh with metadata and badge output mode changes; the previous generator's remote and local row formats migrate independently of current metadata. Edited and custom authored blocks remain protected by the shrink guard, including unmarked license claims when current license metadata is unavailable. The inherited template badge is replaced even after its body or marker changes, and R7 counts local, reference-style and nested-alt Markdown images plus HTML images with unquoted or case-insensitive attributes. Missing licenses remain explicit instead of being invented.
- README image validation retains angle-delimited Markdown destinations and literal backticks in HTML attributes, while excluding Markdown code spans and fences; Markdown image alt text keeps literal backticks, and palette checks read `img.shields.io` badge URLs written as `![x](<...>)` without the closing angle bracket.
- README lint admits a reference definition only with a balanced bare destination (unescaped parentheses must pair; escaped ones do not count) and treats live definitions as inert when scanning link openers, so a malformed definition or a backtick in a definition can no longer hide a rendered image or satisfy the R7 badge count.
- README lint rejects an unescaped opening bracket in a reference-definition label (the line is then ordinary Markdown, so its image is checked; an escaped bracket stays an inert definition), recognises raw HTML indented into a list item after removing the item's content column (literal backticks cannot hide its image, and terminators are found after the indent), and keeps list items inside block quotes so a fence opened on a quoted item's continuation line ends where the line leaves the item. Regressions cover each failing case with its control.
- Raw HTML blocks (CommonMark types 1-7, including inside quotes and list items) are literal for inline-code detection: a backtick inside one never opens a code span, so the block's real `<img>` stays visible to R7, while Markdown after the block's end condition still pairs backticks.
- README lint treats the destination and title of a resolved inline link as literal text (an image-looking title is neither counted as a badge nor validated, while a linked image in the link text still is) and reads a comment opener inside a complete HTML tag as attribute text, so it can no longer blank a live reference definition. The generated-badge digest (`badge_sha`) preserves Markdown-significant leading and trailing spaces and normalizes only line endings and the marker's separator newlines, so an indented generated row becomes authored and survives header refresh and upgrade; CRLF-converted untouched blocks still count as generated. Template-body hashing is unchanged.
- Variant J template recognition normalizes only line endings and separator newlines (it no longer strips spaces and tabs), so an indented, tab-prefixed or trailing-space copy of the inherited type row inside the badges markers stays authored and is preserved by header refresh and upgrade without a `replaces=` digest, while the exact, CRLF-terminated and newline-padded template (remote and local SVG) is still refreshed.
- README lint reads a reference definition on a list-item continuation line (including nested items and quote containers) as a definition and still treats a four-space indented definition with no open item as code, so its missing image is reported; a comment opener inside a resolved inline link title or destination no longer blanks later definitions; and a reference image whose alt text or label crosses a paragraph boundary is no longer accepted or counted as a header badge.
- A committed regression covers badge digest ownership for tab and 4-space indentation, untouched-row refresh and CRLF normalization.
- The `replaces=` digest a Variant J migration records is the whitespace-preserving badge digest, matched the same way by the shrink guard, so an authored indented badge block (four leading spaces are an indented code block) is no longer exempted because its stripped text equals a migrated unindented row. `--write` keeps that block or refuses with `readme-shrink`; the template-body digest is unchanged (#7).
- README lint ends an inline link destination or title at a paragraph boundary: a blank line before the destination, around the title or before `)` makes the link invalid, so `[Docs](https://example.test "unfinished` + blank line + `![Shot](...)` + blank line + `")` leaves Shot as a rendered image whose missing file and off-palette badge colour are still reported, while a title with a single newline stays a link title. The definition prepass keeps a stack of link openers and each `](` consumes one, so a completed link's opener cannot back an orphan destination. An inline HTML comment opened mid-line is a comment only if its `-->` closes in the same paragraph, so an orphan `](x "<!--")` followed by a blank line leaves a literal opener and no longer hides a later definition (both header badges still count) or a local image (its missing file is still reported), while a comment opening at the start of an HTML block may span blank lines. Link titles also end at block boundaries (a heading, list item or fence), so `[Docs](https://example.test "unfinished` + newline + `## Usage` + newline + `![Shot](docs/images/missing.png)` leaves Shot rendered and checked while soft line breaks stay inside the title; reference definition labels may span a soft line break (`[lic` + newline + `ense]: ...` resolves `![License][lic ense]`, a blank line does not); and a tab that crosses a list item's content column keeps its residual indentation, so a tab plus two spaces under `- ` is indented code and no longer a live definition (#7).
- Custom transparent icon art (`--icon`, `showcase.yml` `icon`, `assets/icon.png`), including PNG mode P with transparency and RGBA, is fitted by its alpha bounds in the icon box in the `iconbox` compositor, so transparent margins no longer shrink it. The raw and normalized PNG are unchanged; anything under `assets/brand` is bundled artwork protected by its resolved path, not by the selection route, so `--icon` or `showcase.yml` `icon` pointing at `logo-dark.png` or `logo-dark-full.png` is no longer cropped (2400x1198 and 1200x599 keep their sizes); golden plate geometry, opaque or full-bleed icons, pixel-art sizing and fully blank transparency are unchanged. With `icon_pixel_art` set, alpha fit never applies, including an unrecognized native grid, which keeps the retained image size and placement (#130; reuses the #126 normalizer, no new normalizer).
- `readme --bootstrap --write` no longer regenerates a marked footer that holds authored content. When the edited-template upgrade is refused by the never-drop-a-line check and the marked footer carries a partner or foreign image, the command now exits with a check failure (`readme-shrink`) and leaves `README.md` unchanged instead of falling back to a header refresh that rewrote the footer; a plain old footer copy still takes the fallback. The same refusal now applies in every bootstrap state (pristine and unmarked as well as edited), checked before any write, so a pristine or unmarked template can no longer silently replace a partner or foreign footer image.
- Fork (G) and backup (H) READMEs migrate an unmarked trailing footer whose logo is a configured own-site historical source (`footer.legacy_logo_urls` or `docs/images/logo.svg`) to the single current footer; partner, foreign and look-alike images stay authored and are reported as no allowance.
Expand All @@ -49,6 +60,7 @@ All notable changes to `github-showcase-skill` are recorded here. Versions follo
- `content social` renders the personal-profile capstone and backup repositories wherever R10 and the `adopt` upload job include them; it previously exempted them, so the planned upload had no image. Where R10 leaves them out (the archive org, an archived capture) they stay exempt.
- Label job plans include a per-repository `labels:OWNER/REPO` group for writer reconciliation. Explicit orchestrator groups are preserved.
- `adopt` withholds jobs and change records for an archived capture, with instructions to re-capture inside the approved unarchive/polish/re-archive cycle. Security jobs are emitted only for active eligible repositories.
- README lint rejects an unescaped opening parenthesis inside a parenthesized link title (`[Docs](https://example.test (see ![Shot](docs/images/missing.png)))` is not a link, so Shot renders and its missing file is reported; backslash-escaped parentheses stay a valid title) and applies the paragraph-interruption rule to ordered-list markers in multiline image alt text and labels: only `1.` interrupts (a sibling item of an enclosing list still does), so a `2.` continuation line no longer drops a Variant J header badge. Regressions cover each case with its control (#7).

## 1.0.0 — 2026-10-26

Expand Down
4 changes: 2 additions & 2 deletions SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Run every command **from inside the target repository's checkout**, with the ski
| 3 | `topics`, `labels --plan` | Proposals only. Add `--records FILE` to emit change records, `--gh` to print the exact `gh` commands. |
| 4 | Apply the approved description and topics on GitHub (the writer), or write them into `meta.json` | Before any art: the banner subtitle, the card and the README tagline come from the description, so rendering first breaks R2 (tagline equals description) the moment the writer applies the new one. |
| 5 | `banner`, then `card` (and `content social`) | `art-fail` (exit 3) writes nothing. `needs-input` (exit 4) names the missing fact, including fewer than two fact chips (`needs-input:banner-chips`; add `chips:` to `.github/showcase.yml` or pass `--key-chip`/`--chip`). |
| 6 | `readme`, then `readme --write` | Dry run prints a unified diff first. `readme-shrink` (exit 1) writes nothing. |
| 6 | `readme`, then `readme --write` | Dry run prints a unified diff first. `readme-shrink` (exit 1) writes nothing. Variant J generates a GitHub-profile type badge and a license badge when the license is known; a whitespace-preserving content digest (also used for the migration `replaces=` identity) distinguishes generated rows that refresh from authored badge blocks that remain for linting. Template recognition normalizes only line endings and separator newlines, so an indented, tab-prefixed or trailing-space copy of the inherited type row is authored and is never replaced. README lint reads link titles to the end of their block (a heading, list item or fence ends one; a soft line break does not), accepts reference definition labels across a soft line break, and keeps the residual columns of a tab that crosses a list content column (four make code, not a definition). A parenthesized link title that holds an unescaped `(` is no title (the link is invalid, so an image inside it renders and is checked; escaped parentheses stay valid), and an ordered-list marker other than `1.` does not interrupt a multiline image alt or label outside a list (a sibling item of an enclosing list still does). |
| 7 | `footer --check README.md`, `lint all` | Every applicable check passes; `incomplete` is allowed for logged `needs-input` omissions. |
| 8 | `doctor --header` | One coverage row. `done` only when every applicable cell is `pass`, `warn`, `incomplete` or `n/a`, and the banner has two to four chips. |
| 9 | `contact-sheet` | A human (or an independent verifier) views the set on both GitHub page colours before rollout. Pass PNGs: `card --png`, `org-tile --png` previews, or install the optional `resvg_py` (`requirements-preview.txt`) so SVG inputs (the intro's static frame) render too; otherwise an SVG input exits 2. |
Expand Down Expand Up @@ -251,7 +251,7 @@ content sidebar --facts FILE [--packages FILE]... [--current FILE] [--repo OWNER
| `intro` | Renders the profile intro (animated only for the personal profile and T1 flagship orgs; `.still` reduced-motion frame). | `--out` |
| `footer` | Prints the decision 18 footer using the published masters in this skill's `assets/brand/`, between `showcase:footer` markers, or checks that the README ends with it; `--check --online` also HEADs both raw logo URLs and fails (`fail:offline`) unless both return 200 (the Phase 4.0 hard gate). `--org OWNER` answers `exempt`, `exempt:footer` or `hold` for an org outside the footer's scope; for the watching org, `--check` still reads the README (its `.github` gets the footer, and `--org` cannot tell it from a fork). | stdout |
| `readme` | Scaffolds, upgrades or refreshes the header marker blocks; never drops a line (multiset check). `--bootstrap` fills a template body only while its marker's sha256 still matches (a person's edit makes the block theirs). | `README.md` with `--write`; `CONTRIBUTING.md` with `--bootstrap` |
| `lint` | SVG rules, README rules (R7 plus decisions 13 and 18) and banner PNG checks; `public-leak` checks any public file the run writes against the estate's private set (private slugs and names under every login of the owner, members-only pins, internal notes from the org rows, the registry's top-level notes and judge_changes and the profile's internal keys; OPS-03), reading the private registry and `--meta-dir` only; `prose` runs the CQ-17 checks on text the run writes (§1.2 brand strings, no emoji, no placeholders, the §4.1 formula for descriptions and taglines, typos when the optional `codespell` is installed; `--preserved` text only warns). | nothing |
| `lint` | SVG rules, README rules (R7 plus decisions 13 and 18; the destination and title of an inline link are literal text, never an image, and a comment opener inside a complete HTML tag is text) and banner PNG checks; `public-leak` checks any public file the run writes against the estate's private set (private slugs and names under every login of the owner, members-only pins, internal notes from the org rows, the registry's top-level notes and judge_changes and the profile's internal keys; OPS-03), reading the private registry and `--meta-dir` only; `prose` runs the CQ-17 checks on text the run writes (§1.2 brand strings, no emoji, no placeholders, the §4.1 formula for descriptions and taglines, typos when the optional `codespell` is installed; `--preserved` text only warns). | nothing |
| `contact-sheet` | Lays outputs out the way GitHub shows them, on `#0d1117` and `#ffffff` (proofing surfaces, not asset variants). `--org ORG --cross-surface` is the G4 gate: the org avatar at 32 px, a hero banner, a repo card, the social preview and the org banner on one labelled sheet; a missing surface is logged `needs-input:cross-surface:<surface>` (result `incomplete`). | `PATH.on-github-dark.png`, `PATH.on-github-light.png` |
| `doctor` | Prints the definition-of-done row: `R1`–`R11`, `banner`, `icon`, `card`, `footer`, `done`. No network. `--estate` classifies every repository in `--meta-dir` that `registry/estate.yaml` does not list with `decisions/POLICY.md` (`keep`, `move`, `archive`, `delete`, `merge`, `rename`, `rename-default-branch`; never acted on) and diffs the template-managed files of template-born checkouts against the current template (bump PRs are proposals). | `--out` (merges its own entries into `NEW_PROPOSALS.yaml`; others stay) |
| `new` | Plans a repository from the template: the `gh repo create OWNER/NAME --template CompleteTech-LLC/completetech-repo-template --private` writer job, then `adopt` on it (naming N1–N4 and the §5.4 type are checked first; the watching org, placeholder orgs and refused owners exit 2). | `--records`, `--jobs` |
Expand Down
Loading
Loading