') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Sync Carried Fleet Skills by ptr727 · Pull Request #69 · ptr727/PhotoCleaner · GitHub
Skip to content

Sync Carried Fleet Skills - #69

Merged
ptr727 merged 3 commits into
developfrom
fix/sync-worktree-hook-skill
Aug 18, 2026
Merged

Sync Carried Fleet Skills#69
ptr727 merged 3 commits into
developfrom
fix/sync-worktree-hook-skill

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Summary

  • carry the released fleet skill tree from ProjectTemplate b74811b
  • add fresh-worktree setup for Husky.Net and Python pre-commit hooks
  • include the current Python verification and PR-review instructions from the same owned tree

Why

A fresh PhotoCleaner worktree contains .husky/pre-commit but not the generated .husky/_/husky.sh runtime. The carried worktree skill now restores and installs Husky.Net before the first commit.

This propagates ptr727/ProjectTemplate#815 and completes #61.

Verification

  • dotnet tool restore
  • dotnet husky install
  • dotnet csharpier format --log-level=debug .
  • dotnet build
  • dotnet format style --verify-no-changes --severity=info --verbosity=detailed
  • dotnet test (368 passed, 5 skipped)
  • dotnet husky run
  • Markdown, spelling, Actions, editorconfig, and prose gates
  • manifest carry check against hub b74811b
  • feature-branch audit confirms the skill-tree drift is cleared

CopilotAI lite review requested due to automatic review settings August 18, 2026 19:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Syncs the carried fleet Skill tree from the ProjectTemplate hub into PhotoCleaner, updating task/worktree setup guidance, Python tooling guidance, and PR review-loop guidance so contributor workflows (hooks, verification, review gating) stay consistent across the fleet.

Changes:

  • Extend repo-worktree Skill guidance to include immediate Git hook preparation for new worktrees (Husky.Net and Python pre-commit).
  • Update python-codestyle Skill guidance to emphasize reading repo-specific verification commands (OPERATIONS.md) before selecting Python tooling/profile.
  • Update pr-review-conduct Skill guidance to treat PR opening as part of the review loop and to incorporate pr_review.py status/wait steps.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

FileDescription
.github/skills/repo-worktree/SKILL.mdAdds “Preparing Git Hooks” guidance and updates the Skill description to include hook setup during worktree preparation.
.github/skills/python-codestyle/SKILL.mdRefines trigger/usage language and adds explicit direction to consult OPERATIONS.md before choosing Python commands/profile.
.github/skills/pr-review-conduct/SKILL.mdExpands the expected PR review loop (including PR opening) and references status/wait mechanics via pr_review.py.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread.github/skills/pr-review-conduct/SKILL.md
CopilotAI review requested due to automatic review settings August 18, 2026 20:10

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

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

Suppressed comments (1)

.github/skills/pr-review-conduct/SKILL.md:75

  • Steps 4 and 5 both instruct the reader to wait for review activity, which makes the numbered procedure ambiguous (it reads like two separate wait steps). Combine them into a single step and renumber the remainder so the loop stays unambiguous.
4. Run a bounded `scripts/pr_review.py wait` in a background process and read its terminal output.
5. Wait for review activity on that head. A completed review raising **no findings** is a valid
terminal outcome, so don't re-trigger it or read silence as a missing review. A review whose
body says it declined to review is the one exception, and it is terminal the other way:
nothing follows it, and re-requesting the same head just repeats the decline.

CopilotAI review requested due to automatic review settings August 18, 2026 20:23
@ptr727

Copy link
Copy Markdown
OwnerAuthor

Suppressed findings (1) from https://github.com/ptr727/PhotoCleaner/pull/69#pullrequestreview-4965348211\n\n> .github/skills/pr-review-conduct/SKILL.md:75 - Steps 4 and 5 both instruct the reader to wait for review activity, making the numbered procedure ambiguous.\n\nFixed in 734fa68. The canonical skill now combines the wait command and its terminal-outcome guidance into one step and renumbers the remainder. ProjectTemplate released the correction on main at 4596659, and this branch was refreshed from that revision.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

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

@ptr727

Copy link
Copy Markdown
OwnerAuthor

Suppressed findings (1) from #69 (review)

.github/skills/pr-review-conduct/SKILL.md:75 - Steps 4 and 5 both instruct the reader to wait for review activity, making the numbered procedure ambiguous.

Fixed in 734fa68. The canonical skill combines the wait command and its terminal-outcome guidance into one step and renumbers the remainder. ProjectTemplate released the correction on main at 4596659, and this branch was refreshed from that revision.

@ptr727
ptr727 merged commit b1dc758 into developAug 18, 2026
18 checks passed
@ptr727ptr727 mentioned this pull request Aug 18, 2026
@ptr727
ptr727 deleted the fix/sync-worktree-hook-skill branch August 18, 2026 20:37
Sign up for freeto 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.

2 participants

@ptr727