Skip to content

Release v0.8.0 — verify-integrity + remove deprecated --data-audit / evaluation.staging_ttl_days#65

Merged
cemililik merged 3 commits into
mainfrom
release/v0.8.0
Jun 16, 2026
Merged

Release v0.8.0 — verify-integrity + remove deprecated --data-audit / evaluation.staging_ttl_days#65
cemililik merged 3 commits into
mainfrom
release/v0.8.0

Conversation

@cemililik

@cemililik cemililik commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator

Release v0.8.0 (MINOR)

__version__ 0.7.0 → 0.8.0 · __api_version__ 1.0.0 → 1.1.0

Why MINOR (not patch)

A new CLI subcommand (verify-integrity) and new stable public symbols (verify_integrity, VerifyIntegrityResult) shipped since v0.7.0 — per docs/standards/release.md that maps to a MINOR + __api_version__ bump, not a patch.

Added

  • forgelm verify-integrity MODEL_DIR + forgelm.verify_integrity() / VerifyIntegrityResult — re-hashes a model dir against its Article 15 model_integrity.json manifest (exit 0/1/2, --output-format json). Added to forgelm.__all__ → snapshot regenerated (tests/_data/api_signatures_1.1.0.json).
  • Config-driven merge knobs (merge.ties_trim_fraction/dare_drop_rate/dare_seed) + synthetic.sanity_failure_rate (already in [Unreleased]).

Removed (deprecated in v0.7.0 → removed this minor, per the one-minor cadence)

  • evaluation.staging_ttl_days field — use canonical retention.staging_ttl_days; legacy key now raises a validation error (extra="forbid"). Reconciliation/alias machinery deleted.
  • forgelm --data-audit PATH flag — use the forgelm audit PATH subcommand. Legacy dispatch + the now-unemitted cli.legacy_flag_invoked audit event removed (dropped from catalog).

Release mechanics

  • CHANGELOG [Unreleased][0.8.0] — 2026-06-16; site version literals re-derived; notebook pins 0.7.0 → 0.8.0.
  • Deprecation-behaviour tests → removal-assertion tests; user-facing docs (EN+TR) updated to past-tense removal; historical roadmap/design untouched.

Verification

Full pytest 2856 passed; ruff; 12 doc/CI guards (bilingual, anchor, cli-help, yaml-snippets, audit-catalog, tr-links, usermanual-self-contained, numerical-claims, notebook-pins, wizard-defaults, site-version, no-analysis); forgelm --config config_template.yaml --dry-run; fresh-install forgelm --version = 0.8.0 — all green.

After merge: tag v0.8.0 from main to trigger the PyPI publish workflow (maintainer step — not done by this PR).

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes: v0.8.0

  • New Features

    • Added model integrity verification against training-produced SHA-256 manifests.
    • Added config-driven TIES/DARE merge controls and synthetic sanity bounds.
  • Changed

    • Hardened configuration validation (invalid values now fail fast).
    • Expanded/updated documented exit-code contract and improved SIGINT exit behavior.
  • Removed

    • Legacy forgelm --data-audit flag; use forgelm audit instead.
    • evaluation.staging_ttl_days; use retention.staging_ttl_days.
  • API Updates

    • Bumped API version to 1.1.0.
  • Documentation

    • Updated guides/reference and examples for the audit and retention changes.

…udit / evaluation.staging_ttl_days

MINOR release (`__version__` 0.7.0 → 0.8.0, `__api_version__` 1.0.0 → 1.1.0).

Added (feature + public API):
- `forgelm verify-integrity MODEL_DIR` subcommand + `forgelm.verify_integrity()`
  / `VerifyIntegrityResult` stable library API (Article 15 model-integrity
  manifest verification). Added to `forgelm.__all__` → MINOR `__api_version__`
  bump (snapshot regenerated as tests/_data/api_signatures_1.1.0.json).

Removed (deprecated in v0.7.0, removal due this minor per the one-minor cadence):
- `evaluation.staging_ttl_days` config field (alias). `retention.staging_ttl_days`
  is now the only form; `EvaluationConfig` is `extra="forbid"` so the legacy key
  raises a validation error. Removed the reconciliation/alias-forward machinery.
- `forgelm --data-audit PATH` CLI flag. Use the `forgelm audit PATH` subcommand.
  Removed the legacy dispatch path + the now-unemitted `cli.legacy_flag_invoked`
  audit event (dropped from the catalog).

Release mechanics:
- CHANGELOG [Unreleased] → [0.8.0] (Added/Changed/Deprecated/Removed/Fixed).
- pyproject `version = "0.8.0"`; site version literals re-derived (update_site_version).
- Notebook pins bumped 0.7.0 → 0.8.0.
- Deprecation-behaviour tests replaced with removal-assertion tests; docs (EN+TR)
  updated to past-tense removal; historical roadmap/design records untouched.

Verified: ruff, full pytest (2856 passed), 12 doc/CI guards, dry-run, fresh-install
`forgelm --version` = 0.8.0 — all green.

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

@sourcery-ai sourcery-ai 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.

Sorry @cemililik, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@coderabbitai

coderabbitai Bot commented Jun 15, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1706bc78-5032-4217-8e85-106028a2c0b9

📥 Commits

Reviewing files that changed from the base of the PR and between 8e5b045 and bb0f191.

📒 Files selected for processing (5)
  • CHANGELOG.md
  • notebooks/data_curation.ipynb
  • notebooks/ingestion_playground.ipynb
  • site/features.html
  • site/js/translations.js
✅ Files skipped from review due to trivial changes (1)
  • site/js/translations.js
🚧 Files skipped from review as they are similar to previous changes (3)
  • notebooks/ingestion_playground.ipynb
  • notebooks/data_curation.ipynb
  • CHANGELOG.md

📝 Walkthrough

Walkthrough

This PR performs the ForgeLM v0.8.0 release: it hard-removes the deprecated evaluation.staging_ttl_days config field (including alias-forwarding logic) and the legacy forgelm --data-audit CLI flag, bumps pyproject.toml to 0.8.0 and __api_version__ to 1.1.0, and propagates the new version string across all site pages, notebooks, and documentation.

Changes

ForgeLM v0.8.0 Release

Layer / File(s) Summary
Remove evaluation.staging_ttl_days field and reconciliation logic
forgelm/config.py, config_template.yaml
Deletes staging_ttl_days from EvaluationConfig, removes the alias-forwarding and deprecation-warning helpers from ForgeConfig._validate_consistency, and updates RetentionConfig field description and template comments.
Tests for staging TTL removal
tests/test_config.py, tests/test_gdpr_erasure.py
Replaces deprecation-forwarding tests with ValidationError assertions for evaluation.staging_ttl_days; removes TestModelCopyPreservation and stale TestStagingTtlDeprecation regression tests; adds canonical retention.staging_ttl_days acceptance test.
Remove --data-audit legacy CLI flag
forgelm/cli/_dispatch.py, forgelm/cli/_parser.py, forgelm/cli/subcommands/_audit.py, forgelm/compliance.py
Deletes _dispatch_legacy_data_audit, removes the args.data_audit branch in _main_inner, drops the --data-audit argparse option, repurposes --output for --compliance-export, and updates related docstrings.
Tests for --data-audit removal
tests/test_cli_subcommands.py
Replaces three legacy-alias behavior tests with a single test_legacy_data_audit_flag_removed asserting SystemExit(2) from argparse.
Package version, API version, CHANGELOG, and API signature fixture
pyproject.toml, forgelm/_version.py, tests/_data/api_signatures_1.1.0.json, CHANGELOG.md
Bumps package to 0.8.0, __api_version__ to 1.1.0, adds the 1.1.0 API signature fixture, and records all v0.8.0 changes in the changelog.
Docs: staging TTL removal notices
docs/guides/gdpr_erasure*.md, docs/reference/configuration*.md, docs/reference/soc2_trust_criteria_mapping*.md, docs/qms/sop_data_management*.md
Replaces deprecation wording with hard-removal notices for evaluation.staging_ttl_days across all EN+TR guides and reference docs, specifying EXIT_CONFIG_ERROR for legacy YAML.
Docs: --data-audit flag removal
docs/guides/data_audit*.md, docs/reference/usage*.md, docs/usermanuals/*/reference/cli.md, docs/reference/audit_event_catalog*.md
Removes all legacy-alias paragraphs and the cli.legacy_flag_invoked event catalog row from EN+TR guides, usage reference, CLI tables, and audit catalogs.
Version string bumps: site and notebooks
site/*.html, site/js/translations.js, site/quickstart.html, notebooks/*.ipynb
Updates softwareVersion in JSON-LD on all site pages, hero badge text in all 6 languages, quickstart install examples, exit codes list, and all notebook pip install cells from 0.7.x to 0.8.0.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • HodeTech/ForgeLM#54: Originally implemented the legacy --data-audit dispatcher in forgelm/cli/_dispatch.py and _parser.py that this PR removes.

Poem

🐇 Hop hop, the old flag is gone,
No more --data-audit to lean on!
evaluation.staging_ttl_days? Deleted with care,
The canonical key is the only one there.
v0.8.0 is here, clean and bright,
The bunny ships releases just right! 🎉

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely summarizes the main changes: a release of v0.8.0 with verify-integrity feature added and deprecated features removed.
Description check ✅ Passed The description is comprehensive and well-structured, covering why (MINOR bump), what was added/removed, release mechanics, and verification steps, despite not following the exact template sections.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v0.8.0

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

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request prepares the codebase for the v0.8.0 release by removing the deprecated forgelm --data-audit CLI flag and the evaluation.staging_ttl_days configuration field, while introducing a new model-integrity verification subcommand and API. Feedback on the changes suggests cleaning up an outdated comment regarding --data-audit in forgelm/cli/_dispatch.py and updating a tag reference from v0.7.0 to v0.8.0 in a notebook comment to keep it in sync with the code.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread forgelm/cli/_dispatch.py
if getattr(args, "data_audit", None):
_dispatch_legacy_data_audit(args)

# (The legacy ``forgelm --data-audit PATH`` flag was removed in v0.8.0;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The comment on line 216 (# --data-audit operates on a JSONL file/directory only — no config needed.) is now outdated and misleading because the --data-audit flag has been completely removed. Since line 216 is a context line, it cannot be directly modified here, but it should be cleaned up or removed in a separate commit to keep the documentation accurate.

"# matches the wheel above — `main` drifts as features land and would otherwise\n",
"# reference fields the installed Pydantic schema rejects.\n",
"!wget -q https://raw.githubusercontent.com/HodeTech/ForgeLM/v0.7.0/config_template.yaml\n",
"!wget -q https://raw.githubusercontent.com/HodeTech/ForgeLM/v0.8.0/config_template.yaml\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The comment on line 40 still references the v0.7.0 tag, but the command on line 43 has been updated to download from the v0.8.0 tag. Please update the comment on line 40 to reference v0.8.0 as well to keep them in sync.

…udit comment (PR#65 review)

Two PR #65 review findings:
- notebooks/*.ipynb: the 'Pinned to v0.7.0' / 'from the v0.7.0 tag' prose comments still named v0.7.0 while the actual pins/URLs were already bumped to v0.8.0 — synced the comments (11 notebooks).
- forgelm/cli/_dispatch.py: removed the stale '# --data-audit operates on a JSONL file/directory only — no config needed.' leftover comment (the flag was removed in v0.8.0; the adjacent removal note stays).

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

@coderabbitai coderabbitai 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.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
CHANGELOG.md (1)

2151-2151: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Keep the release boundary and public contract in sync.

The release notes and the features page still reference the pre-v0.8.0 surface in two places. Please update both so readers don’t pick up the wrong diff or the wrong exit-code contract.

♻️ Proposed fixes
-[Unreleased]: https://github.com/HodeTech/ForgeLM/compare/v0.7.0...HEAD
+[Unreleased]: https://github.com/HodeTech/ForgeLM/compare/v0.8.0...HEAD
-  <p data-i18n-html="features.eval.exit.body">0 / 1 / 2 / 3 / 4 — a public contract for CI/CD.</p>
+  <p data-i18n-html="features.eval.exit.body">0 / 1 / 2 / 3 / 4 / 5 — a public contract for CI/CD.</p>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` at line 2151, Update the version references in both
CHANGELOG.md and site/features.html to keep the release boundary consistent
across both documents. In CHANGELOG.md at line 2151, update the Unreleased
comparison URL to reference v0.8.0 instead of v0.7.0, changing the comparison
endpoint from v0.7.0...HEAD to v0.8.0...HEAD. In site/features.html at line 239,
update any pre-v0.8.0 surface references to reflect the post-v0.8.0 API contract
and exit-code behavior so that both files document the same release boundary and
public contract.
notebooks/data_curation.ipynb (1)

404-412: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Missing Python version pinning in two notebook metadata blocks — codifies inconsistency with release standards.

Both notebooks now have their forgelm package versions pinned to v0.8.0, but they lack Python version specifications in their language_info metadata sections. The coding guideline explicitly requires all notebooks to pin both kernel and package versions for reproducibility. Three other notebooks in this release (dpo_alignment, galore_memory_optimization, grpo_reasoning) correctly specify "version": "3.11.0". Since we're updating these notebooks as part of the v0.8.0 release, both should be brought into compliance to ensure reproducible environments across all training notebooks.

  • notebooks/data_curation.ipynb#L404-L412: Add "version": "3.11.0" to language_info
  • notebooks/ingestion_playground.ipynb#L415-L423: Add "version": "3.11.0" to language_info
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@notebooks/data_curation.ipynb` around lines 404 - 412, Both notebooks are
missing Python version specifications in their language_info metadata blocks. In
notebooks/data_curation.ipynb at lines 404-412, add a new line with "version":
"3.11.0" inside the language_info metadata object. Apply the identical change to
notebooks/ingestion_playground.ipynb at lines 415-423 by adding "version":
"3.11.0" to its language_info metadata block. Ensure both additions follow the
same formatting pattern as the existing metadata properties to maintain
consistency across the notebook files.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@notebooks/kto_binary_feedback.ipynb`:
- Around line 23-24: The pip install command on line 24 installs bitsandbytes
without pinning it to a specific version, which violates the reproducibility
requirement for notebooks. Add a version constraint to the bitsandbytes package
in the same pip install command (for example, using ==X.Y.Z syntax) to match the
exact version pinning already applied to forgelm[qlora]==0.8.0. This ensures the
notebook will produce consistent results across different runs and environments.

In `@notebooks/multi_dataset.ipynb`:
- Around line 23-24: The pip install command on line 24 leaves the bitsandbytes
package unversioned, violating the reproducibility requirement for notebooks.
Add an explicit version constraint to bitsandbytes in the pip install command
(following the same pattern as forgelm[qlora]==0.8.0) to ensure the notebook
environment is reproducible across different execution runs.

In `@notebooks/post_training_workflow.ipynb`:
- Line 39: The pip install command on line 39 pins the forgelm package version
but leaves bitsandbytes unpinned, violating reproducibility requirements. Modify
the pip install statement to add an exact version pin for bitsandbytes following
the same pattern as forgelm (e.g., bitsandbytes==X.X.X where X.X.X is an
appropriate stable version), ensuring all packages in the notebook have explicit
version pins.

In `@notebooks/safety_evaluation.ipynb`:
- Around line 25-26: The bitsandbytes package in the pip install command is
unpinned while forgelm[qlora] is pinned to version 0.8.0, violating the
reproducibility requirement for notebooks. Pin bitsandbytes to a specific
version by adding a version constraint in the same format as
forgelm[qlora]==0.8.0 (e.g., bitsandbytes==X.X.X) in the pip install statement
to ensure consistent environment setup across notebook runs.

In `@notebooks/synthetic_data_training.ipynb`:
- Around line 28-29: The pip install command on line 29 leaves the bitsandbytes
package unpinned while forgelm[qlora] is pinned to version 0.8.0. Add an exact
version pin to bitsandbytes (e.g., bitsandbytes==X.Y.Z) in the same pip install
statement to comply with the notebook reproducibility requirement that all
packages must have pinned versions. Check the appropriate bitsandbytes version
that is compatible with forgelm 0.8.0 and add it to the install command
alongside the already-pinned forgelm package.

---

Outside diff comments:
In `@CHANGELOG.md`:
- Line 2151: Update the version references in both CHANGELOG.md and
site/features.html to keep the release boundary consistent across both
documents. In CHANGELOG.md at line 2151, update the Unreleased comparison URL to
reference v0.8.0 instead of v0.7.0, changing the comparison endpoint from
v0.7.0...HEAD to v0.8.0...HEAD. In site/features.html at line 239, update any
pre-v0.8.0 surface references to reflect the post-v0.8.0 API contract and
exit-code behavior so that both files document the same release boundary and
public contract.

In `@notebooks/data_curation.ipynb`:
- Around line 404-412: Both notebooks are missing Python version specifications
in their language_info metadata blocks. In notebooks/data_curation.ipynb at
lines 404-412, add a new line with "version": "3.11.0" inside the language_info
metadata object. Apply the identical change to
notebooks/ingestion_playground.ipynb at lines 415-423 by adding "version":
"3.11.0" to its language_info metadata block. Ensure both additions follow the
same formatting pattern as the existing metadata properties to maintain
consistency across the notebook files.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b319a590-6990-480b-9345-15050f850f45

📥 Commits

Reviewing files that changed from the base of the PR and between 9b964b6 and 8e5b045.

📒 Files selected for processing (49)
  • CHANGELOG.md
  • config_template.yaml
  • docs/guides/data_audit-tr.md
  • docs/guides/data_audit.md
  • docs/guides/gdpr_erasure-tr.md
  • docs/guides/gdpr_erasure.md
  • docs/qms/sop_data_management-tr.md
  • docs/qms/sop_data_management.md
  • docs/reference/audit_event_catalog-tr.md
  • docs/reference/audit_event_catalog.md
  • docs/reference/configuration-tr.md
  • docs/reference/configuration.md
  • docs/reference/soc2_trust_criteria_mapping-tr.md
  • docs/reference/soc2_trust_criteria_mapping.md
  • docs/reference/usage-tr.md
  • docs/reference/usage.md
  • docs/usermanuals/en/reference/cli.md
  • docs/usermanuals/tr/reference/cli.md
  • forgelm/_version.py
  • forgelm/cli/_dispatch.py
  • forgelm/cli/_parser.py
  • forgelm/cli/subcommands/_audit.py
  • forgelm/compliance.py
  • forgelm/config.py
  • notebooks/data_curation.ipynb
  • notebooks/dpo_alignment.ipynb
  • notebooks/galore_memory_optimization.ipynb
  • notebooks/grpo_reasoning.ipynb
  • notebooks/ingestion_playground.ipynb
  • notebooks/kto_binary_feedback.ipynb
  • notebooks/multi_dataset.ipynb
  • notebooks/post_training_workflow.ipynb
  • notebooks/quickstart_sft.ipynb
  • notebooks/safety_evaluation.ipynb
  • notebooks/synthetic_data_training.ipynb
  • pyproject.toml
  • site/compliance.html
  • site/contact.html
  • site/features.html
  • site/guide.html
  • site/index.html
  • site/js/translations.js
  • site/privacy.html
  • site/quickstart.html
  • site/terms.html
  • tests/_data/api_signatures_1.1.0.json
  • tests/test_cli_subcommands.py
  • tests/test_config.py
  • tests/test_gdpr_erasure.py
💤 Files with no reviewable changes (7)
  • docs/reference/audit_event_catalog.md
  • docs/reference/usage-tr.md
  • docs/reference/audit_event_catalog-tr.md
  • docs/guides/data_audit-tr.md
  • docs/reference/usage.md
  • docs/guides/data_audit.md
  • tests/test_gdpr_erasure.py

Comment on lines +23 to +24
"# Pinned to v0.8.0; bump on each release\n",
"!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' bitsandbytes\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Pin bitsandbytes to an exact version for reproducible notebook runs.

Line 24 still installs bitsandbytes without a version, so resolves can drift over time and break reproducibility.

Suggested patch
-!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' bitsandbytes
+!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' 'bitsandbytes==0.43.3'

As per coding guidelines, "**/*.ipynb: Every *.ipynb notebook must pin kernel and package versions for reproducibility".

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"# Pinned to v0.8.0; bump on each release\n",
"!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' bitsandbytes\n",
"# Pinned to v0.8.0; bump on each release\n",
"!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' 'bitsandbytes==0.43.3'\n",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@notebooks/kto_binary_feedback.ipynb` around lines 23 - 24, The pip install
command on line 24 installs bitsandbytes without pinning it to a specific
version, which violates the reproducibility requirement for notebooks. Add a
version constraint to the bitsandbytes package in the same pip install command
(for example, using ==X.Y.Z syntax) to match the exact version pinning already
applied to forgelm[qlora]==0.8.0. This ensures the notebook will produce
consistent results across different runs and environments.

Source: Coding guidelines

Comment on lines +23 to +24
"# Pinned to v0.8.0; bump on each release\n",
"!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' bitsandbytes\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Pin bitsandbytes explicitly in the install command.

Line 24 leaves bitsandbytes unversioned, which makes notebook environments non-reproducible across runs.

As per coding guidelines, "**/*.ipynb: Every *.ipynb notebook must pin kernel and package versions for reproducibility".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@notebooks/multi_dataset.ipynb` around lines 23 - 24, The pip install command
on line 24 leaves the bitsandbytes package unversioned, violating the
reproducibility requirement for notebooks. Add an explicit version constraint to
bitsandbytes in the pip install command (following the same pattern as
forgelm[qlora]==0.8.0) to ensure the notebook environment is reproducible across
different execution runs.

Source: Coding guidelines

"# Install ForgeLM (skip on Colab if quickstart_sft already ran in this session)\n",
"!pip install -q --no-cache-dir 'forgelm==0.7.0' bitsandbytes\n",
"# Download config_template.yaml from the v0.7.0 tag (NOT main) so the YAML\n",
"!pip install -q --no-cache-dir 'forgelm==0.8.0' bitsandbytes\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Avoid unpinned bitsandbytes in notebook bootstrap.

Line 39 installs bitsandbytes without an exact version; this conflicts with reproducibility requirements for notebooks.

As per coding guidelines, "**/*.ipynb: Every *.ipynb notebook must pin kernel and package versions for reproducibility".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@notebooks/post_training_workflow.ipynb` at line 39, The pip install command
on line 39 pins the forgelm package version but leaves bitsandbytes unpinned,
violating reproducibility requirements. Modify the pip install statement to add
an exact version pin for bitsandbytes following the same pattern as forgelm
(e.g., bitsandbytes==X.X.X where X.X.X is an appropriate stable version),
ensuring all packages in the notebook have explicit version pins.

Source: Coding guidelines

Comment on lines +25 to +26
"# Pinned to v0.8.0; bump on each release\n",
"!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' bitsandbytes\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Pin bitsandbytes to preserve reproducible notebook setup.

Line 26 keeps bitsandbytes unpinned; environment resolution can change between runs.

As per coding guidelines, "**/*.ipynb: Every *.ipynb notebook must pin kernel and package versions for reproducibility".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@notebooks/safety_evaluation.ipynb` around lines 25 - 26, The bitsandbytes
package in the pip install command is unpinned while forgelm[qlora] is pinned to
version 0.8.0, violating the reproducibility requirement for notebooks. Pin
bitsandbytes to a specific version by adding a version constraint in the same
format as forgelm[qlora]==0.8.0 (e.g., bitsandbytes==X.X.X) in the pip install
statement to ensure consistent environment setup across notebook runs.

Source: Coding guidelines

Comment on lines +28 to +29
"# Pinned to v0.8.0; bump on each release\n",
"!pip install -q --no-cache-dir 'forgelm[qlora]==0.8.0' bitsandbytes\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Pin bitsandbytes with an exact version in this changed install cell.

Line 29 installs an unpinned package, which violates notebook reproducibility requirements.

As per coding guidelines, "**/*.ipynb: Every *.ipynb notebook must pin kernel and package versions for reproducibility".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@notebooks/synthetic_data_training.ipynb` around lines 28 - 29, The pip
install command on line 29 leaves the bitsandbytes package unpinned while
forgelm[qlora] is pinned to version 0.8.0. Add an exact version pin to
bitsandbytes (e.g., bitsandbytes==X.Y.Z) in the same pip install statement to
comply with the notebook reproducibility requirement that all packages must have
pinned versions. Check the appropriate bitsandbytes version that is compatible
with forgelm 0.8.0 and add it to the install command alongside the
already-pinned forgelm package.

Source: Coding guidelines

…etadata (PR#65 review)

Three still-valid PR #65 review findings (bitsandbytes-pin finding skipped — the project convention + check_notebook_pins's own accepted-pin example install 'forgelm[qlora]==X bitsandbytes' with bitsandbytes pulled in pinned via the qlora extra):
- CHANGELOG.md: bump the [Unreleased] compare link to v0.8.0...HEAD and add the [0.8.0]: v0.7.0...v0.8.0 link.
- site exit-code claim: '0 / 1 / 2 / 3 / 4' was missing code 5 (wizard-cancelled) — corrected to '0 / 1 / 2 / 3 / 4 / 5' across features.html + all 6 translations.js locales, matching forgelm/cli/_exit_codes.py.
- notebooks/{data_curation,ingestion_playground}.ipynb: added the missing language_info.version (3.11.0) to match the other tutorial notebooks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cemililik cemililik merged commit 9f76de7 into main Jun 16, 2026
10 checks passed
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