Skip to content

Harden template-loader error handling and reduce duplication - #50

Closed
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness
Closed

Harden template-loader error handling and reduce duplication#50
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness

Conversation

@zevorn

@zevornzevorn commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove spurious blank stderr line from load_template when template file is missing (was echo "" >&2 before the warning message, polluting stderr output)
  • Add awk exit code propagation in render_template — if the awk substitution engine fails, the error is now surfaced to stderr and the function returns non-zero instead of silently producing empty output
  • Extract _emit_fallback helper to eliminate duplicated fallback emission logic in load_and_render_safe (same 5-line pattern was repeated twice)
  • Guard append_template against appending empty content when the additional template is missing (previously appended an empty line unconditionally)
  • Extend validate_template_dir to check all 5 required subdirectories (block, codex, claude, plan, pr-loop) — previously only checked the first 3

All existing tests pass (43/43 template-loader tests, 104/104 template-reference checks).

Test plan

  • bash tests/test-template-loader.sh — all 43 tests pass
  • bash tests/test-template-references.sh — all 104 checks pass, 0 failures
  • Verify no behavioral regression in RLCR loop stop hook flow
  • Verify load_and_render_safe fallback still works correctly in validators

- Remove spurious blank stderr line from load_template on missing files
- Add awk exit code propagation in render_template to surface failures
- Extract _emit_fallback helper to deduplicate load_and_render_safe
- Prevent append_template from appending empty content on missing templates
- Extend validate_template_dir to check all required subdirs (plan, pr-loop)
- Bump version to 1.14.1
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
SihaoLiu added a commit that referenced this pull request Mar 29, 2026
…ation
- Remove spurious blank stderr line from load_template
- Add awk exit code propagation in render_template
- Extract _emit_fallback helper to eliminate duplicated fallback logic
- Guard append_template against appending empty content
- Extend validate_template_dir to check all 5 required subdirectories
@SihaoLiu

Copy link
Copy Markdown
Contributor

Merged into dev branch via local merge (commit 1862329). Template-loader hardening applied.

@SihaoLiuSihaoLiu mentioned this pull request Mar 29, 2026
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

@zevorn@SihaoLiu
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Harden template-loader error handling and reduce duplication by zevorn · Pull Request #50 · PolyArch/humanize · GitHub
Skip to content

Harden template-loader error handling and reduce duplication - #50

Closed
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness
Closed

Harden template-loader error handling and reduce duplication#50
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness

Conversation

@zevorn

@zevornzevorn commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove spurious blank stderr line from load_template when template file is missing (was echo "" >&2 before the warning message, polluting stderr output)
  • Add awk exit code propagation in render_template — if the awk substitution engine fails, the error is now surfaced to stderr and the function returns non-zero instead of silently producing empty output
  • Extract _emit_fallback helper to eliminate duplicated fallback emission logic in load_and_render_safe (same 5-line pattern was repeated twice)
  • Guard append_template against appending empty content when the additional template is missing (previously appended an empty line unconditionally)
  • Extend validate_template_dir to check all 5 required subdirectories (block, codex, claude, plan, pr-loop) — previously only checked the first 3

All existing tests pass (43/43 template-loader tests, 104/104 template-reference checks).

Test plan

  • bash tests/test-template-loader.sh — all 43 tests pass
  • bash tests/test-template-references.sh — all 104 checks pass, 0 failures
  • Verify no behavioral regression in RLCR loop stop hook flow
  • Verify load_and_render_safe fallback still works correctly in validators

- Remove spurious blank stderr line from load_template on missing files
- Add awk exit code propagation in render_template to surface failures
- Extract _emit_fallback helper to deduplicate load_and_render_safe
- Prevent append_template from appending empty content on missing templates
- Extend validate_template_dir to check all required subdirs (plan, pr-loop)
- Bump version to 1.14.1
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
SihaoLiu added a commit that referenced this pull request Mar 29, 2026
…ation
- Remove spurious blank stderr line from load_template
- Add awk exit code propagation in render_template
- Extract _emit_fallback helper to eliminate duplicated fallback logic
- Guard append_template against appending empty content
- Extend validate_template_dir to check all 5 required subdirectories
@SihaoLiu

