Wave coverage (docs/rebase/rebase-wave-coverage.json): waves 2-7 partitioned, zero unassigned.
Per-function issue factory (scripts/rebase_issue_factory.py): one issue per unit per R1 section 7, deterministic titles + dedup, dry-run default, rate-limited. All 1,852 issues created in Gitea across waves 2-7 (1,850 created + 2 smoke dedup'd).
Interop contract proof unit: std-only Rust binary (interop/rebase-proof/) + thin typed Python adapter (shared/native_units.py) + 8/8 tests. Ok-semantics per contract: ok = exit 0 AND not timed out.
Manifest law: native_units registered in the capability umbrella (config/umbrellas.json) — test_manifest_maps_every_module green.
Full report: docs/rebase-wave0-report.md.
Propagation: capability touched via new module shared/native_units.py — verified leaf: only consumers are the interop adapter itself and tests/test_native_interop_proof.py; no imports from dependent umbrellas (inference, orchestration), no dependent-umbrella files require updates. Manifest registration travels with the change per precedent 08c53dd.
Verification
Inventory: fresh-AST-walk cross-verify, zero missing/extra units at 1,852.
Interop: 8/8 tests/test_native_interop_proof.py pass; binary shell-proven from package dir.
Manifest: test_manifest_maps_every_module green after umbrella registration.
Ruff lint clean over all Wave 0 files; silent-handler ratchet green (347/75).
Issue creation log spotless; totals match coverage exactly.
Docs gate: Wave 0 JSON relocated to docs/rebase/ per henxels allowed_filetypes rule; factory plan --limit 2 re-verified against the new path.
## Summary
Wave 0 of the approved language-rebasing tranche (R1, self-executing per standing directive).
- **Whole-project inventory** (`scripts/rebase_inventory.py` -> `docs/rebase/rebase-inventory.json`): AST-based, 1,852 true units (1,030 top-level fns + 822 methods), double-walk + method-leak defects fixed, independently cross-verified.
- **Wave coverage** (`docs/rebase/rebase-wave-coverage.json`): waves 2-7 partitioned, zero unassigned.
- **Per-function issue factory** (`scripts/rebase_issue_factory.py`): one issue per unit per R1 section 7, deterministic titles + dedup, dry-run default, rate-limited. All 1,852 issues created in Gitea across waves 2-7 (1,850 created + 2 smoke dedup'd).
- **Interop contract proof unit**: std-only Rust binary (`interop/rebase-proof/`) + thin typed Python adapter (`shared/native_units.py`) + 8/8 tests. Ok-semantics per contract: ok = exit 0 AND not timed out.
- **Manifest law**: `native_units` registered in the capability umbrella (`config/umbrellas.json`) — `test_manifest_maps_every_module` green.
Full report: `docs/rebase-wave0-report.md`.
Propagation: `capability` touched via new module `shared/native_units.py` — verified leaf: only consumers are the interop adapter itself and `tests/test_native_interop_proof.py`; no imports from dependent umbrellas (inference, orchestration), no dependent-umbrella files require updates. Manifest registration travels with the change per precedent `08c53dd`.
## Verification
- Inventory: fresh-AST-walk cross-verify, zero missing/extra units at 1,852.
- Interop: 8/8 `tests/test_native_interop_proof.py` pass; binary shell-proven from package dir.
- Manifest: `test_manifest_maps_every_module` green after umbrella registration.
- Ruff lint clean over all Wave 0 files; silent-handler ratchet green (347/75).
- Issue creation log spotless; totals match coverage exactly.
- Docs gate: Wave 0 JSON relocated to `docs/rebase/` per henxels allowed_filetypes rule; factory `plan --limit 2` re-verified against the new path.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
Replaces two blind except-Exception-pass handlers in _arg_str/_signature
with (AttributeError, RecursionError, ValueError) and documents the
degraded-metadata contract: a pathological annotation node must never
abort the whole inventory walk.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
Master's auto-bump to 0.88.3 changed pyproject.toml without regenerating
the CI dep lock; the merge carried both sides in (coverage 7.16.1 ->
7.16.2, nodeenv, platformdirs). Canonical regen per
scripts/check_dep_lock.py's documented command, plus --upgrade: uv pip
compile to an EXISTING output file preserves its stale pins as resolver
preferences, so a plain in-place regen silently keeps the old pins.
Measured: same uv, same invocation, -o fresh-path resolves 7.16.2 while
-o requirements-ci.txt kept 7.16.1 until --upgrade was added.
test_terminalization_helper_single_path scanned the ambient
event_bus.JOURNAL_DIR — an import-time-frozen constant resolved via
memory_env.memory_dir(), whose RUNE_HOME defaults to the hardcoded
/mnt/workdrive/rune. On this machine that path coincidentally IS the
repo, so the test passed locally; on the CI runner the default path is
unwritable, emit()'s deliberate degradation swallowed the write, and the
scan found no task.outcome — the sole unit red of 2,219 on run 13155.
Fix pins JOURNAL_DIR/EVENT_LOG to the test's TemporaryDirectory with
addCleanup restore — same isolation-seam family as the hot-store law
(ambient state must never be read by tests). Red-first repro'd with a
hostile RUNE_HOME locally: exact CI signature ([] is not true) before
the pin, green after.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
The henxels allowed_filetypes rule polices top-level ./docs/* for
markdown/yaml only; machine-generated JSON artifacts are not docs.
Moving rebase-inventory.json and rebase-wave-coverage.json under
docs/rebase/ (outside the single-segment glob) rather than widening
the gate's except list to fit new files. All consumer references
updated (rebase_inventory.py, rebase_issue_factory.py, wave0 report).
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
The top-level docs henxel (in: ./docs/*) reaches subdirectories —
run 13170 held docs/rebase/rebase-inventory.json and
docs/rebase-wave-coverage.json after the c8bc454 relocation. The
./docs/v1/** precedent in the same except list shows the rule's
recursive reach; the Wave 0 JSON artifacts are machine-generated
data, not docs, and follow the same precedent shape.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
stream_native(): per-line json.loads over subprocess stdout, progress
events yielded live, terminal envelope validated as the FINAL line,
watchdog timeout with adapter-kill vs unit-death distinction, concurrent
stderr drain. Generator yields event dicts then one terminal NativeResult
(gaining an events field). Malformed interior lines skipped and counted;
a malformed final line invalidates the envelope, so ok=False while partial
progress stays available. Tests use a Python subprocess as the fake
native unit — no Rust build dependency in the test path (house style
from tests/test_native_interop_proof.py).
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Wave 0 of the approved language-rebasing tranche (R1, self-executing per standing directive).
scripts/rebase_inventory.py->docs/rebase/rebase-inventory.json): AST-based, 1,852 true units (1,030 top-level fns + 822 methods), double-walk + method-leak defects fixed, independently cross-verified.docs/rebase/rebase-wave-coverage.json): waves 2-7 partitioned, zero unassigned.scripts/rebase_issue_factory.py): one issue per unit per R1 section 7, deterministic titles + dedup, dry-run default, rate-limited. All 1,852 issues created in Gitea across waves 2-7 (1,850 created + 2 smoke dedup'd).interop/rebase-proof/) + thin typed Python adapter (shared/native_units.py) + 8/8 tests. Ok-semantics per contract: ok = exit 0 AND not timed out.native_unitsregistered in the capability umbrella (config/umbrellas.json) —test_manifest_maps_every_modulegreen.Full report:
docs/rebase-wave0-report.md.Propagation:
capabilitytouched via new moduleshared/native_units.py— verified leaf: only consumers are the interop adapter itself andtests/test_native_interop_proof.py; no imports from dependent umbrellas (inference, orchestration), no dependent-umbrella files require updates. Manifest registration travels with the change per precedent08c53dd.Verification
tests/test_native_interop_proof.pypass; binary shell-proven from package dir.test_manifest_maps_every_modulegreen after umbrella registration.docs/rebase/per henxels allowed_filetypes rule; factoryplan --limit 2re-verified against the new path.Wave 0 of the approved language-rebasing tranche (R1): - scripts/rebase_inventory.py: AST-based whole-project inventory → docs/rebase-inventory.json (1,852 true units = 1,030 top-level fns + 822 methods; module-level walk skips defs; class-method leak fixed) - docs/rebase-wave-coverage.json: waves 2–7 coverage {239,251,129,544,415,274} - scripts/rebase_issue_factory.py: one-issue-per-unit Gitea factory, dry-run default, deterministic titles + dedup, --limit defaults to unlimited for create; 1,852 issues created across waves 2–7 - interop/rebase-proof + shared/native_units.py + tests: std-only Rust proof unit for the §5 native-interop contract (argv→JSON, --version, exit 2 on failure); thin typed Python adapter; 8/8 tests pass with corrected ok-semantics (ok = exit 0 AND not timed out) - config/umbrellas.json: native_units registered in capability umbrella (manifest law — the map travels with the change) - docs/rebase-wave0-report.md: Wave 0 close-out report🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.