Skip to content

fix(tests): terminate find -exec and pass {} — the placeholder step was a no-op - #48

Merged
hyperpolymath merged 3 commits into
mainfrom
fix/find-exec-terminator
Sep 4, 2026
Merged

hyperpolymath merged 3 commits into
mainfrom
fix/find-exec-terminator

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

tests/e2e/template_instantiation_test.sh ran find … -exec bash -c '…' _ "\$file", which has two defects on one line:

  1. No ; or + terminator — the file does not parse (SC2067).
  2. "\$file" where {} belongs\$file is assigned only inside the -exec body, so in the outer scope it is unset. \$1 arrived empty, file="", and every grep/sed operated on an empty path.

The consequence is worse than a lint error. The placeholder-replacement step silently did nothing, then logged "All placeholder tokens replaced". A test whose entire purpose is to prove instantiation worked was passing without replacing a single token — a plausible cause of estate repos shipping with literal {{project}} still in their sources.

Corrected to ' _ {} \; so find passes each matched path.

Found by an estate-wide sweep of 5,111 scripts across 375 repos: this identical stale copy exists in 30 repositories. rsr-template-repo's own copy is already correct and restructured (371 lines vs the 268 here), so these are stale duplicates that never picked up the upstream fix.

…as a no-op

tests/e2e/template_instantiation_test.sh ran:

    find ... -exec bash -c '
        file="$1"
        ... grep/sed over $file ...
    ' _ "$file"

Two defects in that one line:

  1. No ';' or '+' terminator, so the file does not parse (SC2067).
  2. "$file" is passed where {} belongs. $file is assigned ONLY inside the
     -exec body, so in the outer scope it is UNSET — $1 arrived empty, file=""
     and every grep/sed operated on an empty path.

⚠ The consequence is worse than a lint error: the placeholder-replacement step
SILENTLY DID NOTHING, then logged "All placeholder tokens replaced". A test
whose whole purpose is to prove instantiation worked was passing without
replacing a single token. That is a plausible cause of estate repos shipping
with literal {{project}} tokens still in their sources.

Corrected to "' _ {} \;" so find passes each matched path.

Found by an estate-wide shellcheck sweep of 5,111 scripts across 375 repos:
this identical stale copy exists in 30 repositories. rsr-template-repo's own
copy is already correct and restructured (371 lines vs the 268 here), so these
are stale duplicates that never picked up the upstream fix.
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 331076ee-2094-4916-a6b4-f8cdf001ca85

📥 Commits

Reviewing files that changed from the base of the PR and between dc7ab65 and 62b0df2.

📒 Files selected for processing (1)
  • tests/e2e/template_instantiation_test.sh

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
🧰 Additional context used
📓 Path-based instructions (1)
SPDX: `PMPL-1.0-or-later` on all new files.

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • tests/e2e/template_instantiation_test.sh
🔇 Additional comments (1)
tests/e2e/template_instantiation_test.sh (1)

115-116: LGTM!

Also applies to: 142-142


📝 Walkthrough

Summary by CodeRabbit

  • Bug Fixes
    • Fixed template instantiation tests so placeholder replacement correctly processes each discovered file.
    • Improved reliability of automated template generation checks.

Walkthrough

The end-to-end template instantiation test now exports its configuration variables and passes each file found by find to the inline replacement script.

Changes

Template instantiation test

Layer / File(s) Summary
Provide replacement inputs
tests/e2e/template_instantiation_test.sh
The test exports configuration variables for the subshell. The find -exec command passes each matched file as $1 to the inline bash -c script.

Estimated code review effort: 2 (Simple) | ~5 minutes

Merge Risk: ⚪ Minimal · up to 62b0d

The change corrects the test’s file-passing command so placeholder replacement operates on matched files; no actionable merge-blocking risk remains beyond normal checks.

Poem

A rabbit checks the shell’s bright trail
Exported values now prevail
Each found file arrives in place
Placeholders change with steady grace
The template test completes its race

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains the defect, impact, correction, and discovery context. However, it does not follow the repository template and omits the required Summary, Changes, RSR Quality Checklist, Test… Restructure the description using the repository template. Add the Summary and Changes sections, complete the applicable RSR Quality Checklist items, and document the tests or validation performed. Add Screenshots or terminal output if appl…
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main fix: terminating find -exec, passing {}, and correcting the no-op placeholder step.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description explains the defect, impact, correction, and discovery context. However, it does not follow the repository template and omits the required Summary, Changes, RSR Quality Checklist, Testing, and Screenshots sections.

Resolution

Restructure the description using the repository template. Add the Summary and Changes sections, complete the applicable RSR Quality Checklist items, and document the tests or validation performed. Add Screenshots or terminal output if applicable.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 26, 2026
@gitar-bot

gitar-bot Bot commented Aug 26, 2026

Copy link
Copy Markdown

Gitar is working

Gitar

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

@codacy-production codacy-production Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull Request Overview

