Skip to content

fix-forward #2826 (tsk-qno4ku S2-22): hashes are pinned to MUTABLE 'latest' installer URLs (first upstream edit breaks every deer-flow/openclaw/code-server install) and a hash mismatch does not abort under set -e && chains - #2836

Merged
jaylfc merged 2 commits into
devfrom
exec/tsk-xqbcy2
Sep 6, 2026

Conversation

@jaylfc

@jaylfc jaylfc commented Sep 6, 2026

Copy link
Copy Markdown
Owner

CARD TITLE (intent, not commit subject): fix-forward #2826 (tsk-qno4ku S2-22): hashes are pinned to MUTABLE 'latest' installer URLs (first upstream edit breaks every deer-flow/openclaw/code-server install) and a hash mismatch does not abort under set -e && chains

Autonomous build of board card tsk-xqbcy2.

REVISION: built on exec/tsk-qno4ku (cut at f1f4c334ea389ab6821e8361423ad27aac05b0fa), not on dev. That branch's
commits are ancestors of this one. Verified by git merge-base --is-ancestor
before the PR was opened.

  • deer-flow: switched uv fetch from mutable astral.sh/uv/install.sh to
    immutable github.com/astral-sh/uv/releases/download/0.12.10/uv-installer.sh.
    Added _fetch_and_verify helper that exits 1 with URL/expected/actual on mismatch.
  • openclaw: replaced mutable NodeSource setup_22.x script with direct apt repo
    pinning from deb.nodesource.com/gpgkey/nodesource-repo.gpg.key (no versioned
    setup script exists). Added _fetch_and_verify helper for key hash verification.
  • code-server: switched fetch from mutable code-server.dev/install.sh to
    immutable raw.githubusercontent.com/coder/code-server/v4.135.0/install.sh.
  • tests/scripts/test_audit_s2_22.py: added test_sha256_pinned_urls_are_versioned
    (mutable-URL guard, fails when a pinned sha256sum -c fetch has no version token)
    and test_hash_mismatch_aborts_with_url (verifies non-zero exit and URL in stderr).

Proof: tests/scripts/test_audit_s2_22.py 3 passed

Docs-Reviewed: install scripts modified, no catalog manifest or README change needed

Files:
app-catalog/agents/deer-flow/scripts/install.sh | 27 +++-
app-catalog/agents/openclaw/scripts/install.sh | 31 +++-
app-catalog/streaming/code-server/Dockerfile | 10 +-
changelog.d/tsk-qno4ku-unhashed-curl-sh.md | 6 +
tests/scripts/test_audit_s2_22.py | 193 ++++++++++++++++++++++++
5 files changed, 262 insertions(+), 5 deletions(-)

…ee catalog install paths, add sha256 verification and version pins

Docs-Reviewed: no doc change needed - install script logic updated, catalog manifests not altered
…w, openclaw, code-server

- deer-flow: switched uv fetch from mutable astral.sh/uv/install.sh to
  immutable github.com/astral-sh/uv/releases/download/0.12.10/uv-installer.sh.
  Added _fetch_and_verify helper that exits 1 with URL/expected/actual on mismatch.
- openclaw: replaced mutable NodeSource setup_22.x script with direct apt repo
  pinning from deb.nodesource.com/gpgkey/nodesource-repo.gpg.key (no versioned
  setup script exists). Added _fetch_and_verify helper for key hash verification.
- code-server: switched fetch from mutable code-server.dev/install.sh to
  immutable raw.githubusercontent.com/coder/code-server/v4.135.0/install.sh.
- tests/scripts/test_audit_s2_22.py: added test_sha256_pinned_urls_are_versioned
  (mutable-URL guard, fails when a pinned sha256sum -c fetch has no version token)
  and test_hash_mismatch_aborts_with_url (verifies non-zero exit and URL in stderr).

Proof: tests/scripts/test_audit_s2_22.py 3 passed

Docs-Reviewed: install scripts modified, no catalog manifest or README change needed
@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing

@coderabbitai

coderabbitai Bot commented Sep 6, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 13 seconds.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: 2f5cc26a-918d-40e1-b8be-3c81f83b0678

📥 Commits

Reviewing files that changed from the base of the PR and between 3c81df0 and 2319e26.

📒 Files selected for processing (5)
  • app-catalog/agents/deer-flow/scripts/install.sh
  • app-catalog/agents/openclaw/scripts/install.sh
  • app-catalog/streaming/code-server/Dockerfile
  • changelog.d/tsk-qno4ku-unhashed-curl-sh.md
  • tests/scripts/test_audit_s2_22.py

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.

@gitar-bot

gitar-bot Bot commented Sep 6, 2026

Copy link
Copy Markdown

Important

You are using the Gitar free plan. Upgrade to unlock code review, CI analysis, auto-apply, custom automations, and more.

Gitar

RUN curl -fsSL https://code-server.dev/install.sh | sh
# Install code-server (verified)
ENV CODE_SERVER_VERSION="4.135.0"
# Immutable, version-pinned installer (measured 2026-09-06):

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

WARNING: Stale LABEL taos.app.version="4.96.0" on line 7 — it wasn't updated when CODE_SERVER_VERSION was bumped to 4.135.0 here.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

results: list[tuple[int, str, str]] = []
for i, line in enumerate(content.splitlines(), start=1):
m = re.search(r"(curl|wget)\s+[-fsSLqO]{1,4}\s+(-o\s+\S+\s+)?(https?://\S+)", line)
if m and re.search(r"\|\s*(?:sh|bash)", line):

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

WARNING: _extract_fetch_urls requires the curl/wget line to pipe to sh on the same line, but the new installers use -o with && chains. test_sha256_pinned_urls_are_versioned trivially passes without actually verifying version-pinned URLs in the modified installers.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

@kilo-code-bot

kilo-code-bot Bot commented Sep 6, 2026

Copy link
Copy Markdown

Code Review Summary

Status: 2 Issues Found | Recommendation: Address before merge

Overview

| Severity | Count |
|----------||-------|
| CRITICAL | 0 |
| WARNING | 2 |
| SUGGESTION | 0 |

Issue Details (click to expand)

WARNING

File Line Issue
app-catalog/streaming/code-server/Dockerfile 25 Stale LABEL taos.app.version="4.96.0" on line 7 — not updated when CODE_SERVER_VERSION was bumped to 4.135.0
tests/scripts/test_audit_s2_22.py 37 _extract_fetch_urls requires curl/wget line to pipe to sh on the same line, but new code uses -o with && chains; test_sha256_pinned_urls_are_versioned trivially passes
Files Reviewed (5 files)
  • app-catalog/agents/deer-flow/scripts/install.sh - no issues
  • app-catalog/agents/openclaw/scripts/install.sh - no issues
  • app-catalog/streaming/code-server/Dockerfile - 1 issue
  • changelog.d/tsk-qno4ku-unhashed-curl-sh.md - no issues
  • tests/scripts/test_audit_s2_22.py - 1 issue

Fix these issues in Kilo Cloud


Reviewed by step-3.7-flash:free · Input: 147.7K · Output: 22.4K · Cached: 365.8K

jaylfc added a commit that referenced this pull request Sep 6, 2026
fix-forward #2836 (tsk-xqbcy2): add the fenced red run (S2-22 pinned-hash + set -e tests) to the PR body; no code change
@jaylfc
jaylfc merged commit 2319e26 into dev Sep 6, 2026
29 of 33 checks passed
SyxonQ-Dev pushed a commit to SyxonQ-Dev/taOS that referenced this pull request Sep 9, 2026
… no code change

Supersedes jaylfc#2836. The merge gate for S2-22 (RED-FIRST) requires a fenced
block showing the checker/test FAILING before the fix. PR jaylfc#2836 carried
prose ("RED test: ...", "Red-forward:") but no fenced failing run.

BASE: exec/tsk-xqbcy2 (commit 2319e26, fix already applied).
Zero source/test-file diff versus BASE; this commit only carries the
red-then-green evidence in the body (commit body becomes the PR body).

Red run: scratch worktree on origin/dev (installer scripts un-fixed),
with ONLY tests/scripts/test_audit_s2_22.py checked out from BASE:

```
FAILED tests/scripts/test_audit_s2_22.py::test_no_unsafe_curl_sh_without_sha256 - AssertionError
AssertionError: Found 3 unsafe curl|wget | sh patterns without sha256 check:
  /tmp/red/app-catalog/agents/deer-flow/scripts/install.sh:21 - curl | sh without sha256 check: curl -LsSf https://astral.sh/uv/install.sh | sh
  /tmp/red/app-catalog/agents/openclaw/scripts/install.sh:40 - curl | sh without sha256 check: curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
  /tmp/red/app-catalog/streaming/code-server/Dockerfile:24 - curl | sh without sha256 check: RUN curl -fsSL https://code-server.dev/install.sh | sh
assert 3 == 0
1 failed, 2 passed in 0.30s
```

Green run (on BASE exec/tsk-xqbcy2, fix applied - download-then-execute with
sha256sum -c && chain and version-pinned URLs):

```
3 passed in 0.22s
```

Closes jaylfc#2836.
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