Copy link
Copy Markdown
Contributor

Merged into dev branch via local merge (commit 1862329). Template-loader hardening applied.

@SihaoLiuSihaoLiu mentioned this pull request Mar 29, 2026
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

@zevorn@SihaoLiu
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Harden template-loader error handling and reduce duplication by zevorn · Pull Request #50 · PolyArch/humanize · GitHub
Skip to content

Harden template-loader error handling and reduce duplication - #50

Closed
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness
Closed

Harden template-loader error handling and reduce duplication#50
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness

Conversation

@zevorn

@zevornzevorn commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove spurious blank stderr line from load_template when template file is missing (was echo "" >&2 before the warning message, polluting stderr output)
  • Add awk exit code propagation in render_template — if the awk substitution engine fails, the error is now surfaced to stderr and the function returns non-zero instead of silently producing empty output
  • Extract _emit_fallback helper to eliminate duplicated fallback emission logic in load_and_render_safe (same 5-line pattern was repeated twice)
  • Guard append_template against appending empty content when the additional template is missing (previously appended an empty line unconditionally)
  • Extend validate_template_dir to check all 5 required subdirectories (block, codex, claude, plan, pr-loop) — previously only checked the first 3

All existing tests pass (43/43 template-loader tests, 104/104 template-reference checks).

Test plan

  • bash tests/test-template-loader.sh — all 43 tests pass
  • bash tests/test-template-references.sh — all 104 checks pass, 0 failures
  • Verify no behavioral regression in RLCR loop stop hook flow
  • Verify load_and_render_safe fallback still works correctly in validators

- Remove spurious blank stderr line from load_template on missing files
- Add awk exit code propagation in render_template to surface failures
- Extract _emit_fallback helper to deduplicate load_and_render_safe
- Prevent append_template from appending empty content on missing templates
- Extend validate_template_dir to check all required subdirs (plan, pr-loop)
- Bump version to 1.14.1
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
SihaoLiu added a commit that referenced this pull request Mar 29, 2026
…ation
- Remove spurious blank stderr line from load_template
- Add awk exit code propagation in render_template
- Extract _emit_fallback helper to eliminate duplicated fallback logic
- Guard append_template against appending empty content
- Extend validate_template_dir to check all 5 required subdirectories
@SihaoLiu

Copy link
Copy Markdown
Contributor

Merged into dev branch via local merge (commit 1862329). Template-loader hardening applied.

@SihaoLiuSihaoLiu mentioned this pull request Mar 29, 2026
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

@zevorn@SihaoLiu
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', '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('^' + ".*" + ' Harden template-loader error handling and reduce duplication by zevorn · Pull Request #50 · PolyArch/humanize · GitHub
Skip to content

Harden template-loader error handling and reduce duplication - #50

Closed
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness
Closed

Harden template-loader error handling and reduce duplication#50
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness

Conversation

@zevorn

@zevornzevorn commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove spurious blank stderr line from load_template when template file is missing (was echo "" >&2 before the warning message, polluting stderr output)
  • Add awk exit code propagation in render_template — if the awk substitution engine fails, the error is now surfaced to stderr and the function returns non-zero instead of silently producing empty output
  • Extract _emit_fallback helper to eliminate duplicated fallback emission logic in load_and_render_safe (same 5-line pattern was repeated twice)
  • Guard append_template against appending empty content when the additional template is missing (previously appended an empty line unconditionally)
  • Extend validate_template_dir to check all 5 required subdirectories (block, codex, claude, plan, pr-loop) — previously only checked the first 3

All existing tests pass (43/43 template-loader tests, 104/104 template-reference checks).

Test plan

  • bash tests/test-template-loader.sh — all 43 tests pass
  • bash tests/test-template-references.sh — all 104 checks pass, 0 failures
  • Verify no behavioral regression in RLCR loop stop hook flow
  • Verify load_and_render_safe fallback still works correctly in validators

- Remove spurious blank stderr line from load_template on missing files
- Add awk exit code propagation in render_template to surface failures
- Extract _emit_fallback helper to deduplicate load_and_render_safe
- Prevent append_template from appending empty content on missing templates
- Extend validate_template_dir to check all required subdirs (plan, pr-loop)
- Bump version to 1.14.1
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
SihaoLiu added a commit that referenced this pull request Mar 29, 2026
…ation
- Remove spurious blank stderr line from load_template
- Add awk exit code propagation in render_template
- Extract _emit_fallback helper to eliminate duplicated fallback logic
- Guard append_template against appending empty content
- Extend validate_template_dir to check all 5 required subdirectories
@SihaoLiu

Copy link
Copy Markdown
Contributor

Merged into dev branch via local merge (commit 1862329). Template-loader hardening applied.

@SihaoLiuSihaoLiu mentioned this pull request Mar 29, 2026
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

@zevorn@SihaoLiu
, '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" + ' Harden template-loader error handling and reduce duplication by zevorn · Pull Request #50 · PolyArch/humanize · GitHub
Skip to content

Harden template-loader error handling and reduce duplication - #50

Closed
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness
Closed

Harden template-loader error handling and reduce duplication#50
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness

Conversation

@zevorn

@zevornzevorn commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove spurious blank stderr line from load_template when template file is missing (was echo "" >&2 before the warning message, polluting stderr output)
  • Add awk exit code propagation in render_template — if the awk substitution engine fails, the error is now surfaced to stderr and the function returns non-zero instead of silently producing empty output
  • Extract _emit_fallback helper to eliminate duplicated fallback emission logic in load_and_render_safe (same 5-line pattern was repeated twice)
  • Guard append_template against appending empty content when the additional template is missing (previously appended an empty line unconditionally)
  • Extend validate_template_dir to check all 5 required subdirectories (block, codex, claude, plan, pr-loop) — previously only checked the first 3

All existing tests pass (43/43 template-loader tests, 104/104 template-reference checks).

Test plan

  • bash tests/test-template-loader.sh — all 43 tests pass
  • bash tests/test-template-references.sh — all 104 checks pass, 0 failures
  • Verify no behavioral regression in RLCR loop stop hook flow
  • Verify load_and_render_safe fallback still works correctly in validators

- Remove spurious blank stderr line from load_template on missing files
- Add awk exit code propagation in render_template to surface failures
- Extract _emit_fallback helper to deduplicate load_and_render_safe
- Prevent append_template from appending empty content on missing templates
- Extend validate_template_dir to check all required subdirs (plan, pr-loop)
- Bump version to 1.14.1
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
SihaoLiu added a commit that referenced this pull request Mar 29, 2026
…ation
- Remove spurious blank stderr line from load_template
- Add awk exit code propagation in render_template
- Extract _emit_fallback helper to eliminate duplicated fallback logic
- Guard append_template against appending empty content
- Extend validate_template_dir to check all 5 required subdirectories
@SihaoLiu

Copy link
Copy Markdown
Contributor

Merged into dev branch via local merge (commit 1862329). Template-loader hardening applied.

@SihaoLiuSihaoLiu mentioned this pull request Mar 29, 2026
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

@zevorn@SihaoLiu
, '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('^' + ".*" + ' Harden template-loader error handling and reduce duplication by zevorn · Pull Request #50 · PolyArch/humanize · GitHub
Skip to content

Harden template-loader error handling and reduce duplication - #50

Closed
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness
Closed

Harden template-loader error handling and reduce duplication#50
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness

Conversation

@zevorn

@zevornzevorn commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove spurious blank stderr line from load_template when template file is missing (was echo "" >&2 before the warning message, polluting stderr output)
  • Add awk exit code propagation in render_template — if the awk substitution engine fails, the error is now surfaced to stderr and the function returns non-zero instead of silently producing empty output
  • Extract _emit_fallback helper to eliminate duplicated fallback emission logic in load_and_render_safe (same 5-line pattern was repeated twice)
  • Guard append_template against appending empty content when the additional template is missing (previously appended an empty line unconditionally)
  • Extend validate_template_dir to check all 5 required subdirectories (block, codex, claude, plan, pr-loop) — previously only checked the first 3

All existing tests pass (43/43 template-loader tests, 104/104 template-reference checks).

Test plan

  • bash tests/test-template-loader.sh — all 43 tests pass
  • bash tests/test-template-references.sh — all 104 checks pass, 0 failures
  • Verify no behavioral regression in RLCR loop stop hook flow
  • Verify load_and_render_safe fallback still works correctly in validators

- Remove spurious blank stderr line from load_template on missing files
- Add awk exit code propagation in render_template to surface failures
- Extract _emit_fallback helper to deduplicate load_and_render_safe
- Prevent append_template from appending empty content on missing templates
- Extend validate_template_dir to check all required subdirs (plan, pr-loop)
- Bump version to 1.14.1
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
SihaoLiu added a commit that referenced this pull request Mar 29, 2026
…ation
- Remove spurious blank stderr line from load_template
- Add awk exit code propagation in render_template
- Extract _emit_fallback helper to eliminate duplicated fallback logic
- Guard append_template against appending empty content
- Extend validate_template_dir to check all 5 required subdirectories
@SihaoLiu

Copy link
Copy Markdown
Contributor

Merged into dev branch via local merge (commit 1862329). Template-loader hardening applied.

@SihaoLiuSihaoLiu mentioned this pull request Mar 29, 2026
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

@zevorn@SihaoLiu
, '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); } })(); })(); Harden template-loader error handling and reduce duplication by zevorn · Pull Request #50 · PolyArch/humanize · GitHub
Skip to content

Harden template-loader error handling and reduce duplication - #50

Closed
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness
Closed

Harden template-loader error handling and reduce duplication#50
zevorn wants to merge 1 commit into
PolyArch:mainfrom
zevorn:fix/template-loader-robustness

Conversation

@zevorn

@zevornzevorn commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Remove spurious blank stderr line from load_template when template file is missing (was echo "" >&2 before the warning message, polluting stderr output)
  • Add awk exit code propagation in render_template — if the awk substitution engine fails, the error is now surfaced to stderr and the function returns non-zero instead of silently producing empty output
  • Extract _emit_fallback helper to eliminate duplicated fallback emission logic in load_and_render_safe (same 5-line pattern was repeated twice)
  • Guard append_template against appending empty content when the additional template is missing (previously appended an empty line unconditionally)
  • Extend validate_template_dir to check all 5 required subdirectories (block, codex, claude, plan, pr-loop) — previously only checked the first 3

All existing tests pass (43/43 template-loader tests, 104/104 template-reference checks).

Test plan

  • bash tests/test-template-loader.sh — all 43 tests pass
  • bash tests/test-template-references.sh — all 104 checks pass, 0 failures
  • Verify no behavioral regression in RLCR loop stop hook flow
  • Verify load_and_render_safe fallback still works correctly in validators

- Remove spurious blank stderr line from load_template on missing files
- Add awk exit code propagation in render_template to surface failures
- Extract _emit_fallback helper to deduplicate load_and_render_safe
- Prevent append_template from appending empty content on missing templates
- Extend validate_template_dir to check all required subdirs (plan, pr-loop)
- Bump version to 1.14.1
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
SihaoLiu added a commit that referenced this pull request Mar 29, 2026
…ation
- Remove spurious blank stderr line from load_template
- Add awk exit code propagation in render_template
- Extract _emit_fallback helper to eliminate duplicated fallback logic
- Guard append_template against appending empty content
- Extend validate_template_dir to check all 5 required subdirectories
@SihaoLiu

Copy link
Copy Markdown
Contributor

Merged into dev branch via local merge (commit 1862329). Template-loader hardening applied.

@SihaoLiuSihaoLiu mentioned this pull request Mar 29, 2026
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

@zevorn@SihaoLiu