While this PR addresses the syntax errors that previously made the 'find' command a no-op, the fix is incomplete. The subshell script currently attempts to use an undefined variable '$file' instead of the positional parameter '$1' passed by the '{}' placeholder. This ensures that the 'sed' commands still fail to execute on the intended files. Additionally, the script continues to log success unconditionally, which masks potential execution failures in the test suite.

About this PR

  • The test script logs 'All placeholder tokens replaced' unconditionally. If the 'find' command fails to match files or the subshell encounters an error, the test will still report success. Error handling or a check on the number of files processed should be added to prevent false positives in CI.

Test suggestions

  • Verify that the replacement logic inside the 'find -exec' block correctly modifies files with placeholder tokens.
  • Verify that the test script fails if the 'find' command fails to locate files or if the replacement logic fails.
Prompt proposal for missing tests
Consider implementing these tests if applicable:
1. Verify that the replacement logic inside the 'find -exec' block correctly modifies files with placeholder tokens.
2. Verify that the test script fails if the 'find' command fails to locate files or if the replacement logic fails.
Low confidence findings
  • Consider adding a specific unit or integration test case that validates the replacement logic to prevent future regressions where the test silently skips file modifications.

TIP Improve review quality by adding custom instructions
TIP How was this review? Give us feedback

fi
done
' _ "$file"
' _ {} \;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔴 HIGH RISK

The filename from 'find' is passed as $1 to the subshell via '{}', but the script uses '$file'. Update the subshell script to use '$1' or assign 'file="$1"' at the start of the block to ensure the sed command processes the correct files.

@hyperpolymath
hyperpolymath enabled auto-merge (squash) August 28, 2026 07:48
@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 35 issues detected

Severity Count
🔴 Critical 6
🟠 High 18
🟡 Medium 11

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Issue in label-triage.yml",
    "type": "missing_timeout_minutes",
    "file": "label-triage.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in labels.yml",
    "type": "missing_timeout_minutes",
    "file": "labels.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in push-email-notify.yml",
    "type": "missing_timeout_minutes",
    "file": "push-email-notify.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "6 workflow(s) with tag-pinned (not SHA-pinned) actions in cafescripto",
    "type": "DependencyPinning",
    "file": "/home/runner/work/cafescripto/cafescripto",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Pin GitHub Actions and Docker base images by SHA hash.",
    "scorecard_check": "Pinned-Dependencies"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/workflow_audit/missing_timeout_minutes -- Hypatia workflow_audit: missing_timeout_minutes -- 1 day(s) old",
    "type": "CSA001",
    "file": "labels.yml",
    "action": "review",
    "rule_module": "code_scanning_alerts",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/workflow_audit/missing_timeout_minutes -- Hypatia workflow_audit: missing_timeout_minutes -- 1 day(s) old",
    "type": "CSA001",
    "file": "label-triage.yml",
    "action": "review",
    "rule_module": "code_scanning_alerts",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 1 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/PLAYBOOK.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 1 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/NEUROSYM.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 1 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/AGENTIC.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 1 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/ECOSYSTEM.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 35 issues detected

Severity Count
🔴 Critical 6
🟠 High 18
🟡 Medium 11

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Issue in label-triage.yml",
    "type": "missing_timeout_minutes",
    "file": "label-triage.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in labels.yml",
    "type": "missing_timeout_minutes",
    "file": "labels.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in push-email-notify.yml",
    "type": "missing_timeout_minutes",
    "file": "push-email-notify.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "6 workflow(s) with tag-pinned (not SHA-pinned) actions in cafescripto",
    "type": "DependencyPinning",
    "file": "/home/runner/work/cafescripto/cafescripto",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Pin GitHub Actions and Docker base images by SHA hash.",
    "scorecard_check": "Pinned-Dependencies"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/workflow_audit/missing_timeout_minutes -- Hypatia workflow_audit: missing_timeout_minutes -- 2 day(s) old",
    "type": "CSA001",
    "file": "labels.yml",
    "action": "review",
    "rule_module": "code_scanning_alerts",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/workflow_audit/missing_timeout_minutes -- Hypatia workflow_audit: missing_timeout_minutes -- 2 day(s) old",
    "type": "CSA001",
    "file": "label-triage.yml",
    "action": "review",
    "rule_module": "code_scanning_alerts",
    "severity": "medium"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 3 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/PLAYBOOK.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 3 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/NEUROSYM.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 3 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/AGENTIC.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  },
  {
    "reason": "Code scanning (Hypatia): hypatia/structural_drift/SD004 -- Hypatia structural_drift: SD004 -- 3 day(s) old",
    "type": "CSA001",
    "file": ".machine_readable/6a2/ECOSYSTEM.a2ml",
    "action": "update",
    "rule_module": "code_scanning_alerts",
    "severity": "high"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath
hyperpolymath merged commit a86d960 into main Sep 4, 2026
22 of 24 checks passed
@hyperpolymath
hyperpolymath deleted the fix/find-exec-terminator branch September 4, 2026 09:18
Sign up for free to 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.

1 participant