Skip to content

LAB: release_ready.sh not_measured on main: autopilot_found cannot parse ap_policy_applies' subshell (autopilot.sh:76) #4968

Closed as not planned

Description

@noahgift

LAB (it cannot block a merge or a release: no workflow, Makefile target or script calls scripts/release/release_ready.sh).

What. On main @af58dfccff, bash scripts/release/release_ready.sh --root . exits 2:

unparsed call form at scripts/release/autopilot.sh:76
surface unreadable: scripts/release/autopilot.sh steps
release-ready: not_measured: a surface cannot be read

So every surface after autopilot's (preflight, cascade, strict, dogfood) goes unread, and the verdict is not_measured.

Cause. autopilot_found does not accept the subshell form ( . scripts/lib/release_policy.sh || exit 2 that #4910 (ad8fafc) added in ap_policy_applies. Measured with autopilot_found alone (RR_SOURCED=1): rc 2 on main's autopilot.sh, rc 0 on ad8fafc794~1:scripts/release/autopilot.sh.

Done when. release_ready.sh --root . reads every surface on main, and the selftest gains a row with this subshell form (must parse) next to a call form that must still be refused.

Refs #4910

Activity

  1. noahgift commented on Oct 9, 2026

    @noahgift
    ContributorAuthor

    Fix committed on branch fix/4968-release-ready-subshell-form (70d0d5740a), not pushed yet. It waits for a PR slot.

    • autopilot_found reads a sourced script (. scripts/X.sh, source scripts/X.sh) as a call form and lists it as source scripts/X.sh. . "$R"/scripts/x.sh is still refused.
    • RR-T21 lists scripts/lib/release_policy.sh under the tag step.
    • New selftest rows: unlisted-dot-source-subshell (the release: standing CRUX-smoke release policy, read by autopilot, readiness and bump #4910 subshell form must parse) next to nm-unparsed-dot-quoted-root (must still be refused). Mutants M45-M47 are all killed.
    • --selftest 74/74; --mutants killed=47 total=47 errors=0.

    With the surface readable, release_ready.sh --root . at main 845004a is rc 1, no longer rc 2. These findings were hidden behind not_measured, and this LAB check's red now names them:

    ORPHANED RR-T12: no surface states tag:autopilot/readiness/bash scripts/release/release_readiness.sh --root any more
    ORPHANED RR-T20: no surface states tag:autopilot/readiness/cargo metadata --no-deps --format-version any more
    ORPHANED RR-P26: scripts/release/publish_strict.sh does not contain "no green clean-room run id recorded"
    UNLISTED tag:autopilot/deep/bash scripts/release/deep_nodefault_verdict.sh  (scripts/release/autopilot.sh:142)
    UNLISTED tag:autopilot/commit/bash scripts/release/release_readiness.sh --root  (scripts/release/autopilot.sh:280)
    UNLISTED publish:strict/no-clean-room-run-id-recorded-for-t  (scripts/release/publish_strict.sh:33)
    UNLISTED publish:strict/cannot-write-crg  (scripts/release/publish_strict.sh:34)
    UNLISTED publish:strict/cannot-load-fn-from-scripts-cascade-publish-sh  (scripts/release/publish_strict.sh:37)
    UNLISTED publish:strict/cannot-load-the-clean-room-gate  (scripts/release/publish_strict.sh:40)
    UNLISTED publish:strict/clean-room-run-crid-does-not-prove-t  (scripts/release/publish_strict.sh:41)
    CONTRADICTION publish.executor: cascade-drain.sh @ scripts/release/autopilot.sh:535 | publish_strict.sh @ docs/specifications/APR-RELEASE-001-train-and-build-kaizen.md:246
    release-ready: unlisted=7 orphaned=3 contradictions=1 listed=120 stated=124
    

    These are list drift since the readiness step moved to commit, deep_nodefault_verdict and the publish_strict refusals were added, and the executor changed. They are next on this ticket.

  2. noahgift commented on Oct 9, 2026

    @noahgift
    ContributorAuthor

    Branch fix/4968-release-ready-subshell-form, three commits, not pushed yet (waiting for a PR slot):

    commit what
    70d0d5740a a sourced script (( . scripts/lib/x.sh || exit 2) is a call form. --root . rc 2 -> 1
    166aa97e92 a step opened as if run_step X && <test>; then is read as step X. The readiness block was being taken for commit-time code, so RR-T12 and RR-T20 read ORPHANED. Any other if run_step opener is now not_measured
    ed24619868 list drift: RR-P26 re-anchored on the #4869 message, RR-P38..41 (the one-door refusals), RR-T22 (the deep-nodefault verdict, #4874)

    Measured in the worktree: --root . gives unlisted=0, orphaned=0, listed=125, stated=125. --selftest passes 76/76, including the subshell-form row and the refused call forms next to it. --mutants killed 50/50 with 0 errors. pv validate reports 0 errors. This meets the done-when.

    One finding is left, rc 1: CONTRADICTION publish.executor. It is a real contradiction, not a parser artefact:

    Which side moves is a release-path design decision under #4687, so it is not decided here. The contradiction-executor selftest row keeps it falsifiable. This check stays red on that one finding until #4687 settles the executor.

  3. added this to the 0.71.1 milestone on Oct 10, 2026
  4. modified the milestones: 0.71.1, backlog on Oct 14, 2026
  5. noahgift commented on Oct 14, 2026

    @noahgift
    ContributorAuthor

    Folded into #4433 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it.

    Agent: aprender-clerk

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions