Skip to content

Add inactive kill-switch evaluator - #211

Merged
yihanzhu merged 6 commits into
mainfrom
codex/control-kill-switch-v1
Sep 1, 2026
Merged

Add inactive kill-switch evaluator#211
yihanzhu merged 6 commits into
mainfrom
codex/control-kill-switch-v1

Conversation

@yihanzhu

@yihanzhu yihanzhu commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Scope

Roadmap item 2: add one inactive, repo-only kill-switch evaluator. It observes a pinned state snapshot across five scopes and fails closed. It grants no authority and performs no signal, cancellation, credential, network, release, install, deployment, or external-write action.

Exact candidate:

  • Head: d12b97a08b5ae2bd15ef2a4c9a9f87b4fabb6adf
  • Base: a6ebfe11a9a417148c7406fc6d06d821bea3aa32

Changed paths:

  • README.md
  • RESTORE.md
  • ci/required-files.txt
  • control/v1/evaluate-kill-switch.sh
  • control/v1/kill-switch-decision.json
  • control/v1/kill-switch-policy.json
  • control/v1/kill-switch.jq
  • scripts/test/control-kill-switch.test.sh

Linux CI revision

The first exact CI reached kill-switch case 35, then the teardown-signal test raced its own short-lived marker on Linux. Seeing that regular file did not prove an owned descendant still held the evaluator inside teardown.

The revised test creates a TERM-resistant descendant in the evaluator-owned child process group. It verifies the leader, group, and descendant identities while teardown is active, sends repeated outer-group signals, then requires normalized status 143, empty output, complete descendant/group reap, and empty scratch state. Product behavior and lifecycle assertions are unchanged.

Targeted proof

Run on the exact candidate tree with a 240-second process-group outer bound:

  • kill-switch matrix: 37/37
  • policy-set dependency matrix: 61/61
  • duty-separation dependency matrix: 56/56
  • Bash syntax: clean
  • ShellCheck 0.11.0 at style severity: clean
  • shipped JSON canonical form: clean
  • required-files structure and append-only checks: clean
  • exact eight-path scope and diff checks: clean
  • rename gate: clean

Required exact GitHub CI and the one final independent review remain the publish gates.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 1, 2026

Copy link
Copy Markdown

Deploying ystack with  Cloudflare Pages  Cloudflare Pages

Latest commit: d12b97a
Status: ✅  Deploy successful!
Preview URL: https://3d2d41bc.fabrica-6yx.pages.dev
Branch Preview URL: https://codex-control-kill-switch-v1.fabrica-6yx.pages.dev

View logs

yihanzhu commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

Codex reviewer (cross-vendor, read-only)

Reviewed-head: d12b97a
Reviewed-base: a6ebfe1
reviewer: review_kill_211_final @ high

Bugs

No Important findings.

Scope precedence is fail-closed: any matching stop wins; missing state is inconclusive; ambiguity, mismatch, rollback, stale state, replay, or digest mismatch are violated. Duty violations and unverifiable evidence cannot produce a cleared result. Output is canonical and deterministic.

The exact targeted proof passed 37 of 37 checks. Linux CI proved evaluator-owned TERM-resistant descendant group ownership before repeated signals, then required status 143, empty output, descendant reap, and empty scratch. All 24 repository test scripts passed.

Non-blocking nit: if the initial self process-group lookup fails before traps are installed, an empty private scratch directory can remain for operating-system cleanup. No input has been copied and no child exists on that path.

Security

No findings.

Policy, decision, driver, jq program, validator, duty decision and policy, policy-set, and portable-core identities are closed and checked again. Inputs are single-read snapshots and shipped-source mutation fails closed. Paths reject symlinks, subprocess arguments are not shell-evaluated, and active child groups receive bounded TERM, KILL, and reap handling.

A satisfied observation explicitly has authority_effect set to none and cannot create caller authority. No credential, network, candidate execution, signal action, activation, publish, deploy, or external write is enabled.

Compliance

No findings.

The exact diff is one inactive kill-switch concern across README.md, RESTORE.md, ci/required-files.txt, the five kill-switch product files, and the targeted test. It does not touch constitution, workflow, forbidden, live, or frozen paths. README and RESTORE accurately describe the observation-only boundary. Restore-manifest additions are append-only.

The branch preserves recoverable ancestry from the exact reviewed base without rebase or rewrite. Required app-15368 CI run 33516932826 and check 99886189038 succeeded on this exact head/base. No exceptional implementation or scope expansion was introduced.

@yihanzhu
yihanzhu merged commit 6a46c62 into main Sep 1, 2026
2 checks passed
@yihanzhu
yihanzhu deleted the codex/control-kill-switch-v1 branch September 1, 2026 14:37

yihanzhu commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

Construction merge receipt

  • PR: Add inactive kill-switch evaluator #211
  • result: merged by the authorized construction publisher
  • exact reviewed head: d12b97a08b5ae2bd15ef2a4c9a9f87b4fabb6adf
  • exact reviewed base / squash parent: a6ebfe11a9a417148c7406fc6d06d821bea3aa32
  • merge / current main: 6a46c62f85e8dcf1d0e169f468956bb686349304
  • reviewed and merged tree: 5d30781c44e096e7fdae667ce981e8940e07edc1
  • required CI check: 99886189038 (app 15368, success)
  • independent review comment: 5495611187
  • publisher receipt SHA-256: 9fe60b4ac62736a132f4aba0dc2596510707de8c8b776efe4989e85d55f026e3

Postflight verified squash-only ancestry, exact tree equality, and the main ref.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant