Skip to content

Fix the retired models, a requirements file that would not install, and add notebook CI - #55

Merged
NirDiamant merged 4 commits into
mainfrom
fix/2026-10-31-audit
Oct 30, 2026
Merged

NirDiamant merged 4 commits into
mainfrom
fix/2026-10-31-audit

Conversation

@NirDiamant

@NirDiamant NirDiamant commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

What was broken

  • Two notebooks failed on their first model call. cot-prompting (the most-visited notebook) and ethical-prompt-engineering used gpt-3.5-turbo, which OpenAI shut down on 2026-10-23.
  • The other 20 had until 2027-01-14. They used gpt-4o or gpt-4o-mini, which shut down that day.
  • requirements.txt could not be installed on macOS or Linux. It pinned pywin32==307, which ships Windows wheels only, so pip install -r requirements.txt stopped with "No matching distribution". On current LangChain (1.x), 21 of the 22 notebooks also failed at import.

What this changes

  • Models (22 notebooks). Each notebook names its model once, as MODEL in its first code cell. gpt-3.5-turbo and gpt-4o-mini became gpt-5.4-mini. gpt-4o became gpt-5.4 in the two places that used it: prompt-optimization-techniques and the logic-puzzle cell of cot-prompting. Two notebooks whose prose said "GPT-4" now name the real model.
  • Temperature, where the lesson depends on it. few-shot-learning (0), prompt-templates-variables-jinja2 (0) and self-consistency (0.7, the temperature it originally ran at) pass reasoning_effort="none". GPT-5.x models accept a temperature only with that setting, and LangChain drops the temperature without a warning if it is missing. cot-prompting also turns hidden reasoning off, so the only reasoning is the step-by-step the prompt asks for. The other 18 notebooks never set a temperature.
  • Imports. langchain.prompts became langchain_core.prompts. ConversationChain, ConversationBufferMemory, RegexParser and load_summarize_chain now come from langchain_classic. An unused LLMChain import was dropped from 2 notebooks.
  • One bug from before this PR. prompt-security-and-safety stopped at cell 9, because its own sanitizer rejected the example input and raised an uncaught ValueError. The call now uses the same try/except as the cell before it, and the saved traceback is replaced with the output this code produces.
  • requirements.txt. It went from 95 pinned lines to the 12 packages the notebooks import, each as a range from the tested version up to the next major. Dependabot now proposes a change only when a release falls outside that range.
  • CI. .github/workflows/notebook-smoke.yml compiles every notebook and .py file on each push and pull request, with no keys and no execution. .gitignore ignored all *.yml, which would have kept the workflow out, so .github/ is now exempt.
  • README. The footer, renamed "More from DiamantAI", adds one line for the other 4 flagship repos and one for the newsletter, YouTube, Discord, website and courses. These links go through the README's existing click tracker, except Discord, which the tracker's allowlist does not include. Getting Started now shows the install and API-key steps. AGENTS.md notes the MODEL convention and the CI.

Model choice: two options I did not take

  • gpt-4.1 / gpt-4.1-mini for the temperature lessons. OpenAI's deprecations page lists both for shutdown on 2027-01-14, the same day as gpt-4o, so they would buy no time. I checked that gpt-5.4-mini with reasoning_effort="none" accepts temperature: 4 calls at 0 gave 1 distinct answer, and 4 calls at 1.2 gave 4.
  • gpt-6-luna, which OpenAI lists as the replacement for gpt-4o and gpt-4o-mini. It costs less ($0.10 / $0.50 per 1M tokens, against $0.75 / $4.50), but I kept gpt-5.4-mini to match GenAI_Agents ci: check the Python inside %%capture-style cells #58-64. Switching is one line per notebook. Note that it rejects temperature=0 unless reasoning_effort="none" is set, which these notebooks already pass where temperature matters.

How it was verified

  • Clean install: a fresh Python 3.11 venv built from the new requirements.txt installs, and pip check passes.
  • Every notebook ran: all 22 notebooks ran top to bottom with nbclient against the real OpenAI API, about 220 calls, roughly $0.38 including probes. The test harness answered the input() prompts in evaluating-prompt-effectiveness. Every changed call pattern was exercised, including ConversationChain, RegexParser, map-reduce summarization and the raw OpenAI client.
  • Settings reached the API: logged request bodies show the temperature arrived where it was set (0, 0, 0.7), and every call used 0 reasoning tokens.
  • No Gemini or Anthropic code in this repo, so none was run.
  • CI passes on this branch.
  • Saved outputs are kept from the original runs, since they are the lesson. The one exception is the prompt-security cell above.

For you to decide

  • cot-prompting's contrast is weaker when re-run. The saved outputs show gpt-3.5-turbo getting the water-tank problem wrong without CoT. Current models asked to "answer concisely" still show their working and get it right, so a reader who re-runs the notebook sees two correct answers. In a probe, gpt-5.4-mini and gpt-5.4 both got the average-speed problem wrong when asked for the number only. Restoring the contrast means changing the lesson's prompt, so I left it alone.
  • PR Related Projects: add an archive of production system prompts #43 (a human contributor adding a third-party prompt archive to Related Projects) is untouched and does not overlap these lines. No open PR by you or Claude touches these files.
  • Sponsors: CodeRabbit and Qodo, both known to be paying, are unchanged. images/ also has iGPT logo files that nothing references. Their status is unknown, so I left them in place.
  • Book CTAs: the one book card (this repo's own book) stays after the intro, and launch-banner-099 is untouched. RAG remains the footer cross-sell.
  • Dependabot: the 17 Dependabot PRs that bumped pins in the old file are closed as superseded.

🤖 Generated with Claude Code


PR Summary by Qodo

Restore notebook compatibility and add compilation CI

🐞 Bug fix 🧪 Tests 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes


AI Description

• Move 22 notebooks to supported models and LangChain imports so their lessons remain runnable.
• Replace platform-specific pins with bounded dependencies and fix a prompt-security example that
 stopped execution.
• Add keyless compilation CI and document installation, model selection, and related resources.
Diagram

graph TD
  D["Dependabot"] --> R["Requirements"] --> L["LangChain packages"] --> N["Technique notebooks"] --> O{{"OpenAI API"}}
  C["Compilation CI"] --> N
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Platform-aware lockfiles
  • ➕ Provide more reproducible installations than major-version ranges.
  • ➖ Add platform-specific maintenance and frequent lockfile updates for a teaching repository.
2. Execute notebooks in CI with mocked model calls
  • ➕ Detect import and runtime regressions that compilation cannot catch.
  • ➖ Requires maintaining realistic mocks and handling notebook outputs and heavyweight dependencies.

Recommendation: The bounded direct dependencies and keyless compilation check are a practical baseline for a notebook collection: they address installation and syntax failures without making CI depend on paid APIs. Compilation does not verify imports or runtime behavior, so add a separate execution or import check if those regressions recur.

Files changed (28) +192 / -158

Bug fix (22) +80 / -60
ambiguity-clarity.ipynbRefresh ambiguity lesson model and prompt import +3/-2

Refresh ambiguity lesson model and prompt import

• Uses 'langchain_core.prompts' and declares 'gpt-5.4-mini' once as 'MODEL' for the lesson’s ChatOpenAI client.

all_prompt_engineering_techniques/ambiguity-clarity.ipynb

basic-prompt-structures.ipynbRestore basic prompt and conversation imports +5/-4

Restore basic prompt and conversation imports

• Moves prompt templates to 'langchain_core' and conversation and memory helpers to 'langchain_classic'. Replaces the inline model name with 'MODEL = "gpt-5.4-mini"'.

all_prompt_engineering_techniques/basic-prompt-structures.ipynb

constrained-guided-generation.ipynbRestore constrained-generation parser imports +4/-3

Restore constrained-generation parser imports

• Imports 'PromptTemplate' from 'langchain_core' and 'RegexParser' from 'langchain_classic', and switches the client to a single 'gpt-5.4-mini' model declaration.

all_prompt_engineering_techniques/constrained-guided-generation.ipynb

cot-prompting.ipynbUpdate chain-of-thought model comparison +2/-2

Update chain-of-thought model comparison

• Replaces both model names with first-cell 'MODEL' and 'STRONG_MODEL' declarations and moves 'PromptTemplate' to 'langchain_core'. Disables hidden reasoning for both clients so the lesson’s prompted step-by-step comparison remains visible.

all_prompt_engineering_techniques/cot-prompting.ipynb

ethical-prompt-engineering.ipynbReplace the unavailable ethics lesson model +3/-2

Replace the unavailable ethics lesson model

• Changes the client from 'gpt-3.5-turbo' to a first-cell 'gpt-5.4-mini' declaration and uses the LangChain Core prompt import.

all_prompt_engineering_techniques/ethical-prompt-engineering.ipynb

evaluating-prompt-effectiveness.ipynbRefresh prompt-evaluation model selection +2/-1

Refresh prompt-evaluation model selection

• Declares 'MODEL = "gpt-5.4-mini"' in the setup cell and passes it to the existing ChatOpenAI client.

all_prompt_engineering_techniques/evaluating-prompt-effectiveness.ipynb

few-shot-learning.ipynbPreserve deterministic few-shot sampling +5/-3

Preserve deterministic few-shot sampling

• Moves 'PromptTemplate' to 'langchain_core', removes an unused 'LLMChain' import, and selects 'gpt-5.4-mini' through 'MODEL'. Adds 'reasoning_effort="none"' so the lesson’s zero temperature remains effective.

all_prompt_engineering_techniques/few-shot-learning.ipynb

instruction-engineering-notebook.ipynbRefresh instruction lesson dependencies and model +3/-2

Refresh instruction lesson dependencies and model

• Uses the LangChain Core prompt import and a first-cell 'MODEL' declaration for 'gpt-5.4-mini'.

all_prompt_engineering_techniques/instruction-engineering-notebook.ipynb

intro-prompt-engineering-lesson.ipynbRefresh introductory lesson dependencies and model +3/-2

Refresh introductory lesson dependencies and model

• Switches 'PromptTemplate' to 'langchain_core' and initializes ChatOpenAI from a first-cell 'gpt-5.4-mini' constant.

all_prompt_engineering_techniques/intro-prompt-engineering-lesson.ipynb

multilingual-prompting.ipynbAlign multilingual lesson prose and model +4/-3

Align multilingual lesson prose and model

• Changes the setup to use 'langchain_core.prompts' and 'MODEL = "gpt-5.4-mini"'. Corrects the lesson text to name the model it uses.

all_prompt_engineering_techniques/multilingual-prompting.ipynb

negative-prompting.ipynbRefresh negative-prompting model and import +3/-2

Refresh negative-prompting model and import

• Moves 'PromptTemplate' to LangChain Core and centralizes 'gpt-5.4-mini' in the first-cell 'MODEL' declaration.

all_prompt_engineering_techniques/negative-prompting.ipynb

prompt-chaining-sequencing.ipynbRefresh prompt-chaining model and import +3/-2

Refresh prompt-chaining model and import

• Imports prompt templates from 'langchain_core' and initializes the client using a single 'gpt-5.4-mini' declaration.

all_prompt_engineering_techniques/prompt-chaining-sequencing.ipynb

prompt-formatting-structure.ipynbRefresh prompt-formatting model and import +3/-2

Refresh prompt-formatting model and import

• Replaces the removed 'langchain.prompts' import and switches ChatOpenAI to a first-cell 'gpt-5.4-mini' constant.

all_prompt_engineering_techniques/prompt-formatting-structure.ipynb

prompt-length-complexity-management.ipynbRestore summarization imports for LangChain 1.x +1/-1

Restore summarization imports for LangChain 1.x

• Moves prompt templates to 'langchain_core' and 'load_summarize_chain' to 'langchain_classic'. Declares 'gpt-5.4-mini' once for the notebook client.

all_prompt_engineering_techniques/prompt-length-complexity-management.ipynb

prompt-optimization-techniques.ipynbMove optimization examples to the larger current model +3/-2

Move optimization examples to the larger current model

• Updates the prompt import to LangChain Core and replaces 'gpt-4o' with a first-cell 'MODEL = "gpt-5.4"' declaration.

all_prompt_engineering_techniques/prompt-optimization-techniques.ipynb

prompt-security-and-safety.ipynbHandle rejected injection examples without stopping +13/-14

Handle rejected injection examples without stopping

• Wraps the sanitizer and model call in a 'ValueError' handler and replaces the saved traceback with the rejection message. Also updates the prompt import and declares 'gpt-5.4-mini' once.

all_prompt_engineering_techniques/prompt-security-and-safety.ipynb

prompt-templates-variables-jinja2.ipynbPreserve zero-temperature Jinja2 examples +1/-1

Preserve zero-temperature Jinja2 examples

• Centralizes the direct OpenAI client’s model default as 'MODEL = "gpt-5.4-mini"'. Passes 'reasoning_effort="none"' with the existing zero temperature.

all_prompt_engineering_techniques/prompt-templates-variables-jinja2.ipynb

role-prompting.ipynbRefresh role-prompting model and import +3/-2

Refresh role-prompting model and import

• Uses LangChain Core for prompt templates and a first-cell 'MODEL' declaration for 'gpt-5.4-mini'.

all_prompt_engineering_techniques/role-prompting.ipynb

self-consistency.ipynbRestore sampling variation in self-consistency +6/-2

Restore sampling variation in self-consistency

• Moves the prompt import to LangChain Core and selects 'gpt-5.4-mini' through 'MODEL'. Sets temperature to 0.7 with 'reasoning_effort="none"' so sampling remains part of the lesson.

all_prompt_engineering_techniques/self-consistency.ipynb

specific-task-prompts.ipynbAlign task lesson text and model +4/-3

Align task lesson text and model

• Changes the prompt import to LangChain Core, declares 'gpt-5.4-mini' in the setup cell, and corrects prose that previously said GPT-4.

all_prompt_engineering_techniques/specific-task-prompts.ipynb

task-decomposition-prompts.ipynbRefresh task-decomposition model and import +3/-2

Refresh task-decomposition model and import

• Replaces the old prompt import with 'langchain_core.prompts' and initializes ChatOpenAI using a first-cell 'gpt-5.4-mini' constant.

all_prompt_engineering_techniques/task-decomposition-prompts.ipynb

zero-shot-prompting.ipynbRemove obsolete zero-shot imports and model +3/-3

Remove obsolete zero-shot imports and model

• Moves 'PromptTemplate' to LangChain Core, drops an unused 'LLMChain' import, and selects 'gpt-5.4-mini' through 'MODEL'.

all_prompt_engineering_techniques/zero-shot-prompting.ipynb

Tests (1) +68 / -0
notebook-smoke.ymlCompile notebooks and Python files on push and PR +68/-0

Compile notebooks and Python files on push and PR

• Adds a Python 3.11 workflow that reads notebook code cells and compiles them alongside '.py' files. It reports syntax failures without installing notebook dependencies, executing cells, or using API keys.

.github/workflows/notebook-smoke.yml

Documentation (2) +14 / -3
AGENTS.mdDocument model naming and notebook CI conventions +1/-0

Document model naming and notebook CI conventions

• Tells contributors to declare 'MODEL' in each notebook’s first code cell and clarifies that CI compiles notebooks without calling APIs.

AGENTS.md

README.mdClarify setup and expand DiamantAI links +13/-3

Clarify setup and expand DiamantAI links

• Adds dependency installation, API-key setup, and current model guidance to the getting-started steps. Renames the author footer and links related repositories and community resources.

README.md

Other (3) +30 / -95
dependabot.ymlAlign pip updates with bounded requirements +3/-0

Align pip updates with bounded requirements

• Sets 'increase-if-necessary' so Dependabot need not change a requirement when a release already satisfies its range.

.github/dependabot.yml

.gitignoreAllow GitHub YAML configuration to be tracked +2/-0

Allow GitHub YAML configuration to be tracked

• Exempts '.github/**/*.yml' from the existing blanket YAML ignore rule so workflows and Dependabot configuration can be committed.

.gitignore

requirements.txtReplace platform-specific pins with bounded notebook dependencies +25/-95

Replace platform-specific pins with bounded notebook dependencies

• Replaces 95 pinned packages, including Windows-only 'pywin32', with 12 direct notebook and kernel dependencies bounded below by tested versions and above by the next major. Adds LangChain Core and Classic packages required by the updated imports.

requirements.txt

Summary by CodeRabbit

  • Updates
    • Prompt-engineering notebooks now use updated AI models and compatible library imports. The safety example also displays a clear message when input is rejected.
  • Documentation
    • Getting Started now covers installing required packages, setting an API key, and choosing notebook models.
  • Tests
    • Automated checks now compile notebooks and Python files on pushes and pull requests.
  • Dependency Updates
    • Notebook package requirements now allow compatible updates within their specified major versions.

NirDiamant and others added 3 commits October 31, 2026 01:44
cot-prompting and ethical-prompt-engineering used gpt-3.5-turbo, which
OpenAI shut down on 2026-10-23, so both failed on their first call. The
other 20 used gpt-4o or gpt-4o-mini, which shut down on 2027-01-14.
Every notebook now names its model once, as MODEL in its first code cell:
gpt-5.4-mini, or gpt-5.4 where the original used gpt-4o.

Where temperature is part of the lesson (few-shot at 0, the Jinja2
templates at 0, self-consistency at 0.7), the call passes
reasoning_effort="none": GPT-5.x models accept a temperature only then,
and LangChain silently drops it otherwise. cot-prompting also turns
hidden reasoning off so the standard-vs-CoT comparison stays visible.

Imports move to langchain_core and langchain_classic, since LangChain 1.x
removed langchain.prompts, langchain.chains and langchain.memory.
prompt-security-and-safety stopped at cell 9 because the sanitizer
rejected the example input with an uncaught ValueError; that call now
uses the same try/except as the cell before it.

requirements.txt goes from 95 pinned 2024 lines to the 12 packages the
notebooks import, as ranges within the tested major version. All 22
notebooks ran top to bottom in a fresh Python 3.11 venv built from it.
Dependabot now proposes a change only when a release leaves its range.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…steps

The footer, now "More from DiamantAI", gains one line for the other four
flagship repos and one for the newsletter, YouTube, Discord, website and
courses. Links go through the README's existing click tracker, except
Discord, which the tracker does not allow. Getting Started now says how
to install the requirements and set the API key, and names the models.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Compiles every notebook's code cells in order (IPython magics and shell
lines removed) and every .py file, on each push and pull request. It
needs no API keys and executes nothing.

.gitignore ignored every *.yml file, which would have kept this workflow
out of the repo; GitHub config under .github/ is now exempt.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

Walkthrough

The notebooks use updated model settings and LangChain import paths. The requirements now specify version ranges, and a GitHub Actions workflow compiles notebook and Python code on pushes and pull requests. The README and repository guidance add setup and workflow information.

Changes: Notebook runtime and validation

Layer / File(s) Summary
Notebook dependencies and runtime
requirements.txt, .github/dependabot.yml, all_prompt_engineering_techniques/*.ipynb
Dependencies now use minimum-to-next-major version ranges. Notebook examples update model settings and LangChain imports; the prompt-security example catches ValueError and prints a rejection message.
Notebook smoke validation
.github/workflows/notebook-smoke.yml, .gitignore
A push and pull request workflow scans notebook and Python files, compiles their code, and reports failures. The ignore rules keep GitHub YAML files tracked.
Setup and repository guidance
AGENTS.md, README.md
The guidance and README describe dependency installation, API-key setup, notebook model configuration, and smoke-check behavior. The README also adds related links.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant PushOrPullRequest
  participant GitHubActions
  participant NotebookSmokeScript
  participant nbformat
  participant py_compile
  PushOrPullRequest->>GitHubActions: Trigger notebook-smoke workflow
  GitHubActions->>NotebookSmokeScript: Run repository scan and compile checks
  NotebookSmokeScript->>nbformat: Read notebook cells
  NotebookSmokeScript->>py_compile: Compile Python files
  NotebookSmokeScript-->>GitHubActions: Report failures and exit status
Loading
Merge Risk: Low · up to 8144a

The new check can miss cell-level syntax errors or reject valid notebooks. Model guidance also needs clarification; these are bounded follow-up risks.

Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@qodo-code-review

qodo-code-review Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)



🟡 Low

1. Notebook check hides shell-cell breakage ✓ Resolved
Description
The compile script drops every line starting with % or ! from code cells, including lines inside
multi-line strings. A %%bash cell loses only its magic line, so the shell body left behind fails
to compile with an unrelated error.
Code

.github/workflows/notebook-smoke.yml[R48-52]

+                      # IPython magics and shell escapes are not Python; drop them.
+                      lines = [
+                          line for line in cell.source.splitlines()
+                          if not line.lstrip().startswith(("%", "!"))
+                      ]
Evidence
The filter works per line with no awareness of strings or cell magics, so a %% cell body is
compiled as Python.

.github/workflows/notebook-smoke.yml[48-54]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The smoke test removes lines starting with `%` or `!` but keeps the body of cell magics such as `%%bash`, which then fails to compile, and it can alter lines inside multi-line prompt strings.

## Fix Focus Areas
- .github/workflows/notebook-smoke.yml[48-53]

## Recommended Fix
Skip any code cell whose first line starts with `%%`. Keep dropping single-line `%` and `!` lines only outside string literals, or use `IPython.core.inputtransformer2` to convert cells before compiling.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Context sources
✅ Linked PRs:
  🌐 PR #43
❌ Tickets: failed to load — Ticket collection could not establish complete evidence
Review mode: Auto: 🚀 Fast: Localized notebook-magic filtering logic with limited, contained CI impact.
✅ Fix-loop round: fix loop

Tip of the day
💡 Did you know, you can route each severity your way: inline, summary, both, or drop

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗


Previous reviews

Review updated until commit 54d5845

Results up to commit 8144a0e 🧠 Deep


🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)



🟡 Low

1. Notebook check hides shell-cell breakage ✓ Resolved
Description
The compile script drops every line starting with % or ! from code cells, including lines inside
multi-line strings. A %%bash cell loses only its magic line, so the shell body left behind fails
to compile with an unrelated error.
Code

.github/workflows/notebook-smoke.yml[R48-52]

+                      # IPython magics and shell escapes are not Python; drop them.
+                      lines = [
+                          line for line in cell.source.splitlines()
+                          if not line.lstrip().startswith(("%", "!"))
+                      ]
Evidence
The filter works per line with no awareness of strings or cell magics, so a %% cell body is
compiled as Python.

.github/workflows/notebook-smoke.yml[48-54]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The smoke test removes lines starting with `%` or `!` but keeps the body of cell magics such as `%%bash`, which then fails to compile, and it can alter lines inside multi-line prompt strings.

## Fix Focus Areas
- .github/workflows/notebook-smoke.yml[48-53]

## Recommended Fix
Skip any code cell whose first line starts with `%%`. Keep dropping single-line `%` and `!` lines only outside string literals, or use `IPython.core.inputtransformer2` to convert cells before compiling.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools




Powered by Qodo

Comment thread .github/workflows/notebook-smoke.yml Resolved
Addresses the Qodo review note: a %%bash cell lost only its magic line and
its shell body then failed to compile.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@NirDiamant
NirDiamant merged commit 2a7c640 into main Oct 30, 2026
2 checks passed
@NirDiamant
NirDiamant deleted the fix/2026-10-31-audit branch October 30, 2026 23:54
@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 54d5845

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant