# Host/runtime boundary release handoff

This document is the short release-gate handoff for blocked LinuxCNC runtime
families in the WASM/browser port. It summarizes current host readiness,
promotion blockers, opt-in probe dispatch state, native evidence acceptance, and
the rule that blocked runtime families remain blocked on this host.

Detailed references:

- `docs/full-process-boundary-design.md`
- `docs/sim-configs-coverage-matrix.md`
- `docs/sim-configs-coverage-handoff.md`
- `tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`

## Current runtime boundary families

The current runtime-boundary proof families are:

- `L4-USER-M-PROCESS`
- `L4-TOOL-DB`
- `L4-PYTHON-REMAP`

The current Node inventory skip/block summary now has `L4-USER-M-PROCESS=1`. `L4-TOOL-DB` is no longer a skipped inventory row,
but it remains represented in the runtime-boundary proof ledger with
`promotion_allowed=0`.

Current host readiness is summarized by:

- `build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv`
- `build/wasm/sim-configs-inventory/runtime-boundary-promotion-blockers.tsv`
- `build/wasm/sim-configs-inventory/runtime-boundary-opt-in-probe-dispatch-rollup.tsv`
- `build/wasm/sim-configs-inventory/runtime-boundary-native-evidence-acceptance-gate.tsv`
- `build/wasm/sim-configs-inventory/runtime-boundary-opt-in-probe-skip-evidence-rollup.tsv`
- `build/wasm/sim-configs-inventory/blocked-runtime-promotion-lock.tsv`

Current rollup state:

```text
host_readiness_status=host_ready_for_all_opt_in_native_probes
family_count=3
host_ready_family_count=3
host_blocked_family_count=0
blocked_families=-
missing_host_requirements=-
ready_opt_in_command_count=3
execution_enabled=0
promotion_allowed=0
```

Manual `L4-USER-M-PROCESS` opt-in status on the current workstation:

```text
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
millturn_user_m_runtime_probe_status=blocked_existing_linuxcnc_runtime
millturn_user_m_missing_requirements=exclusive_linuxcnc_runtime
```

The conflicting runtime was an already-running `linuxcncsvr -ini .../axis.ini`
plus `rtapi_app load tpmod`. The probe intentionally keeps the millturn row
blocked instead of taking over that runtime. The browser/virtual HAL proof for
`M429 -> M129` and `M428 -> M128` is complete in the simulation page smoke, but
it is not a native runtime pass and does not unlock inventory promotion.

## Promotion blockers

Each blocked family currently has `promotion_ready=0`, `execution_enabled=0`,
and `promotion_allowed=0`.

For `L4-USER-M-PROCESS` and `L4-TOOL-DB`, the current generated blocker keys are:

```text
native_runtime_probe_not_passed
native_pass_evidence_not_ready
node_inventory_gate_not_complete
browser_smoke_gate_not_complete
promotion_lock_active
manual_lock_update_required
```

For the first Python remap fixture, `axis/remap/stop-lookahead/nc_files`, the
native lifecycle evidence has been accepted and the Node/browser lifecycle
gates are complete:

```text
current_probe_status=runtime_lifecycle_probe_passed
native_evidence_status=native_pass_evidence_observed
node_inventory_gate_complete=1
browser_smoke_gate_complete=1
node_gate_status=node_inventory_promotion_gate_complete
browser_gate_status=browser_smoke_promotion_gate_complete
blocking_reason=promotion_lock_active_manual_review_required
next_unblock_action=manual_lock_review_required
```

The Python row still has `promotion_ready=0`, `execution_enabled=0`, and
`promotion_allowed=0`; the remaining blockers are `promotion_lock_active` and
`manual_lock_update_required`. This proof-chain state does not promote any of
the 53 `L4-PYTHON-REMAP` rows.

For rows that still lack native evidence, the next unblock action is to provide
the missing host runtime requirements for the relevant family. Providing host
commands is not enough to promote a row; it only allows the next opt-in probe
gate to be considered.
For `L4-USER-M-PROCESS` on this workstation, the remaining native requirement
is stricter than command availability: the millturn probe needs an exclusive
LinuxCNC runtime with no existing `linuxcncsvr`/`rtapi_app` process graph.

## Opt-in probe dispatch

The current dispatch rollup is:

```text
dispatch_status=dispatch_allowed_for_all_opt_in_native_probes
probe_count=3
dispatch_allowed_count=3
dispatch_blocked_count=0
dispatch_actions=ready_for_manual_opt_in_native_probe
execution_enabled=0
promotion_allowed=0
```

These commands are opt-in only and must never run implicitly:

```bash
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh
```

Only run them deliberately when updating native proof evidence. A passing probe
does not enable execution or promotion by itself.

## Native evidence acceptance

For rows still blocked before native evidence,
`runtime-boundary-native-evidence-acceptance-gate.tsv` currently records:

- `current_probe_status=ready_disabled_by_default`
- `native_evidence_status=pending_until_native_pass`
- `skip_evidence_status=skip_contract_not_applicable_dispatch_allowed`
- `node_gate_status=blocked_until_native_pass_evidence`
- `browser_gate_status=blocked_until_node_gate_complete`
- `native_evidence_gate=blocked_until_native_pass_evidence`
- `evidence_acceptance_allowed=0`

A disabled opt-in probe is not a native pass. It only proves that this host is
not executing the family-specific runtime probe by default.

For `L4-PYTHON-REMAP`, the same artifact records accepted native lifecycle
evidence for the stop-lookahead fixture:

- `current_probe_status=runtime_lifecycle_probe_passed`
- `native_evidence_status=native_pass_evidence_observed`
- `skip_evidence_status=native_pass_evidence_observed_skip_contract_closed`
- `node_gate_status=node_inventory_promotion_gate_complete`
- `browser_gate_status=browser_smoke_promotion_gate_complete`
- `native_evidence_gate=native_pass_evidence_accepted`
- `evidence_acceptance_allowed=1`

This is evidence acceptance only. It does not change `promotion_allowed=0`.

## Release gate

Use this gate when touching blocked runtime family reports, host readiness, or
promotion policy:

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/docs/node/verify_host_runtime_boundary_docs.sh
wasm-port/tests/docs/node/verify_sim_configs_coverage_docs.sh
wasm-port/tests/host/verify_host_smokes.sh
```

The host aggregate must include:

```text
sim_configs_wasm_node_inventory=ok
host_runtime_boundary_docs_node_smoke=ok
sim_configs_coverage_docs_node_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

## Promotion rule

No blocked family may be promoted until all of these are true:

1. Host readiness allows the family-specific opt-in probe.
2. The explicit opt-in probe passes natively with LinuxCNC-owned runtime
   behavior.
3. Native evidence acceptance allows the pass evidence.
4. Node/WASM inventory proof passes after native evidence.
5. Browser/host proof passes after Node/WASM proof.
6. `verify_no_standalone_cnc_semantics.sh` still passes.
7. `blocked-runtime-promotion-lock.tsv`, docs, and tracker records are updated
   deliberately.

Until then, `L4-USER-M-PROCESS`, `L4-TOOL-DB`, and `L4-PYTHON-REMAP` remain
locked in the runtime-boundary proof ledger with `promotion_allowed=0`; only
the inventory rows explicitly eligible for Node/WASM execution may run.
