Skip to content

Validate and Harden the Carina Workflow - #63

Merged
PSchmiedmayer merged 6 commits into
mainfrom
testing/carina
Jul 18, 2026
Merged

Validate and Harden the Carina Workflow#63
PSchmiedmayer merged 6 commits into
mainfrom
testing/carina

Conversation

@PSchmiedmayer

Copy link
Copy Markdown
Contributor

♻️ Current situation & Problem

Related to #25, #34, and #22.

The Carina workflow required live end-to-end validation against the documented installation, model setup, Slurm allocation, inference, action-review, replay, audit, and cleanup paths.

The previous installation workflow required callers to supply redundant installation and release inputs, while package-manager homes, caches, and temporary files were not comprehensively confined to the selected installation directory. Live validation also exposed GPU runtime compatibility issues, incomplete structured-action presentation, session lifecycle edge cases, and documentation that did not fully describe the validated workflow or its limitations.

This pull request incorporates the findings from a complete synthetic Carina validation into the implementation, permanent documentation, and regression tests. It removes the temporary validation artifacts after preserving their durable findings.

⚙️ Release Notes

  • Prepare Heartwood 0.2.0-beta.3 across all Python packages, runtime constants, web manifests, lockfiles, Skills, fixtures, notebooks, image examples, and release documentation.
  • Install Heartwood into the current directory by default.
  • Bind each published native installer to its matching release bundle and remove the redundant installer --version option.
  • Replace the installer free-space environment override with the explicit --minimum-free-gib argument.
  • Confine installer homes, downloads, caches, configuration, and temporary files to <installation-root>/.installer/.
  • Remove transient installer state after successful installation while preserving it after an interrupted runtime installation so the operation can resume.
  • Keep the bootstrap Python runtime persistent and prohibit implicit package-manager Python downloads.
  • Bind Carina platform selection into the installed Heartwood launcher.
  • Harden the vLLM compatibility boundary in the primary and spawned Python processes.
  • Improve model staging cleanup, runtime diagnostics, Carina allocation handoff, session lifecycle handling, structured-action review, replay, and audit presentation.
  • Show complete terminal and file-action arguments before confirmation across the CLI, notebook, and web interfaces.
  • Preserve content-minimized, permission-restricted audit records while retaining private diagnostic information required for troubleshooting.
  • Document the validated Carina workflow, allocation behavior, cleanup contract, action-review expectations, and the limitations of free-form model output.
  • Remove the temporary validation/ directory after moving its findings into maintained documentation and automated tests.

Migration for the native installer:

cd /projects/<project-owner>/<project-id>/heartwood-installation
./heartwood-installer --platform carina

The installer now infers the installation root from the current directory and its release from the published installer. Existing automation may continue to use --root <path>. Callers must remove the obsolete --version option and use --minimum-free-gib <N> instead of HEARTWOOD_INSTALL_MINIMUM_FREE_GIB.

See docs/carina-cli.md, docs/platform-support.md, and docs/troubleshooting.md.

📚 Documentation

  • Reworked docs/carina-cli.md into a complete copy-and-follow installation and synthetic-validation workflow.
  • Updated installation, deployment, container-image, offline, Terra, release, usage, and troubleshooting documentation for 0.2.0-beta.3.
  • Documented current-directory inference, release-bound installers, installation cleanup, resumability, project boundaries, model-transfer cleanup, and Carina GPU-allocation behavior.
  • Documented that deterministic Skill output and successful tool execution do not establish scientific or clinical validity.
  • Recorded the live synthetic Carina evidence and its explicit limitations in docs/platform-support.md.
  • Updated the architecture and audit design documents for structured action arguments, replay, and content-minimized audit behavior.
  • Removed temporary validation notes after incorporating their findings into canonical documentation and regression tests.

Screenshots were not added because the supported Carina presentation is terminal-based and the relevant commands, review fields, and expected states are documented directly without exposing environment-specific information.

✅ Testing

Local validation completed:

  • Native installer smoke test passed for generic and Carina installations.
    • Verifies current-directory installation.
    • Verifies release stamping and bundle-version matching.
    • Rejects the removed --version option.
    • Verifies installation-state and cache confinement.
    • Verifies successful cleanup and resumable repeated installation.
    • Verifies checksum and unsafe-path rejection.
    • Verifies persistent bootstrap Python and spawned-process GPU protections.
  • Ruff formatting and lint checks passed.
  • Mypy passed for 103 source files.
  • Shell syntax and ShellCheck passed for the modified deployment scripts.
  • Strict documentation staging and build passed.
  • Release-version verification passed for 0.2.0-beta.3.
  • All current version declarations were audited; the only remaining beta.2 references are intentional historical-version documentation fixtures.
  • Web UI formatting, lint, type checking, production build, and license checks passed.
  • 63 web UI tests passed.
  • Python test execution reached 610 passing tests with 90.25% coverage. Two synthetic localhost-server tests could not bind loopback sockets under the local workspace sandbox and must be confirmed by GitHub Actions.
  • 88 directly relevant compliance tests passed; the one deselected test is the same loopback-bound registry fixture.

Regression coverage was added or expanded for:

  • Installer defaults, release binding, cleanup, confinement, and resumability.
  • Carina bootstrap and vLLM child-process compatibility.
  • Model snapshot cleanup and runtime validation.
  • Slurm handoff and project-directory preservation.
  • Structured terminal and file-action arguments.
  • Action exclusion, rejection, replay, and audit behavior.
  • Session idle/resume and lifecycle handling.
  • CLI, notebook, and web action presentation.
  • Release governance and documentation consistency.

Code of Conduct & Contributing Guidelines

@PSchmiedmayer PSchmiedmayer self-assigned this Jul 17, 2026
Copilot AI review requested due to automatic review settings July 17, 2026 14:44
@PSchmiedmayer PSchmiedmayer added the enhancement New feature or request label Jul 17, 2026
@github-project-automation github-project-automation Bot moved this to Backlog in Heartwood Jul 17, 2026
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@PSchmiedmayer, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 37 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6bdb15a6-5167-4040-a001-416e577b7e88

📥 Commits

Reviewing files that changed from the base of the PR and between 3d6bade and 2d4561a.

📒 Files selected for processing (9)
  • .github/workflows/dependency-review.yml
  • .github/workflows/main-validation.yml
  • design/08-development.md
  • docs/platform-support.md
  • packages/compliance/tests/test_container_assets.py
  • packages/compliance/tests/test_release_governance.py
  • packages/webui/src/App.test.tsx
  • packages/webui/src/components/ConversationWorkspace.tsx
  • packages/webui/src/styles.css
📝 Walkthrough

Walkthrough

This release bumps Heartwood to 0.2.0-beta.3. Native installation now confines temporary state and caches under .installer, validates release and bundle compatibility, and supports platform-specific launchers. Structured tool arguments flow through schemas, OpenHands translation, session persistence, audit projections, and CLI, notebook, and web interfaces. Audit exports scrub arguments and detailed error reasons. GPU runtime activation is centralized and propagated to child interpreters. Documentation and release validation are updated accordingly.

Sequence Diagram(s)

sequenceDiagram
  participant OpenHands
  participant Gateway
  participant Session
  participant ApprovalUI
  participant Audit
  OpenHands->>Gateway: propose tool call with arguments
  Gateway->>Session: record proposal and confirmation request
  Session->>ApprovalUI: project structured arguments
  ApprovalUI->>Session: record approval decision
  Session->>Audit: derive persisted audit event
  Audit->>Audit: scrub sensitive arguments and error details
Loading

Possibly related issues

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 21.95% 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 clearly summarizes the main change: validating and hardening the Carina workflow.
Description check ✅ Passed The description is directly related to the changeset and accurately describes the Carina validation and hardening work.
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.

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.

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.

Pull request overview

Prepares the 0.2.0-beta.3 release while incorporating findings from a full synthetic Stanford Carina validation: tightening native-install confinement/resumability, hardening the vLLM compatibility boundary (including child processes), and ensuring action-review surfaces show complete structured tool arguments across CLI, notebook, and web UI while keeping audit exports content-minimized.

Changes:

  • Bump release/version markers to 0.2.0-beta.3 (and 0.2.0b3 in the Python lock) across packages, Skills, fixtures, docs, and governance checks.
  • Plumb and render exact structured tool-call arguments through schemas → gateway → core-adapter → interfaces (CLI/web/notebook), including replay after resolution.
  • Harden native installer + GPU runtime boundaries (confining installer state under <root>/.installer/, release-stamping installers, resumability, audit/error scrubbing, and vLLM child-process bootstrap validation).

Reviewed changes

Copilot reviewed 86 out of 88 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
VERSION.toml Bumps canonical release version to 0.2.0-beta.3.
uv.lock Updates workspace package versions to 0.2.0b3.
skills/verified/omop-cohort-summary/SKILL.md Updates Skill metadata version to beta.3.
skills/verified/omop-cohort-summary/metadata.json Updates Skill metadata version to beta.3.
skills/verified/baseline-model/SKILL.md Updates Skill metadata version to beta.3.
skills/verified/baseline-model/metadata.json Updates Skill metadata version to beta.3.
skills/verified/aggregate-export/SKILL.md Updates Skill metadata version to beta.3.
skills/verified/aggregate-export/metadata.json Updates Skill metadata version to beta.3.
packages/webui/src/viewModel.ts Renders proposed-tool details including structured arguments.
packages/webui/src/viewModel.test.ts Adds/updates tests for preserving arguments in UI + replay.
packages/webui/src/types.ts Extends approval-control type with arguments.
packages/webui/src/test/fixtures.ts Updates synthetic events to include tool arguments.
packages/webui/src/styles.css Adds wrapping + styling for multi-line argument details.
packages/webui/src/components/ConversationWorkspace.tsx Displays JSON arguments for approval items in the web UI.
packages/webui/package.json Bumps web UI package version to beta.3.
packages/webui/package-lock.json Bumps lockfile version metadata to beta.3.
packages/skills/pyproject.toml Bumps heartwood-skills to beta.3.
packages/session/src/heartwood/session/init.py Bumps session package __version__.
packages/session/pyproject.toml Bumps heartwood-session to beta.3.
packages/schemas/tests/test_schema_records.py Updates schema/tests for version + confirmation arguments.
packages/schemas/src/heartwood/schemas/_records.py Adds arguments to ConfirmationRequest.
packages/schemas/src/heartwood/schemas/init.py Bumps schemas package __version__.
packages/schemas/pyproject.toml Bumps heartwood-schemas to beta.3.
packages/notebook/tests/test_notebook.py Updates notebook approval formatting expectations to include arguments.
packages/notebook/src/heartwood/notebook/_widgets.py Renders action arguments in notebook approval items.
packages/notebook/src/heartwood/notebook/_view_model.py Plumbs arguments into notebook view model.
packages/notebook/src/heartwood/notebook/init.py Bumps notebook package __version__.
packages/notebook/pyproject.toml Bumps heartwood-notebook to beta.3.
packages/model-policy/src/heartwood/model_policy/init.py Bumps model-policy __version__.
packages/model-policy/pyproject.toml Bumps heartwood-model-policy to beta.3.
packages/gateway/tests/test_openhands_sdk.py Adds coverage for argument capture, validation exclusion, pause/resume behavior.
packages/gateway/tests/test_model_snapshots.py Verifies Hugging Face download cache confinement + no implicit token.
packages/gateway/src/heartwood/gateway/_openhands_sdk.py Captures exact tool args, filters invalid tool calls, refines pause/resume, improves error translation.
packages/gateway/src/heartwood/gateway/_model_snapshots.py Constrains snapshot download cache location + disables HF token.
packages/gateway/pyproject.toml Bumps heartwood-gateway to beta.3.
packages/fixtures/src/heartwood/fixtures/init.py Bumps fixtures package __version__.
packages/fixtures/pyproject.toml Bumps heartwood-fixtures to beta.3.
packages/detector/src/heartwood/detector/init.py Bumps detector package __version__.
packages/detector/pyproject.toml Bumps heartwood-detector to beta.3.
packages/core-adapter/tests/test_session_service.py Ensures arguments persist, and audit scrubs detailed error reasons.
packages/core-adapter/src/heartwood/core_adapter/_service.py Records arguments on tool/confirmation events; scrubs error reasons for audit log.
packages/core-adapter/src/heartwood/core_adapter/_facade.py Extends ProposedToolCall with arguments.
packages/core-adapter/src/heartwood/core_adapter/init.py Bumps core-adapter __version__.
packages/core-adapter/pyproject.toml Bumps heartwood-core-adapter to beta.3.
packages/compliance/tests/test_release_governance.py Updates release-governance checks for new installer behavior/version.
packages/compliance/tests/test_documentation_assets.py Adds/updates assertions for Carina runbook + installer defaults and confinement.
packages/compliance/tests/test_container_assets.py Verifies GPU runtime boundary hardening + child bootstrap inclusion.
packages/compliance/src/heartwood/compliance/init.py Bumps compliance __version__.
packages/compliance/pyproject.toml Bumps heartwood-compliance to beta.3.
packages/cli/tests/test_launch.py Adds runtime-exit messaging test + copy-progress ETA stabilization test.
packages/cli/tests/test_interactive.py Ensures CLI formatting shows arguments in pending/replay views.
packages/cli/src/heartwood/cli/_tui.py Shows structured arguments in TUI approval list.
packages/cli/src/heartwood/cli/_launch.py Improves runtime failure messaging + copy-progress status output.
packages/cli/src/heartwood/cli/_interactive.py Adds arguments to pending actions + shared formatting helper.
packages/cli/src/heartwood/cli/init.py Renders proposed-action arguments in event formatting and exports helper.
packages/cli/pyproject.toml Bumps heartwood-cli to beta.3.
packages/audit/tests/test_audit_log.py Ensures audit export scrubs arguments and other sensitive fields.
packages/audit/src/heartwood/audit/_log.py Treats arguments as sensitive in scrubber.
packages/audit/src/heartwood/audit/init.py Bumps audit __version__.
packages/audit/pyproject.toml Bumps heartwood-audit to beta.3.
packages/adapters/tests/test_conformance.py Updates conformance fixtures to beta.3.
packages/adapters/src/heartwood/adapters/conformance.py Updates default expected Skill version to beta.3.
packages/adapters/src/heartwood/adapters/init.py Bumps adapters __version__.
packages/adapters/pyproject.toml Bumps heartwood-adapters to beta.3.
images/platform/Dockerfile Installs GPU runtime child bootstrap into image runtime bin.
images/gpu/sitecustomize.py New: applies reviewed vLLM boundary in child interpreters.
images/gpu/heartwood-vllm Ensures runtime bin is on PYTHONPATH before launching Python.
images/gpu/heartwood_vllm.py Idempotent boundary, child bootstrap config, and child import verification.
images/generic/Dockerfile Installs GPU runtime child bootstrap into image runtime bin.
fixtures/synthetic/skills/omop-cohort-summary/SKILL.md Bumps fixture Skill version to beta.3.
fixtures/synthetic/skills/omop-cohort-summary/metadata.json Bumps fixture Skill version to beta.3.
docs/using-heartwood.md Documents pause/resume semantics without re-running model calls.
docs/troubleshooting.md Adds Carina installer quota + action-argument review guidance.
docs/terra-jupyter-demo.md Updates Terra image tags to beta.3.
docs/terra-jupyter-demo.ipynb Updates Terra tutorial image tags to beta.3.
docs/releases.md Updates release commands/examples to beta.3 and PEP440 note.
docs/platform-support.md Updates platform evidence to beta.3 and records Carina validation evidence.
docs/getting-started-offline.md Updates offline image tags to beta.3.
docs/deployment.md Clarifies native install root vs project root and installer confinement/cleanup.
docs/container-images.md Updates image tags and examples to beta.3.
docs/carina-cli.md Reworks Carina runbook: current-dir install root, release-bound installer, cleanup/resume.
design/06-observability-audit.md Updates audit boundary semantics re: arguments + error-detail minimization.
design/03-architecture.md Documents HF cache confinement and vLLM child-process boundary.
deploy/verify_release_candidate.py Removes obsolete --version requirement from release verification.
deploy/tests/native_installer_smoke.sh Expands installer smoke tests: confinement, version binding, cleanup, bootstrap python.
deploy/package-native.sh Stamps installer with release version; validates safe version string.
deploy/install.sh Makes current directory the default root; removes --version; adds --minimum-free-gib; confines installer state; release/bundle match enforcement; Carina platform binding.
deploy/carina/bootstrap.sh Constrains bootstrap env + cache dirs; uses persistent bootstrap Python; installs child bootstrap.
Files not reviewed (1)
  • packages/webui/package-lock.json: Generated file

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/webui/src/components/ConversationWorkspace.tsx
Comment thread packages/webui/src/styles.css
…ing/carina

# Conflicts:
#	images/gpu/heartwood_vllm.py
#	images/gpu/sitecustomize.py
#	packages/cli/src/heartwood/cli/_launch.py
#	packages/cli/tests/test_launch.py
#	packages/compliance/tests/test_container_assets.py
#	packages/gateway/src/heartwood/gateway/_openhands_sdk.py
#	packages/gateway/tests/test_openhands_sdk.py

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

🧹 Nitpick comments (2)
packages/cli/src/heartwood/cli/_tui.py (1)

206-212: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Indent action arguments for visual alignment.

The lines returned by format_action_arguments do not include a baseline indentation to match the TUI's list structure. Consider prepending spaces to each line so the JSON payload aligns properly beneath the Arguments: header.

🎨 Proposed formatting fix
         for index, action in enumerate(actions, 1):
             details = [
                 f"{index}. {action.summary}",
                 f"   {action.tool_name} · {action.risk.title()} risk",
             ]
             if action.arguments:
-                details.extend(("   Arguments:", *format_action_arguments(action.arguments)))
+                details.extend(
+                    (
+                        "   Arguments:",
+                        *(f"      {line}" for line in format_action_arguments(action.arguments)),
+                    )
+                )
             action_log.write("\n".join(details))
🤖 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/src/heartwood/cli/_tui.py` around lines 206 - 212, Update the
action argument rendering in the surrounding action-log flow to prepend the
required baseline indentation to every line returned by format_action_arguments,
so the JSON payload aligns beneath the “Arguments:” header while preserving the
existing formatting and conditional behavior.
packages/audit/tests/test_audit_log.py (1)

68-85: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Assert that arguments is scrubbed in the exported payload.

The test appropriately asserts that "python run.py" is not in the persisted raw log, but for completeness, consider also verifying that the arguments key itself is replaced with "[scrubbed]" in the parsed exported dictionary, matching the other payload fields.

💡 Proposed addition
     assert exported["payload"]["apiKey"] == "[scrubbed]"
     assert exported["payload"]["nested"]["Authorization"] == "[scrubbed]"
     assert exported["payload"]["nested"]["client_secret"] == "[scrubbed]"
+    assert exported["payload"]["arguments"] == "[scrubbed]"
🤖 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/audit/tests/test_audit_log.py` around lines 68 - 85, Extend the
audit log assertions after parsing the exported payload to verify that the
arguments field is replaced with "[scrubbed]". Keep the existing
persisted-content checks and align this assertion with the scrubbing
expectations for the other payload fields.
🤖 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 `@docs/platform-support.md`:
- Line 26: Replace the relative beta reference on docs/platform-support.md lines
26-26 with the explicit 0.2.0-beta.2 platform identifier, preserving the
existing validation status; also replace “the preceding beta artifact” on
docs/platform-support.md lines 45-45 with the exact 0.2.0-beta.2 artifact
identifier.

In `@packages/compliance/tests/test_container_assets.py`:
- Line 493: Update the assertion in the relevant test to inspect the packager
script content, using the existing symbol or fixture that loads
deploy/package-native.sh, instead of checking installer. Preserve the regex
assertion unchanged.

---

Nitpick comments:
In `@packages/audit/tests/test_audit_log.py`:
- Around line 68-85: Extend the audit log assertions after parsing the exported
payload to verify that the arguments field is replaced with "[scrubbed]". Keep
the existing persisted-content checks and align this assertion with the
scrubbing expectations for the other payload fields.

In `@packages/cli/src/heartwood/cli/_tui.py`:
- Around line 206-212: Update the action argument rendering in the surrounding
action-log flow to prepend the required baseline indentation to every line
returned by format_action_arguments, so the JSON payload aligns beneath the
“Arguments:” header while preserving the existing formatting and conditional
behavior.
🪄 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: 99869a7b-93a0-4b46-9461-47e0269ca756

📥 Commits

Reviewing files that changed from the base of the PR and between 3c44df7 and 3d6bade.

⛔ 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 (83)
  • VERSION.toml
  • deploy/carina/bootstrap.sh
  • deploy/install.sh
  • deploy/package-native.sh
  • deploy/tests/native_installer_smoke.sh
  • deploy/verify_release_candidate.py
  • design/03-architecture.md
  • design/06-observability-audit.md
  • docs/carina-cli.md
  • docs/container-images.md
  • docs/deployment.md
  • docs/getting-started-offline.md
  • docs/platform-support.md
  • docs/releases.md
  • docs/terra-jupyter-demo.ipynb
  • docs/terra-jupyter-demo.md
  • docs/troubleshooting.md
  • docs/using-heartwood.md
  • fixtures/synthetic/skills/omop-cohort-summary/SKILL.md
  • fixtures/synthetic/skills/omop-cohort-summary/metadata.json
  • images/gpu/heartwood_vllm.py
  • images/gpu/sitecustomize.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/audit/src/heartwood/audit/_log.py
  • packages/audit/tests/test_audit_log.py
  • packages/cli/pyproject.toml
  • packages/cli/src/heartwood/cli/__init__.py
  • packages/cli/src/heartwood/cli/_interactive.py
  • packages/cli/src/heartwood/cli/_launch.py
  • packages/cli/src/heartwood/cli/_tui.py
  • packages/cli/tests/test_interactive.py
  • packages/cli/tests/test_launch.py
  • packages/compliance/pyproject.toml
  • packages/compliance/src/heartwood/compliance/__init__.py
  • packages/compliance/tests/test_container_assets.py
  • packages/compliance/tests/test_documentation_assets.py
  • packages/compliance/tests/test_release_governance.py
  • packages/core-adapter/pyproject.toml
  • packages/core-adapter/src/heartwood/core_adapter/__init__.py
  • packages/core-adapter/src/heartwood/core_adapter/_facade.py
  • packages/core-adapter/src/heartwood/core_adapter/_service.py
  • packages/core-adapter/tests/test_session_service.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/gateway/src/heartwood/gateway/_model_snapshots.py
  • packages/gateway/src/heartwood/gateway/_openhands_sdk.py
  • packages/gateway/tests/test_model_snapshots.py
  • packages/gateway/tests/test_openhands_sdk.py
  • 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/notebook/src/heartwood/notebook/_view_model.py
  • packages/notebook/src/heartwood/notebook/_widgets.py
  • packages/notebook/tests/test_notebook.py
  • packages/schemas/pyproject.toml
  • packages/schemas/src/heartwood/schemas/__init__.py
  • packages/schemas/src/heartwood/schemas/_records.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
  • packages/webui/src/components/ConversationWorkspace.tsx
  • packages/webui/src/styles.css
  • packages/webui/src/test/fixtures.ts
  • packages/webui/src/types.ts
  • packages/webui/src/viewModel.test.ts
  • packages/webui/src/viewModel.ts
  • 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
💤 Files with no reviewable changes (1)
  • deploy/verify_release_candidate.py

Comment thread docs/platform-support.md Outdated
Comment thread packages/compliance/tests/test_container_assets.py
@PSchmiedmayer
PSchmiedmayer merged commit 2cd634f into main Jul 18, 2026
28 checks passed
@PSchmiedmayer
PSchmiedmayer deleted the testing/carina branch July 18, 2026 01:39
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Heartwood Jul 18, 2026
PSchmiedmayer added a commit that referenced this pull request Jul 18, 2026
### ♻️ Current situation & Problem

Related to #25, #34, and #22.

The Carina workflow required live end-to-end validation against the
documented installation, model setup, Slurm allocation, inference,
action-review, replay, audit, and cleanup paths.

The previous installation workflow required callers to supply redundant
installation and release inputs, while package-manager homes, caches,
and temporary files were not comprehensively confined to the selected
installation directory. Live validation also exposed GPU runtime
compatibility issues, incomplete structured-action presentation, session
lifecycle edge cases, and documentation that did not fully describe the
validated workflow or its limitations.

This pull request incorporates the findings from a complete synthetic
Carina validation into the implementation, permanent documentation, and
regression tests. It removes the temporary validation artifacts after
preserving their durable findings.

### ⚙️ Release Notes

- Prepare Heartwood `0.2.0-beta.3` across all Python packages, runtime
constants, web manifests, lockfiles, Skills, fixtures, notebooks, image
examples, and release documentation.
- Install Heartwood into the current directory by default.
- Bind each published native installer to its matching release bundle
and remove the redundant installer `--version` option.
- Replace the installer free-space environment override with the
explicit `--minimum-free-gib` argument.
- Confine installer homes, downloads, caches, configuration, and
temporary files to `<installation-root>/.installer/`.
- Remove transient installer state after successful installation while
preserving it after an interrupted runtime installation so the operation
can resume.
- Keep the bootstrap Python runtime persistent and prohibit implicit
package-manager Python downloads.
- Bind Carina platform selection into the installed Heartwood launcher.
- Harden the vLLM compatibility boundary in the primary and spawned
Python processes.
- Improve model staging cleanup, runtime diagnostics, Carina allocation
handoff, session lifecycle handling, structured-action review, replay,
and audit presentation.
- Show complete terminal and file-action arguments before confirmation
across the CLI, notebook, and web interfaces.
- Preserve content-minimized, permission-restricted audit records while
retaining private diagnostic information required for troubleshooting.
- Document the validated Carina workflow, allocation behavior, cleanup
contract, action-review expectations, and the limitations of free-form
model output.
- Remove the temporary `validation/` directory after moving its findings
into maintained documentation and automated tests.

Migration for the native installer:

```bash
cd /projects/<project-owner>/<project-id>/heartwood-installation
./heartwood-installer --platform carina
```

The installer now infers the installation root from the current
directory and its release from the published installer. Existing
automation may continue to use `--root <path>`. Callers must remove the
obsolete `--version` option and use `--minimum-free-gib <N>` instead of
`HEARTWOOD_INSTALL_MINIMUM_FREE_GIB`.

See `docs/carina-cli.md`, `docs/platform-support.md`, and
`docs/troubleshooting.md`.

### 📚 Documentation

- Reworked `docs/carina-cli.md` into a complete copy-and-follow
installation and synthetic-validation workflow.
- Updated installation, deployment, container-image, offline, Terra,
release, usage, and troubleshooting documentation for `0.2.0-beta.3`.
- Documented current-directory inference, release-bound installers,
installation cleanup, resumability, project boundaries, model-transfer
cleanup, and Carina GPU-allocation behavior.
- Documented that deterministic Skill output and successful tool
execution do not establish scientific or clinical validity.
- Recorded the live synthetic Carina evidence and its explicit
limitations in `docs/platform-support.md`.
- Updated the architecture and audit design documents for structured
action arguments, replay, and content-minimized audit behavior.
- Removed temporary validation notes after incorporating their findings
into canonical documentation and regression tests.

Screenshots were not added because the supported Carina presentation is
terminal-based and the relevant commands, review fields, and expected
states are documented directly without exposing environment-specific
information.

### ✅ Testing

Local validation completed:

- Native installer smoke test passed for generic and Carina
installations.
  - Verifies current-directory installation.
  - Verifies release stamping and bundle-version matching.
  - Rejects the removed `--version` option.
  - Verifies installation-state and cache confinement.
  - Verifies successful cleanup and resumable repeated installation.
  - Verifies checksum and unsafe-path rejection.
- Verifies persistent bootstrap Python and spawned-process GPU
protections.
- Ruff formatting and lint checks passed.
- Mypy passed for 103 source files.
- Shell syntax and ShellCheck passed for the modified deployment
scripts.
- Strict documentation staging and build passed.
- Release-version verification passed for `0.2.0-beta.3`.
- All current version declarations were audited; the only remaining
beta.2 references are intentional historical-version documentation
fixtures.
- Web UI formatting, lint, type checking, production build, and license
checks passed.
- 63 web UI tests passed.
- Python test execution reached 610 passing tests with 90.25% coverage.
Two synthetic localhost-server tests could not bind loopback sockets
under the local workspace sandbox and must be confirmed by GitHub
Actions.
- 88 directly relevant compliance tests passed; the one deselected test
is the same loopback-bound registry fixture.

Regression coverage was added or expanded for:

- Installer defaults, release binding, cleanup, confinement, and
resumability.
- Carina bootstrap and vLLM child-process compatibility.
- Model snapshot cleanup and runtime validation.
- Slurm handoff and project-directory preservation.
- Structured terminal and file-action arguments.
- Action exclusion, rejection, replay, and audit behavior.
- Session idle/resume and lifecycle handling.
- CLI, notebook, and web action presentation.
- Release governance and documentation consistency.

### [Code of
Conduct](https://github.com/SchmiedmayerLab/.github/blob/main/CODE_OF_CONDUCT.md)
& [Contributing
Guidelines](https://github.com/SchmiedmayerLab/.github/blob/main/CONTRIBUTING.md)

- [x] I agree to follow the [Code of
Conduct](https://github.com/SchmiedmayerLab/.github/blob/main/CODE_OF_CONDUCT.md)
and [Contributing
Guidelines](https://github.com/SchmiedmayerLab/.github/blob/main/CONTRIBUTING.md).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants