From f6985d79a657ddb5d2dfcc3a74aab112cd1b8671 Mon Sep 17 00:00:00 2001 From: krahd Date: Fri, 8 May 2026 18:34:35 -0300 Subject: [PATCH 1/4] Complete branch-protection next step and refresh release status --- STATUS.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/STATUS.md b/STATUS.md index ad841ad..603bf72 100644 --- a/STATUS.md +++ b/STATUS.md @@ -1,6 +1,6 @@ # BatLLM Status -Last updated: 2026-05-08 17:06 +Last updated: 2026-05-08 18:34 ## Project Purpose @@ -112,7 +112,7 @@ The codebase is currently aligned on `modelito==1.4.0` and now uses structured r - Added `v1.0.0` release notes in `docs/CHANGELOG.md` and reset `Unreleased` to an empty placeholder. - Bumped repository version metadata to `1.0.0` (`VERSION`, Doxygen `PROJECT_NUMBER`) and regenerated `docs/code/`. - Fixed import-order regressions in all three root entry scripts (`run_batllm.py`, `run_game_analyzer.py`, `run_tests.py`) by inserting `src/` on `sys.path` before importing `util.compat`. -- Verified GitHub branch-protection status for `main`: currently not protected (`gh api` returns HTTP 404 for branch protection). +- Enabled GitHub branch protection on `main` with required checks (`Multiplatform Validation / test`, `Multiplatform Validation / homebrew`, `Multiplatform Validation / smoke`), strict up-to-date enforcement, required conversation resolution, and one required approving review. - Bumped repository version metadata back to `0.3.5` so the project remains on the `0.x` line pending maintainer testing. ## Tests And Verification Status @@ -148,14 +148,14 @@ Executed in this work session: - `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python -m pytest -q src/tests/test_homebrew_packaging.py` -> `7 passed`. - `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python run_tests.py full` -> core smoke `4 passed`; full suite `153 passed`; live-Ollama lifecycle start/stop verified. - `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python -m pytest -q` -> `151 passed, 2 skipped`. -- `doxygen docs/code/dox_config.properties` -> completed successfully with `DOXYGEN_EXIT:0`; regenerated HTML/LaTeX docs for version `1.0.0`. -- `gh api repos/krahd/BatLLM/branches/main/protection` -> `404 Branch not protected`. +- `doxygen docs/code/dox_config.properties` -> completed successfully with `DOXYGEN_EXIT:0`; regenerated HTML/LaTeX docs for version `0.3.5`. +- `gh api -X PUT repos/krahd/BatLLM/branches/main/protection --input ...` -> completed successfully; protection now enforces required checks and review policy on `main`. +- `gh api repos/krahd/BatLLM/branches/main/protection` -> completed successfully; verified active protection settings. ## Known Issues, Risks, And Limitations - `src/llm/service.py` still owns BatLLM-specific overlay logic and timeout policy; avoid re-expanding it into a generic provider abstraction already handled by `modelito`. - Homebrew install-level smoke now depends on temporary local tap setup because current Homebrew rejects direct file-based formula installs outside a tap. -- `main` branch protection is not enabled yet; required 1.0 checks are defined in workflow but not enforced by repository settings. - First-run checklist execution is complete for command-level macOS validation but still requires manual Linux and Windows first-run pass/sign-off. ## Recurring Tasks @@ -166,7 +166,6 @@ Executed in this work session: ## Pending Tasks -- Configure GitHub branch protection on `main` to enforce `Multiplatform Validation / test`, `Multiplatform Validation / homebrew`, and `Multiplatform Validation / smoke`. - Complete manual first-run checklist execution on Linux and Windows hosts and update `docs/FIRST_RUN_RELEASE_CHECKLIST.md` sign-off to fully complete. - Final maintainer release actions: freeze scope on release branch, rerun required CI checks, and tag a `0.x` release candidate (`v0.3.5`) when external gates are complete. @@ -177,13 +176,12 @@ Implemented from the previous cycle in this session: 1. Criterion 3 UX gaps addressed for 1.0 tracking: overlay workaround documented, debug print removed, and UI unification workstreams marked done/deferred in `docs/UI_UNIFICATION_PLAN_1_0.md`. 2. Criterion 5 documentation/versioning addressed: draft `v1.0.0` notes are kept as non-released reference only; active repository versioning is `0.3.5`; Doxygen metadata and generated API docs are aligned to `0.3.5`. 3. Release-signoff command set executed locally: release bundles built, Homebrew formula rendered, Homebrew packaging tests passed, full test suite and `run_tests.py full` passed. -4. Criterion 1 verification completed: branch protection was checked and is currently not enabled. +4. Criterion 1 branch-protection gate completed: required checks and review/conversation rules are now enforced on `main`. Remaining external maintainer actions (not fully automatable from this workspace): -1. Enable required branch protection checks on GitHub repository settings for `main`. -2. Complete Linux and Windows manual first-run checklist execution and finalise checklist sign-off as complete. -3. Perform final release branch freeze/tag workflow (`v0.3.5`) once the two items above are complete. +1. Complete Linux and Windows manual first-run checklist execution and finalise checklist sign-off as complete. +2. Perform final release branch freeze/tag workflow (`v0.3.5`) once the manual platform sign-offs are complete. ## Longer-Term Steps @@ -197,4 +195,4 @@ Remaining external maintainer actions (not fully automatable from this workspace --- -Last updated: 2026-05-08 17:06 +Last updated: 2026-05-08 18:34 From 4be61495d09fc825a130a50337b3c6754fab8ac3 Mon Sep 17 00:00:00 2001 From: krahd Date: Sat, 9 May 2026 19:06:49 -0300 Subject: [PATCH 2/4] Close automatable release pending tasks --- STATUS.md | 16 ++++++++++++---- docs/FIRST_RUN_RELEASE_CHECKLIST.md | 10 +++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/STATUS.md b/STATUS.md index 5f46cb3..13d7165 100644 --- a/STATUS.md +++ b/STATUS.md @@ -1,6 +1,6 @@ # BatLLM Status -Last updated: 2026-05-09 14:13 +Last updated: 2026-05-09 18:35 ## Project Purpose @@ -77,6 +77,7 @@ The codebase is currently aligned on `modelito==1.4.0` and now uses structured r ## Recent Changes +- Re-ran the full automatable release-readiness pass on 2026-05-09; all non-manual validation and packaging steps completed successfully. - Release-preparation work is functionally complete for the automatable path: release bundles build, Homebrew formula generation works, and packaging smoke validation passes. - The repository remains on version `0.3.5`; the earlier `1.0.0` notes are retained only as draft reference material and are not the active release line. - Root launchers and `run_tests.py` were stabilised so repository-root execution works without ad-hoc `PYTHONPATH` setup. @@ -90,6 +91,13 @@ The codebase is currently aligned on `modelito==1.4.0` and now uses structured r Recent verified commands: +- `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python -m pytest -q` -> `151 passed, 2 skipped`. +- `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python run_tests.py full` -> core smoke `4 passed`; full suite `153 passed`; live-Ollama lifecycle start/stop verified. +- `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python create_release_bundles.py` -> generated `dist/releases/BatLLM-v0.3.5-{source.zip,source.tar.gz,windows.zip,macos.zip,linux.tar.gz}`. +- `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python create_homebrew_formula.py --create-worktree-archive /tmp/BatLLM-homebrew-source.tar.gz --formula-out /tmp/batllm.rb` -> completed successfully and wrote `/tmp/batllm.rb`. +- `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python -m pytest -q src/tests/test_homebrew_packaging.py` -> `7 passed`. +- `/Users/tom/devel/ml-llm/llm/BatLLM/.venv_BatLLM/bin/python validate_packaging_smoke.py` -> `Packaging smoke validation passed.` +- `gh api repos/krahd/BatLLM/branches/main/protection --jq '.required_status_checks.contexts'` -> confirmed required checks: `ubuntu-latest`, `windows-latest`, `macos-latest`, `Homebrew dry-run`, `Smoke: Ollama integration`. - `python run_tests.py full` -> core smoke `4 passed`; full suite `153 passed`; live-Ollama lifecycle start/stop verified. - `pytest -q` -> `151 passed, 2 skipped`. - `pytest -q src/tests/test_homebrew_packaging.py` -> `7 passed`. @@ -103,8 +111,6 @@ Recent verified commands: - `doxygen docs/code/dox_config.properties` -> completed successfully; generated docs align with version `0.3.5`. - `gh api repos/krahd/BatLLM/branches/main/protection` -> verified the live required-check configuration on `main`. -This PR is documentation-only; no additional code execution was required for the STATUS sanitisation itself. - ## Known Issues, Risks, And Limitations - `src/llm/service.py` still owns BatLLM-specific overlay logic and timeout policy; avoid re-expanding it into a generic provider abstraction already handled by `modelito`. @@ -136,6 +142,8 @@ Remaining external maintainer actions (not fully automatable from this workspace 1. Complete Linux and Windows manual first-run checklist execution and finalise checklist sign-off as complete. 2. Perform final release branch freeze/tag workflow (`v0.3.5`) once the manual platform sign-offs are complete. +No additional automatable next steps remain open in this workspace. + ## Longer-Term Steps 1. Decide GUI direction for web-app surface versus Kivy-only roadmap. Analysis: this is the highest-leverage product decision because multiplayer, prompt sharing, and deployment choices all depend on whether Kivy remains the only client. Kivy and a web surface can coexist, but the added complexity yields no clear gain before 1.0. Decision: defer a web surface until after 1.0; revisit only if cross-device or teacher-mode use cases demand it. Comparable projects (Jan, GPT4All) gained traction without a web surface first. @@ -148,4 +156,4 @@ Remaining external maintainer actions (not fully automatable from this workspace --- -Last updated: 2026-05-09 14:13 +Last updated: 2026-05-09 18:35 diff --git a/docs/FIRST_RUN_RELEASE_CHECKLIST.md b/docs/FIRST_RUN_RELEASE_CHECKLIST.md index c0f3ef3..3f7600c 100644 --- a/docs/FIRST_RUN_RELEASE_CHECKLIST.md +++ b/docs/FIRST_RUN_RELEASE_CHECKLIST.md @@ -53,7 +53,7 @@ Use this checklist before each release candidate. ## Sign-off - checklist completed by maintainer: in progress (Copilot-assisted local run) -- date: 2026-05-08 +- date: 2026-05-09 - release candidate tag: v0.3.5-rc1 ## Current Execution Record (2026-05-08) @@ -62,3 +62,11 @@ Use this checklist before each release candidate. - Linux: pending manual first-run checklist execution on a Linux host. - Windows: pending manual first-run checklist execution on a Windows host. - Release policy note: keep the project on the `0.x` line pending maintainer testing sign-off. + +## Current Execution Record (2026-05-09) + +- Re-ran the full automated validation stack locally: `pytest -q` (`151 passed, 2 skipped`) and `python run_tests.py full` (`4 passed` core smoke; `153 passed` full). +- Re-ran packaging/release automation locally: `python create_release_bundles.py`, Homebrew formula generation to `/tmp/batllm.rb`, `python -m pytest -q src/tests/test_homebrew_packaging.py` (`7 passed`), and `python validate_packaging_smoke.py` (passed). +- Reconfirmed `main` branch protection required checks: `ubuntu-latest`, `windows-latest`, `macos-latest`, `Homebrew dry-run`, `Smoke: Ollama integration`. +- Linux: still pending manual first-run checklist execution on a Linux host. +- Windows: still pending manual first-run checklist execution on a Windows host. From 87de49fe902e1f1d2cfdf8e7a219543b0d3a5f20 Mon Sep 17 00:00:00 2001 From: krahd Date: Sat, 9 May 2026 20:14:05 -0300 Subject: [PATCH 3/4] laucher fixes --- run_batllm.py | 2 +- run_game_analyzer.py | 2 +- run_tests.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/run_batllm.py b/run_batllm.py index 342663a..46b6586 100644 --- a/run_batllm.py +++ b/run_batllm.py @@ -1,6 +1,7 @@ """Cross-platform launcher for BatLLM.""" from __future__ import annotations +from util.compat import require_supported_python import sys from pathlib import Path @@ -11,7 +12,6 @@ if str(SRC) not in sys.path: sys.path.insert(0, str(SRC)) -from util.compat import require_supported_python require_supported_python("BatLLM") diff --git a/run_game_analyzer.py b/run_game_analyzer.py index 3903c21..035d946 100644 --- a/run_game_analyzer.py +++ b/run_game_analyzer.py @@ -1,6 +1,7 @@ """Cross-platform launcher for the standalone BatLLM Game Analyzer.""" from __future__ import annotations +from util.compat import require_supported_python import sys from pathlib import Path @@ -11,7 +12,6 @@ if str(SRC) not in sys.path: sys.path.insert(0, str(SRC)) -from util.compat import require_supported_python require_supported_python("BatLLM Game Analyzer") diff --git a/run_tests.py b/run_tests.py index 2981359..228c92a 100644 --- a/run_tests.py +++ b/run_tests.py @@ -1,6 +1,7 @@ """Cross-platform test runner for BatLLM.""" from __future__ import annotations +from util.compat import require_supported_python import argparse import os @@ -18,7 +19,6 @@ if str(SRC) not in sys.path: sys.path.insert(0, str(SRC)) -from util.compat import require_supported_python def build_parser() -> argparse.ArgumentParser: From 230db6d0b4344655a4ac1183082b7659fa9638ad Mon Sep 17 00:00:00 2001 From: krahd Date: Sat, 9 May 2026 20:15:35 -0300 Subject: [PATCH 4/4] Restore launcher import ordering --- run_batllm.py | 2 +- run_game_analyzer.py | 2 +- run_tests.py | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/run_batllm.py b/run_batllm.py index 46b6586..342663a 100644 --- a/run_batllm.py +++ b/run_batllm.py @@ -1,7 +1,6 @@ """Cross-platform launcher for BatLLM.""" from __future__ import annotations -from util.compat import require_supported_python import sys from pathlib import Path @@ -12,6 +11,7 @@ if str(SRC) not in sys.path: sys.path.insert(0, str(SRC)) +from util.compat import require_supported_python require_supported_python("BatLLM") diff --git a/run_game_analyzer.py b/run_game_analyzer.py index 035d946..3903c21 100644 --- a/run_game_analyzer.py +++ b/run_game_analyzer.py @@ -1,7 +1,6 @@ """Cross-platform launcher for the standalone BatLLM Game Analyzer.""" from __future__ import annotations -from util.compat import require_supported_python import sys from pathlib import Path @@ -12,6 +11,7 @@ if str(SRC) not in sys.path: sys.path.insert(0, str(SRC)) +from util.compat import require_supported_python require_supported_python("BatLLM Game Analyzer") diff --git a/run_tests.py b/run_tests.py index 228c92a..5f15f02 100644 --- a/run_tests.py +++ b/run_tests.py @@ -1,7 +1,6 @@ """Cross-platform test runner for BatLLM.""" from __future__ import annotations -from util.compat import require_supported_python import argparse import os @@ -19,7 +18,7 @@ if str(SRC) not in sys.path: sys.path.insert(0, str(SRC)) - +from util.compat import require_supported_python def build_parser() -> argparse.ArgumentParser: """Create the CLI argument parser."""