Skip to content

Strengthen Beta Release Validation - #91

Merged
PSchmiedmayer merged 2 commits into
mainfrom
feature/beta-validation-follow-up
Jul 23, 2026
Merged

Strengthen Beta Release Validation#91
PSchmiedmayer merged 2 commits into
mainfrom
feature/beta-validation-follow-up

Conversation

@PSchmiedmayer

Copy link
Copy Markdown
Contributor

♻️ Current Situation & Problem

Beta 9 validation exposed an unconfigured Carina allocation path, ambiguous model-verification progress, and gaps in exact-output and rejection qualification.

⚙️ Release Notes

  • Stop recommendation-only launches before downloads or GPU allocation.
  • Complete installer cleanup before reporting success.
  • Require byte-exact output and a non-executed rejected action in capable-model qualification.
  • Prepare Heartwood 0.2.0 Beta 10.

📚 Documentation

Clarify Carina setup and verification, Terra compute ordering, persistent-disk recovery, and qualification evidence.

✅ Testing

  • Python: 817 tests with 90.05% coverage, Ruff, and mypy
  • Web: 73 tests, lint, type checking, and production build
  • Exact-commit native packaging and installer smoke suite

Code of Conduct & Contributing Guidelines

Copilot AI review requested due to automatic review settings July 23, 2026 08:18
@github-project-automation github-project-automation Bot moved this to Backlog in Heartwood Jul 23, 2026

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The project version and package metadata are updated from 0.2.0-beta.9 to 0.2.0-beta.10, along with container tags, installer URLs, fixtures, skills, and platform documentation. Installer completion now performs cleanup before reporting success. Launch plans distinguish selected models from recommendations and block runtime allocation until setup is complete. Coding-agent qualification now verifies approved and denied actions, exact output content, rejected-output absence, replay evidence, and expanded audit sanitization.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant LaunchPlanner
  participant LaunchRunner
  participant Runtime
  User->>LaunchPlanner: request runtime start
  LaunchPlanner-->>LaunchRunner: return recommendation-only plan
  LaunchRunner->>User: show setup guidance
  LaunchRunner-->>Runtime: stop with exit code 64
Loading
sequenceDiagram
  participant CodingAgent
  participant ConfirmationFlow
  participant Project
  participant QualificationVerifier
  CodingAgent->>ConfirmationFlow: submit approved action set
  ConfirmationFlow-->>Project: execute approved action
  CodingAgent->>ConfirmationFlow: submit denied action set
  ConfirmationFlow-->>Project: reject without modification
  QualificationVerifier->>Project: verify exact and rejected outputs
  QualificationVerifier->>ConfirmationFlow: verify replay and audit evidence
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 28.57% 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
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.
Title check ✅ Passed The title clearly summarizes the main change: strengthening beta release validation.
Description check ✅ Passed The description matches the changeset, covering launch gating, installer cleanup, qualification checks, docs, and Beta 10 prep.

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.

@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: 1

🧹 Nitpick comments (2)
packages/cli/tests/test_launch.py (1)

464-499: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Exercise the real plan builder in this regression test.

Because build_launch_plan is monkeypatched to return model_selected=False, this test only covers the downstream guard. It does not verify the new selection-to-plan wiring or directly assert that the download method was not called. Add a companion test using the real builder for an unselected project and assert that both download and allocation remain untouched.

As per coding guidelines, CLI behavior changes should include corresponding test coverage.

🤖 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 `@packages/cli/tests/test_launch.py` around lines 464 - 499, Update
test_recommended_model_cannot_download_or_allocate_before_setup to use the real
build_launch_plan instead of monkeypatching it, and configure the unselected
project through the existing test helpers. Add assertions or spies verifying
that neither the download nor allocation operation is invoked, while preserving
the existing exit-code, output, runner, and model-root checks; add a companion
test only if needed to keep the downstream guard coverage separate.

Source: Coding guidelines

images/generic/scripts/coding_agent_e2e.sh (1)

48-49: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Prompt strings duplicate the artifact filenames instead of using the variables.

exact_path/rejected_path are defined at Lines 48-49, but the prompts at Lines 144 and 156 hardcode heartwood-exact-output.txt / heartwood-rejected-output.txt as separate literals. A rename of one would silently desync from the other.

♻️ Use the variables' basenames in the prompts
-  --prompt "Call the terminal tool to execute this exact command: ${heartwood_python} ${runtime_root}/skills/verified/omop-cohort-summary/scripts/run.py --data-root input --target-condition-concept-id 201826 --minimum-age 18 --aggregate-count-floor 20 --output cohort-summary.json && printf 'heartwood-agent-exact-ok\n' > heartwood-exact-output.txt && cat cohort-summary.json. Do not describe the command as text and do not call another tool after it completes. Wait for the terminal result, then report the aggregate cohort result." \
+  --prompt "Call the terminal tool to execute this exact command: ${heartwood_python} ${runtime_root}/skills/verified/omop-cohort-summary/scripts/run.py --data-root input --target-condition-concept-id 201826 --minimum-age 18 --aggregate-count-floor 20 --output cohort-summary.json && printf 'heartwood-agent-exact-ok\n' > $(basename "${exact_path}") && cat cohort-summary.json. Do not describe the command as text and do not call another tool after it completes. Wait for the terminal result, then report the aggregate cohort result." \

