Skip to content

0.30.0

Choose a tag to compare

@ShkodnikAI ShkodnikAI released this 08 Oct 06:55
· 109 commits to main since this release
6eafee1

The release verdict (the 0.30 v2 gate)

GREEN at the release cut (tag v0.30.0 @ 6eafee1c — the fresh run of
unfreeze_gate.py --office-tests pass --gate-target 0.30 — exit 0, the
summary is committed in the lockstep PR #1141) and the FULL В34 form read
exit 0 on main @ 6d1aa26
(the branch-protection fact key landed after
the cut per the §5 recorded sequencing — the criterion machine-reads the
audit conclusion):

Goal Verdict Evidence
parameterized share ≥ 5000 bp (OWNER-FIXED 2026-10-07, the В34 addendum form, ADR-0186 §5) MET 6043 bp — 55/91 = 60.43% (the three honest packages: №623 7 rows → №631 27 rows → №637 21 rows)
open High findings (server path) = 0 MET the release-block counter = 0 (machine-read, never hand-zeroed)
the domain quorum MET 0/8 groups carry duplicates vs the goal 1/3
the serve-e2e inventory MET every state-accumulating declaration done
the branch-protection criterion (the В34 addendum Z-3): the LAST branch-protection-audit run GREEN MET the switches applied by the owner BEFORE the publication (the №646 request held): 25 required checks = the maintainers.md checklist verbatim, strict, enforce_admins, the PR requirement (approvals 0); the first GREEN audit run 37736590049 on fc856fb; gh#1000 closed manually 2026-10-08; the fact key fact_branch_protection_audit: GREEN landed WITH its checker (№525) in #1143

§4 (ADR-0177) GREEN across the board: types 309/516 (5988 bp floor), dedup 0
(mirrors 6/6), debt 11/0/15, the memory office-E2E evidence record GREEN.

The publication is the owner's act (docs/release-checklist.md, step 5 —
"the machine never publishes"): executed by the owner's PAT on the verbatim
chat verdict «публикуй» (2026-10-08), the v0.29.0 precedent.


Security

  • №629 (gh#1096) — the VM comparison parity (the behavior change,
    fail-closed; AFFECTS 0.29.0 AND EARLIER on the VM backend — all six
    comparison operators, including !=; the audit guard scenario
    if owner != current_user { … } with owner = Unit PASSED on the
    VM — the X-1/Y-1/Q-1 silently-wrong-guard class):
    the VM's
    ==/!=/>/</>=/<= now mirror the TW matrix 1:1 — the
    heterogeneous equality ("abc" == 5.0, "5" == 5.0), the ordering
    on non-Float pairs ("b" > "a", true > false) and the
    incomparable types (Struct/List/Html) REFUSE with the stable
    [TYPE_MISMATCH] code on BOTH backends; the legacy VM answered a
    silent false (and true for numeric strings) — the
    silently-wrong class; Unit == Unit is true on both now. Found by
    the №621 fuzzer sweep the day it stopped being vacuous; the №479
    + precedent. The fix landed on main 2026-10-07 (22d62fa — after
    the v0.29.0 tag, 4be0f72: the published tag is affected; no re-tag
    — the №620 precedent); the affected-release audit 2026-10-08 (the
    unified audit of 4830170, the dispatch gh#1136, Q-1).

Changed

  • №630 (gh#1098) — the 0.30 release-gate §5 mechanical transition
    (process, the owner-fixed merge):
    owner_fixed: true in
    gate_030_goals.txt (ADR-0186), ADR-0186 Proposed → Accepted, the
    DEFAULT gate target of unfreeze_gate.py 0.29 → 0.30; the 0.28
    and 0.29 records stay verifiable explicit targets (--gate-target).
    The typed parameter of the 0.30 gate = the parameterized share
    (≥ 5000 bp, the owner's 2026-10-07 verdict); the machine read is
    RED-loud until the movement completes — by design.

  • №631 (gh#1099) — the parameterized movement 0.30 №2 (internal):
    the second honest package of 27 verified rows — the registry-order
    contour carries List<T> / Struct<Name> spellings now (the
    memory/todo/goal/profile/mood families; the polymorphic list ops stay
    honestly coarse — the element type is the caller's). The parameter
    share 7/91 = 769 bp → 34/91 = 3736 bp; the floors raised in the
    same PR (the parameterized baseline 3736, the in-tree PARAM_FLOOR 31).

  • №627 (gh#1110) — the field-label metadata (internal, the stage-2
    preparation per ADR-0178):
    the registry specs may carry the
    Struct<Name>{field:label,...} form; the labels live in the registry
    side-table (BuiltinSpec.field_meta), the Type enum stays erased;
    a malformed section is a loud Unknown (fail-closed). The FOURTH
    metric — the field-label share among the parameterized Struct rows
    (3/20 = 1500 bp, the first honest package of 28 verified rows:
    GeoLocation 9, Weather 13, LlmUsage 6) with the checked-in floor +
    the in-tree lock. The parser mirrors (gen_metrics, gen_reference, the
    two Rust pins) synced — the generated blocks regenerated.

  • №633 (gh#1101) — the dead_code burn (internal): 33 → 15 (18
    places removed or justified), the floor re-locked in the same PR.

  • №634 (gh#1102) — the self-host lexer lane lifted green
    (internal):
    the §5 test fixture had drifted behind the language
    (let-mut, the no-entry flow, the newline in the quote class, the
    stale keywords) — repaired; the №617 artifact documented-accepted
    with the mutation-verified pin; the ignore floor 14 → 13.

  • №635 (gh#1103) — the VM template_render lane lifted green
    (internal):
    both vm_golden corpus sweeps 189/189 (the template gap
    was closed by №250; the harness facts fixed — the env sidecars №385,
    the candle-gated exclusion mirror, the browser-gated p88); the ignore
    floor 13 → 11.

  • №622 (gh#1085) — return inside a match/if EXPRESSION arm is
    captured as the arm's value on BOTH backends:
    the TW documented
    contract (the expression channel carries values, not control signals)
    now holds on the VM — let v = match x { "a" then { return 5.0 } }
    binds 5 and runs the tail instead of terminating the pattern with
    "5". The consumer scan (match arms / if-without-else / if-else /
    MatchExpr — the implicit block value never becomes an early return;
    sandbox/flow have no statement bodies in the grammar).

  • №623 (gh#1086) — the parameterized signature vocabulary stage-0
    (internal):
    the registry specs carry List<T> / Struct<Name>
    spellings (the enum erases the parameter); the THIRD metric — the
    parameterized share among the List/Struct rows (7/91 = 769 bp, the
    first honest package of 7 verified rows; the general typed share 5988
    bp, the precise share 4224 bp untouched per the Z-2 verdict).

  • **№621 (gh#1084) — the differential fuzzer executes again (internal):
    ** the sweep was vacuously green (0/150 programs ran — the stale
    builtin call, the undefined idents, the heterogeneous arithmetic); the
    generator produces the №612 loop class (the bare-call bodies, the
    mixtures, the tails, the nested shapes) and the permanent LIVENESS
    ratchet pins the executability (≥ 60% of the sweep on both backends).

  • №617 (gh#1075) — the semantic checker grows three compile-time
    refusals (the gh#967 §3 lane):
    the variable-scope walk (the TW env
    model verbatim — flat, never popped, the entities as globals, the
    render/reflex_* name-reference slots exempt), the undefined-variable
    read refusal (the runtime message verbatim + the stable
    UNDEFINED_VARIABLE code), the assignment-to-undefined refusal, and
    the static opaque-concat check (the declared-fact twin of the runtime
    guard — cannot concatenate opaque type …). The three #[ignore]d
    gh#967 §3 tests lifted green; the debt floor 17 → 14; the №465 fuzzer
    VM lane now carries the №523 semantic gate (the production order).

  • №616 (gh#1077) — the PRECISE movement 0.30 №1: 61 registry rows
    typed against the verified single-shape handler facts — the precise
    share 3042 → 4224 bp (218/516), the general share 4670 →
    5852 bp (302/516), TYPED_FLOOR 237 → 298; the floors raised in the
    same PR (the №757 procedure); the 0.29 gate fact synced (the
    machine-read rule).

  • №615 (gh#1078) — the 0.30 gate DRAFT (Proposed, ADR-0186):
    gate_030_goals.txt with owner_fixed: false — the draft parameters
    strictly above the live facts (typed 6100 > 5852, precise 4500 >
    4224, the X-3 rule); the gate reads it honestly RED on the fixation
    fact; the DEFAULT gate target stays 0.29 (the blocking CI never reads
    a draft) — the fixation is the OWNER's gate.

  • №618 (gh#1076) — the Камертон cycle closure report: the external
    review report artifact (docs/audits/kamerton-report-v0.29.0.md) —
    the SHA256 of the v0.29.0 assets re-run on the downloaded artifacts
    (3/3 OK against the attached SHA256SUMS), the R1–R6 verdicts from real
    runs of the repro corpus (scripts/repro_kamerton/, the t92
    reconstruction) on the fixed main — every probe now behaves as its
    contract demands (the mutation probe goes red: assert_eq failed: 3 != 999), the D1/D2 → PR/commits map, the affected releases
    (v0.28.1, v0.28.2 — update to v0.29.0), and the honest protocol
    corrections verbatim from t92. The forwarding to the external
    reviewer is the owner's gate (the external channel).