Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Refine line-ending policy, default Python to CRLF, add runbook notes - #229

Merged
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules
Jul 5, 2026
Merged

Refine line-ending policy, default Python to CRLF, add runbook notes#229
ptr727 merged 3 commits into
developfrom
feature/line-ending-and-runbook-rules

Conversation

@ptr727

@ptr727ptr727 commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Encodes the validated, non-conflicting slice of retrospective #228, plus a line-ending policy refinement.

  • Line-ending policy (§1). Reconcile the AGENTS.md Line Endings section with the merged [*] end_of_line = crlf default + LF-exceptions policy (it previously prescribed the old full-per-extension form and warned against the minimal form). Default .py to CRLF - Python's universal newlines accept CRLF, so it imports/runs/compiles identically on every OS, and .py is commonly edited on Windows where a blanket LF pin only caused LF<->CRLF save-churn. Pin LF by path for a .py executed directly via its shebang (spec/validate.py, the CI validation entry point), treating it like a shell script; drop the blanket *.py text eol=lf. This revises Retrospective: cross-platform, dev-tooling & agent-workflow learnings to encode as rules #228 §1's blanket [*.py] = lf.
  • EOL-audit method (§1). Byte-scan (CRLF-only / LF-only / mixed) rather than trusting file or naive git ls-files --eol parsing; scope audits to git ls-files (+ --others --exclude-standard); multi-line / new-file edits into a CRLF file must emit CRLF; .code-workspace is JSONC.
  • gh / Copilot runbook (§5). Add a "PR Edits and Merge-State Gotchas" subsection: gh pr edit is broken by the Projects-classic deprecation (use updatePullRequest / REST PATCH); main/develop use rulesets, not classic protection (BLOCKED is usually unresolved threads); the push -> head-SHA read race; Copilot findings can be factually wrong.
  • Pre-commit (§8). Add a Git rule to check the maintainer's uncommitted working-tree edits before committing.

First of several scoped slices (per #228's own sprawl warning). Decided/deferred items follow in separate PRs: the cross-platform decision procedure (§0), versioning gotchas (§4), markdown hygiene + the cspell en-US fix (§7), the Python HA-integration profile (§3), and the editor/scripts catalog snippets (§2).

🤖 Generated with Claude Code

Update the AGENTS.md Line Endings section to describe the `[*] end_of_line = crlf` default with LF exceptions - matching the merged editorconfig - instead of prescribing the old full-per-extension form, and add an EOL-audit note (byte-scan over `file`/`git ls-files --eol`, scope to `git ls-files`, multi-line edits emit CRLF, .code-workspace is JSONC). Add a Git rule to check the maintainer's uncommitted edits before committing.
Add copilot-instructions runbook gotchas: `gh pr edit` is broken (Projects-classic deprecation) so edit via updatePullRequest/PATCH; main/develop use rulesets not classic protection; the push -> head-SHA read race; and that Copilot findings can be factually wrong. Encodes retrospective #228 learnings (line endings, gh/Copilot mechanics, pre-commit checks).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 5, 2026 01:59

CopilotAI 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

This PR updates the repository governance docs to (1) align the documented line-ending policy and auditing guidance with the current .editorconfig/.gitattributes shape, and (2) add operational runbook notes about PR editing and merge-state interpretation in the GitHub CLI/Copilot workflow.

Changes:

  • Add a Git rule to check for maintainer-owned uncommitted working-tree edits before committing.
  • Reconcile and expand the Line Endings section, including an EOL-audit approach and JSONC note for .code-workspace.
  • Add PR-runbook "gotchas" about gh pr edit, rulesets vs classic protection, head-SHA read races, and verifying Copilot findings.

Reviewed changes

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

FileDescription
AGENTS.mdUpdates commit workflow guidance and reconciles/extends the documented line-ending policy and auditing procedure.
.github/copilot-instructions.mdAdds a runbook subsection capturing PR-edit and merge-state troubleshooting gotchas.

Comment threadAGENTS.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Comment thread.github/copilot-instructions.md Outdated
Classify EOL audits as CRLF-only / LF-only / mixed (flag mixed, not lump into CRLF); use an explicit body-file name in the REST PATCH example; and correct the merge-state note (BLOCKED is a mergeStateStatus value, distinct from the mergeable field's MERGEABLE/CONFLICTING).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

CopilotAI 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

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

Vanilla .py now follows the [*] = crlf default: Python's universal newlines accept CRLF, it compiles/imports/runs identically, and .py is commonly edited on Windows - a blanket LF pin just caused LF<->CRLF save-churn there. Pin LF only for a .py executed directly via its shebang, by path - spec/validate.py, the CI validation entry point - in both .editorconfig and .gitattributes, and drop the blanket *.py LF pin. Updates the AGENTS.md line-ending summary; revises #228 s1's blanket [*.py]=lf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
@ptr727ptr727 changed the title Reconcile line-ending docs and add PR-runbook gotchasRefine line-ending policy, default Python to CRLF, add runbook notesJul 5, 2026
@ptr727
ptr727 requested a review from CopilotJuly 5, 2026 02:20

CopilotAI 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

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

@ptr727
ptr727 merged commit b6cca1c into developJul 5, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/line-ending-and-runbook-rules branch July 5, 2026 02:45
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