Also applies to: 144-144, 156-156

🤖 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 `@images/generic/scripts/coding_agent_e2e.sh` around lines 48 - 49, Update the
prompts near the relevant output-validation steps to derive artifact basenames
from the existing exact_path and rejected_path variables instead of hardcoding
filenames. Keep the prompt paths consistent with those variables so future
renames cannot desynchronize them.
🤖 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 `@packages/cli/src/heartwood/cli/__init__.py`:
- Around line 102-107: Update the CLI tests covering the model preparation
status to assert the new label “Preparing and verifying the model,” waiting
label “Still preparing and verifying the model,” and guidance text about
downloads and verification taking several minutes. Use the existing test symbols
for this CLI output and preserve all unrelated assertions.

---

Nitpick comments:
In `@images/generic/scripts/coding_agent_e2e.sh`:
- Around line 48-49: Update the prompts near the relevant output-validation
steps to derive artifact basenames from the existing exact_path and
rejected_path variables instead of hardcoding filenames. Keep the prompt paths
consistent with those variables so future renames cannot desynchronize them.

In `@packages/cli/tests/test_launch.py`:
- Around line 464-499: Update
test_recommended_model_cannot_download_or_allocate_before_setup to use the real
build_launch_plan instead of monkeypatching it, and configure the unselected
project through the existing test helpers. Add assertions or spies verifying
that neither the download nor allocation operation is invoked, while preserving
the existing exit-code, output, runner, and model-root checks; add a companion
test only if needed to keep the downstream guard coverage separate.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5ef8a46c-9856-4569-9850-b8b437f959fc

📥 Commits

Reviewing files that changed from the base of the PR and between 1542893 and 803b1ee.

⛔ Files ignored due to path filters (2)
  • packages/webui/package-lock.json is excluded by !**/package-lock.json
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (57)
  • README.md
  • VERSION.toml
  • deploy/install.sh
  • docker-bake.hcl
  • documentation/architecture/testing.md
  • documentation/contribute/releases.md
  • documentation/models/offline.md
  • documentation/models/run-with-heartwood.md
  • documentation/platforms/carina.md
  • documentation/platforms/containers.md
  • documentation/platforms/native-linux.md
  • documentation/platforms/terra.md
  • documentation/reference/gpu-compatibility.md
  • fixtures/synthetic/skills/omop-cohort-summary/SKILL.md
  • fixtures/synthetic/skills/omop-cohort-summary/metadata.json
  • images/generic/scripts/coding_agent_e2e.sh
  • images/generic/scripts/verify_coding_agent_e2e.py
  • packages/adapters/pyproject.toml
  • packages/adapters/src/heartwood/adapters/__init__.py
  • packages/adapters/src/heartwood/adapters/conformance.py
  • packages/adapters/tests/test_conformance.py
  • packages/audit/pyproject.toml
  • packages/audit/src/heartwood/audit/__init__.py
  • packages/cli/pyproject.toml
  • packages/cli/src/heartwood/cli/__init__.py
  • packages/cli/src/heartwood/cli/_launch.py
  • packages/cli/tests/test_cli.py
  • packages/cli/tests/test_launch.py
  • packages/compliance/pyproject.toml
  • packages/compliance/src/heartwood/compliance/__init__.py
  • packages/compliance/tests/test_coding_agent_qualification.py
  • packages/compliance/tests/test_container_assets.py
  • packages/compliance/tests/test_release_governance.py
  • packages/core-adapter/pyproject.toml
  • packages/core-adapter/src/heartwood/core_adapter/__init__.py
  • packages/detector/pyproject.toml
  • packages/detector/src/heartwood/detector/__init__.py
  • packages/fixtures/pyproject.toml
  • packages/fixtures/src/heartwood/fixtures/__init__.py
  • packages/gateway/pyproject.toml
  • packages/model-policy/pyproject.toml
  • packages/model-policy/src/heartwood/model_policy/__init__.py
  • packages/notebook/pyproject.toml
  • packages/notebook/src/heartwood/notebook/__init__.py
  • packages/schemas/pyproject.toml
  • packages/schemas/src/heartwood/schemas/__init__.py
  • packages/schemas/tests/test_schema_records.py
  • packages/session/pyproject.toml
  • packages/session/src/heartwood/session/__init__.py
  • packages/skills/pyproject.toml
  • packages/webui/package.json
  • skills/verified/aggregate-export/SKILL.md
  • skills/verified/aggregate-export/metadata.json
  • skills/verified/baseline-model/SKILL.md
  • skills/verified/baseline-model/metadata.json
  • skills/verified/omop-cohort-summary/SKILL.md
  • skills/verified/omop-cohort-summary/metadata.json

Comment thread packages/cli/src/heartwood/cli/__init__.py
Copilot AI review requested due to automatic review settings July 23, 2026 08:39

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@PSchmiedmayer PSchmiedmayer reopened this Jul 23, 2026
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Heartwood Jul 23, 2026
@PSchmiedmayer
PSchmiedmayer merged commit 886ba53 into main Jul 23, 2026
53 of 64 checks passed
@PSchmiedmayer
PSchmiedmayer deleted the feature/beta-validation-follow-up branch July 23, 2026 08:59
@coderabbitai coderabbitai Bot mentioned this pull request Jul 24, 2026
1 task
@PSchmiedmayer PSchmiedmayer self-assigned this Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants