Skip to content

Release 2.6.0 - #74

Merged
ianktoo merged 4 commits into
masterfrom
release/v2.6.0
Sep 24, 2026
Merged

ianktoo merged 4 commits into
masterfrom
release/v2.6.0

Conversation

@ianktoo

@ianktoo ianktoo commented Sep 24, 2026

Copy link
Copy Markdown
Owner

Release 2.6.0: a minor release, because it adds export at any stage and help to the interactive menu, and fixes the API key error loop. No breaking changes to commands or file formats. One behaviour change in the interactive menu: Ctrl+C at a stage checkpoint now stops and saves the run (it previously continued to the next stage).

Version bump

  • pyproject.toml and uv.lock: 2.5.0 to 2.6.0
  • CITATION.cff: version: 2.6.0, date-released: 2026-09-24
  • README: current-release line; changelog link points at 2.6.0
  • CHANGELOG: new [2.6.0] - 2026-09-24 section with a summary, Added, Changed and Fixed

What 2.6.0 contains

Interactive menu (d5a521e, branch fix/cli-ux)

  • Main menu worded as tasks, with a one-line description under each choice; rarely used items moved to a Settings and tools submenu. "Scrape pages (no AI)" brings dataforge scrape into the menu.
  • Fixed screen layout: each wizard step, pipeline stage and the URL review starts on a fresh screen in one order (title, content, messages, key hints above the prompt). DATAFORGE_NO_CLEAR=1 keeps all output. Terminal logging in the menu is WARNING and above unless DATAFORGE_LOG_LEVEL is set.
  • Help: "What happens next?" at each checkpoint, a Help page, and help / h in the URL review.
  • Input cleaning: quoted paths (Windows "Copy as path"), PowerShell drag-and-drop, curly quotes, <url>, and URL lists split by commas, spaces or lines.
  • Export at any stage (exporters/stage_data.py): URLs, pages, chunks and samples in several formats. dataforge export <id> no longer refuses a session without samples.

Generation fix (44eba65)

  • Fatal credential and connection errors now propagate instead of being swallowed per chunk, auth failures are not retried, LiteLLM banners are suppressed, and generate_batch cancels pending work on the first fatal error. A bad key with 40 chunks stops in about 3 seconds with one message.
  • This also makes the streaming fatal-error claim in docs/TECHNICAL.tex true.

Tests

  • New: tests/test_input_cleaning.py, tests/test_stage_data_export.py, tests/test_generation_fatal_errors.py. The full suite passes locally on Windows.

After merge

Tag v2.6.0 on master. The release workflows run the full suite first, publish to PyPI, smoke-test and upload the standalone binaries, and create the GitHub release; release-smoke.yml then tests the PyPI release on every OS and Python.

A missing or invalid key made generation look like an endless error loop:

- generate_from_chunk caught MissingCredentialError and LLMConnectionError
  like any other failure and returned [], so the fatal error never reached
  the generator or streaming agent. Every remaining chunk tried again.
- The tenacity retry retried auth failures 3 times with 2-20s backoff,
  though they can never succeed.
- LiteLLM printed its "Give Feedback / Get Help" banner on every failure.
- generate_batch left queued tasks running after one raised.

Now fatal errors propagate, auth failures are not retried, LiteLLM debug
banners are suppressed, and generate_batch stops dispatching and cancels
pending work on the first fatal error. With 40 chunks and a bad key the
run stops after the calls already in flight (about 3s) with one message,
where it previously made 3 calls per chunk.

This also makes the streaming claim in TECHNICAL.tex true: streaming
already had a fatal-error branch, but it never fired.
…port at any stage

Main menu
- Worded as tasks: Scrape pages (no AI), Build an AI training dataset,
  Continue a paused project, Browse my data, Export data, Settings and
  tools, Help, Clear the screen, Exit. Rarely used items (provider and key,
  system info, update, uninstall, project list) moved to a submenu.
- Every choice shows a one-line description under the list.
- "Scrape pages (no AI)" brings `dataforge scrape` into the menu.

Screen layout
- Wizard steps, pipeline stages and the URL review start on a fresh screen
  instead of appending. DATAFORGE_NO_CLEAR=1 keeps all output.
- Every screen follows one order: title, content, messages, then key hints
  directly above the prompt. The URL review redraws in place, and the URL
  list is no longer printed twice after discovery, which pushed the hints
  off screen. The mixed-language warning moved into the review screen.
- The interactive menu shows WARNING and above on the terminal unless
  DATAFORGE_LOG_LEVEL is set. The log file still records INFO.

Help
- "What happens next?" at each stage checkpoint explains every stage and
  the next one in detail. Help page in the main menu. `help` and `h` work
  in the URL review.

Input
- Paths and URLs accept surrounding quotes (Windows "Copy as path"),
  PowerShell drag-and-drop (& 'C:\...'), curly quotes, <url>, and URL
  lists separated by commas, spaces or lines.

Export at any stage
- New exporters/stage_data.py writes discovered URLs (txt, csv, json),
  scraped pages (one Markdown file per page with front matter, plain text,
  json, jsonl), chunks (jsonl, json, txt) and all samples (jsonl, json).
- "Export what I have so far" at a checkpoint previously exported only
  samples, so it wrote nothing after collection or processing. It now
  offers whatever exists, plus the training set when there are samples,
  then returns to the checkpoint menu.
- `dataforge export <id>` uses the same flow and no longer refuses a
  session without samples. Browse my data has an export entry too.

Behaviour change: Ctrl+C at a stage checkpoint now stops and saves the
run; it previously continued to the next stage.
pyproject.toml, uv.lock, CITATION.cff (version 2.6.0, date 2026-09-24), README current-release line, and a CHANGELOG 2.6.0 section. Minor release: a simpler interactive menu with export at any stage, and a fix for the endless error loop on a missing or invalid API key. One behaviour change: Ctrl+C at a stage checkpoint now stops and saves the run.
@ianktoo
ianktoo merged commit 61c1990 into master Sep 24, 2026
20 checks passed
@ianktoo
ianktoo deleted the release/v2.6.0 branch September 24, 2026 22:30
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