Skip to content

test(security): merge twin security tests and give weak ones real checks - #24088

Open
iamwhatever wants to merge 1 commit into
mainfrom
test-cleanup/security
Open

iamwhatever wants to merge 1 commit into
mainfrom
test-cleanup/security

Conversation

@iamwhatever

Copy link
Copy Markdown
Contributor

Problem / Motivation

Goal: Fold the copied security, sandbox and governance tests into parametrized tests and give the tests that checked nothing a real outcome check, without dropping or loosening a single security case.

Phase 12, the last area of the test-suite cleanup: test/test_sandbox*.py, test/test_security*.py, test/test_policy*.py, test/test_exfil*.py, test/test_denied*.py, test/test_rm_floor*.py and test/test_governance*.py (152 files; test/test_permission*.py matches nothing on main). scripts/find_duplicate_test_bodies.py found 41 groups of identical test bodies here. About 25 tests checked nothing, or only that a mock was called, and the exfil carve-out tests only checked that some refusal came back. Many comments carried review-round and ticket bookkeeping (round-17:, (pre-push review, measured), security-review bdf0d7e5) instead of the reason a rule exists.

Why it matters

A security test that cannot fail gives false comfort on exactly the code where a silent regression costs the most. 9 bugs were planted in the code these tests cover: the strengthened tests catch all 9, the same tests on main catch 1.

Not a goal

  • Merge-only rule. No security test is weakened: no case deleted, no assert loosened, no allowed set widened, no skip or xfail added, no platform dropped. Every change is a merge into parametrize, an added check, or a comment edit.
  • No src/ change.
  • No merge across classes or files where the classes document different mechanisms (listed under Tests as left alone).
  • Not every history marker in the area: the remaining ones are listed below for a later pass.

What changed (motivation → approach → change)

Same method as #23352 ... #23977.

Kind Count
Files touched 44 (1 new)
Same-body groups in the area 41 → 19
Test functions folded into parametrize (old name kept in every id) 93 → 29
Weak tests given a real outcome check 25
Exfil refusals now checked for the denial reason, not just non-None 25
History/restating comment lines cut or rewritten ~190
Collected test ids 12,061 → 12,061
Tests deleted 0

Twins. Only true copies were merged: same body, same class (or, for the governance list keys, the same class in two files), one @pytest.mark.parametrize and no other decorator on every member. Each merged test parametrizes ("origin", ...), where origin is the old test name, so an old id test_x[case] becomes merged[test_x-case]. Every old in-body comment moved above its own block of cases.

  • test_denied_commands_security_kill.py, _mint.py, _mentions.py: 19 within-class groups (for example the nine by-name kill shapes are now test_kill_spellings_that_name_the_cli_are_kills).
  • test_governance_list_otlp_hosts.py + test_governance_list_share_sites.py: the four identical TestListKeys tests now run both cases from the new test_governance_list_keys.py; the OTLP-only host-glob test stays where it was.
  • test_governance_self_protection.py, test_exfil_carveouts.py (two tests ran the identical input; both ids kept), test_security_token_params.py.

Weak tests strengthened.

  • wrap_argv tests (test_sandbox_argv.py, test_sandbox_argv_profile.py, test_sandbox_governance_mask_model_loaders.py): now check the returned argv, the argv handed to the backend, the cleanup path and detect_backend's answer, not only that a mock ran.
  • Seal tests (test_sandbox_absent_ceiling_seal_*.py): "does not raise" tests now check the returned alias set is (), the reconciler's removed list, and that tolerated files are left intact.
  • Retry tests (test_sandbox_interpreter_enoent_retry.py): check the returned process and the exact backoff schedule.
  • test_sandbox_argv_spawn.py control test now asserts the poisoned launcher exits non-zero when it is not skipped (it passed with no check before).
  • test_governance_boot.py::test_profile_within_ceiling_boots checks the booted ceiling carries sandbox.min_level = cc.
  • Exfil refusals check the reason starts with Blocked: command matches data-exfiltration pattern.

Comments. round-N: prefixes, (pre-push review, measured) → (measured), security-review <sha> tags, "the fix", "on main", "the issue's" and review-bot stories were cut or rewritten as one line on why the rule exists. Every threat-model and attack-shape comment is kept.

Backwards compatibility

Compatible: test-only change.

Removes nothing: no test or case is deleted; every old test id maps to exactly one new id.

Tests

Proof: not provable -- test-only change

No case or platform dropped

  • Collected ids of all 152 area files on origin/main @ 0b9a470630 and on this branch: 12,061 and 12,061, no duplicates. 475 ids changed; every old id maps to exactly one new id and no new id is unmapped. The map is in the PR comments below.
  • Per-test marks (everything except parametrize: skipif, xfail, usefixtures, platform marks, xdist groups) were dumped on both sides and compared through the id map: 12,061 compared, 0 differences.
  • None of the touched files has a row in test/windows-expected-failures.txt or test/windows-collect-ignore.txt.
  • Touched files run 3 times under -n 4: 3434 passed, 5 skipped, each time.

Coverage

src/kiro_crew line + branch coverage of the 152 area files, -n 4, two runs per side, union of covered lines per side compared:

base run 1 base run 2 head run 1 head run 2
covered lines 107,652 107,650 107,650 107,652
covered branches 8,675 8,675 8,675 8,675

Union base vs union head: 0 lines lost, 0 branches lost.

Planted bugs

One bug at a time in src/, then the strengthened tests were run on this branch and the same tests on main:

Planted bug Branch main
namespace wrap drops the launcher cleanup path caught missed
sandbox-exec wrap is handed a truncated argv caught missed
opted-in no-backend spawn gets an extra argv prefix caught missed
mode=off answers from the backend cache caught missed
auth-store reconciler stops reporting what it removed caught missed
alias pass reports a mask for a healthy layout caught missed
sync interpreter retry sleeps twice its schedule caught missed
async retry drops the process it launched caught caught
exfil denial loses its reason text caught missed
total 9 / 9 1 / 9

Left alone on purpose

These same-body groups remain because merging them would cross classes or files that document different mechanisms, or the copies differ in mocks or fixtures:

  • test_sandbox_probe.py (two tests with different mocks), test_security_bash_gate.py and test_exfil_outbound_sends_allowed.py (different contract classes), test_security_oauth_urls.py (different fixture), test_security_posture_facade.py / test_security_split_patch_reach.py (each derives its own file).
  • 14 groups that span test_denied_commands_security_kill.py, _mint.py, _mentions.py, _cost.py, _rows.py and _ssh_self.py, or span the argv-window and de-quoted-view classes inside _kill.py.

Remaining history markers for a later pass: mainly test_security_conductor_*.py (where "review" and "fix" are the feature under test), test_governance_profiles.py, test_sandbox_mount_source_sweep.py and test_security_path_resolve_bounded.py.

Manual verification

N/A — test-only change; gates and the checks above cover it. Ran locally: black gate, isort, flake8, comment-history and brand gates against the merge-base, file-line cap, subprocess-encoding gate, test_flake_pattern_ratchet.py and test_wait_discipline_ratchet.py.

Related Issues

Follows #23352 ... #23977.

Checklist

  • At most two commits (one is the norm), with a Conventional Commits title (feat|fix|docs|style|refactor|perf|test|chore|ci|build|revert: ...)
  • Existing tests pass and new tests added for new functionality
  • Self-review completed; code follows project style guidelines
  • Documentation updated (if applicable)
  • No secrets, credentials, or internal references in the diff

Contribution License Agreement

Contributions are accepted under the project's Apache-2.0 license.

@iamwhatever
iamwhatever requested review from a team and KiroCrewCaptain as code owners October 25, 2026 19:40
@iamwhatever

Copy link
Copy Markdown
Contributor Author

Old → new test-id map

475 ids changed; every one of the 12,061 collected ids maps to exactly one id on the branch. Ids not listed are unchanged.

test/test_denied_commands_security_kill.py (173)
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[pkill -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-pkill -f kirocrew]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[killall kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-killall kirocrew]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[sudo killall -9 kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-sudo killall -9 kirocrew]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[pkill -9 -f 'kirocrew gateway']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-pkill -9 -f 'kirocrew gateway']
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[pkill kiro-crew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-pkill kiro-crew]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[pkill -f /usr/local/bin/kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-pkill -f /usr/local/bin/kirocrew]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[killall -9 kirocrew > /dev/null]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-killall -9 kirocrew > /dev/null]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[kill -9 $(pgrep kirocrew)]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-kill -9 $(pgrep kirocrew)]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[kill $(pgrep -f 'kirocrew gateway')]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-kill $(pgrep -f 'kirocrew gateway')]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[kill $(pidof kirocrew)]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-kill $(pidof kirocrew)]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[kill $(cat /var/run/kirocrew.pid)]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-kill $(cat /var/run/kirocrew.pid)]
TestSelfProtectionKillTargetScoping::test_name_targeted_kill_still_blocked[kill `pgrep kirocrew`]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_name_targeted_kill_still_blocked-kill `pgrep kirocrew`]
TestSelfProtectionKillTargetScoping::test_quoted_regex_alternation_is_still_a_kill[pkill -f 'x|kirocrew']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_regex_alternation_is_still_a_kill-pkill -f 'x|kirocrew']
TestSelfProtectionKillTargetScoping::test_quoted_regex_alternation_is_still_a_kill[kill $(pgrep -f 'x|kirocrew')]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_regex_alternation_is_still_a_kill-kill $(pgrep -f 'x|kirocrew')]
TestSelfProtectionKillTargetScoping::test_quoted_metacharacter_in_target_is_still_a_kill[pkill -f '[;]*kirocrew']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_metacharacter_in_target_is_still_a_kill-pkill -f '[;]*kirocrew']
TestSelfProtectionKillTargetScoping::test_quoted_metacharacter_in_target_is_still_a_kill[pkill -f "[;]*kirocrew"]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_metacharacter_in_target_is_still_a_kill-pkill -f "[;]*kirocrew"]
TestSelfProtectionKillTargetScoping::test_quoted_metacharacter_in_target_is_still_a_kill[pkill -f '[&]kirocrew']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_metacharacter_in_target_is_still_a_kill-pkill -f '[&]kirocrew']
TestSelfProtectionKillTargetScoping::test_quoted_metacharacter_in_target_is_still_a_kill[pkill -f '#kirocrew']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_metacharacter_in_target_is_still_a_kill-pkill -f '#kirocrew']
TestSelfProtectionKillTargetScoping::test_quoted_metacharacter_in_target_is_still_a_kill[pkill -f '>kirocrew']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_metacharacter_in_target_is_still_a_kill-pkill -f '>kirocrew']
TestSelfProtectionKillTargetScoping::test_quoted_metacharacter_in_target_is_still_a_kill[killall 'kirocrew;']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_quoted_metacharacter_in_target_is_still_a_kill-killall 'kirocrew;']
TestSelfProtectionKillTargetScoping::test_nested_shell_payload_is_still_a_kill[bash -c "pkill -f kirocrew"]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_nested_shell_payload_is_still_a_kill-bash -c "pkill -f kirocrew"]
TestSelfProtectionKillTargetScoping::test_nested_shell_payload_is_still_a_kill[sh -c "killall kirocrew"]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_nested_shell_payload_is_still_a_kill-sh -c "killall kirocrew"]
TestSelfProtectionKillTargetScoping::test_nested_shell_payload_is_still_a_kill[bash -c "kill $(pgrep -f kirocrew)"]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_nested_shell_payload_is_still_a_kill-bash -c "kill $(pgrep -f kirocrew)"]
TestSelfProtectionKillTargetScoping::test_nested_shell_payload_is_still_a_kill[bash -c "pkill -f '[;]*kirocrew'"]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_nested_shell_payload_is_still_a_kill-bash -c "pkill -f '[;]*kirocrew'"]
TestSelfProtectionKillTargetScoping::test_substitution_produced_kill_program_is_still_a_kill[$(which pkill) -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_substitution_produced_kill_program_is_still_a_kill-$(which pkill) -f kirocrew]
TestSelfProtectionKillTargetScoping::test_substitution_produced_kill_program_is_still_a_kill[$(which pkill) -f '[;]*kirocrew']
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_substitution_produced_kill_program_is_still_a_kill-$(which pkill) -f '[;]*kirocrew']
TestSelfProtectionKillTargetScoping::test_substitution_produced_kill_program_is_still_a_kill[`which killall` kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_substitution_produced_kill_program_is_still_a_kill-`which killall` kirocrew]
TestSelfProtectionKillTargetScoping::test_substitution_produced_kill_program_is_still_a_kill["$(command -v pkill)" -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_substitution_produced_kill_program_is_still_a_kill-"$(command -v pkill)" -f kirocrew]
TestSelfProtectionKillTargetScoping::test_substitution_produced_kill_program_with_attached_redirect[$(which pkill)>/tmp/out -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_substitution_produced_kill_program_with_attached_redirect-$(which pkill)>/tmp/out -f kirocrew]
TestSelfProtectionKillTargetScoping::test_substitution_produced_kill_program_with_attached_redirect[`which killall`>/tmp/out kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_substitution_produced_kill_program_with_attached_redirect-`which killall`>/tmp/out kirocrew]
TestSelfProtectionKillTargetScoping::test_substitution_produced_kill_program_with_attached_redirect["$(command -v pkill)">/tmp/out -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_substitution_produced_kill_program_with_attached_redirect-"$(command -v pkill)">/tmp/out -f kirocrew]
TestSelfProtectionKillTargetScoping::test_path_qualified_kill_is_still_a_kill[/usr/bin/kill $(pgrep -f '[;]*kirocrew')]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_path_qualified_kill_is_still_a_kill-/usr/bin/kill $(pgrep -f '[;]*kirocrew')]
TestSelfProtectionKillTargetScoping::test_path_qualified_kill_is_still_a_kill[/bin/kill $(pgrep -f kirocrew)]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_path_qualified_kill_is_still_a_kill-/bin/kill $(pgrep -f kirocrew)]
TestSelfProtectionKillTargetScoping::test_path_qualified_kill_is_still_a_kill[$(which kill) $(pidof kirocrew)]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_path_qualified_kill_is_still_a_kill-$(which kill) $(pidof kirocrew)]
TestSelfProtectionKillTargetScoping::test_path_qualified_kill_is_still_a_kill[/usr/bin/kill -9 $(pgrep kirocrew)]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_path_qualified_kill_is_still_a_kill-/usr/bin/kill -9 $(pgrep kirocrew)]
TestSelfProtectionKillTargetScoping::test_path_qualified_kill_incidental_mention_allowed[/usr/bin/kill 8123]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_path_qualified_kill_incidental_mention_allowed-/usr/bin/kill 8123]
TestSelfProtectionKillTargetScoping::test_path_qualified_kill_incidental_mention_allowed[/usr/bin/kill $(cat /tmp/pids)]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_path_qualified_kill_incidental_mention_allowed-/usr/bin/kill $(cat /tmp/pids)]
TestSelfProtectionKillTargetScoping::test_path_qualified_kill_incidental_mention_allowed[/usr/bin/kill $(cat /tmp/pids) && cp /tmp/bk/kirocrew.json ~/]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_path_qualified_kill_incidental_mention_allowed-/usr/bin/kill $(cat /tmp/pids) && cp /tmp/bk/kirocrew.json ~/]
TestSelfProtectionKillTargetScoping::test_empty_substitution_glue_is_still_a_kill[p$()kill -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_empty_substitution_glue_is_still_a_kill-p$()kill -f kirocrew]
TestSelfProtectionKillTargetScoping::test_empty_substitution_glue_is_still_a_kill[p``kill -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_empty_substitution_glue_is_still_a_kill-p``kill -f kirocrew]
TestSelfProtectionKillTargetScoping::test_empty_substitution_glue_is_still_a_kill[kill$()all kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_empty_substitution_glue_is_still_a_kill-kill$()all kirocrew]
TestSelfProtectionKillTargetScoping::test_empty_substitution_glue_is_still_a_kill[$()pkill -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_empty_substitution_glue_is_still_a_kill-$()pkill -f kirocrew]
TestSelfProtectionKillTargetScoping::test_variable_expanded_invocation_still_blocked[X=kirocrew; $X token-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_expanded_program_name_is_judged_by_its_rule[test_variable_expanded_invocation_still_blocked-X=kirocrew; $X token-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_variable_expanded_invocation_still_blocked[X=kirocrew; ${X} token-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_expanded_program_name_is_judged_by_its_rule[test_variable_expanded_invocation_still_blocked-X=kirocrew; ${X} token-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_variable_expanded_invocation_still_blocked[X=kirocrew; $X>/tmp/x token-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_expanded_program_name_is_judged_by_its_rule[test_variable_expanded_invocation_still_blocked-X=kirocrew; $X>/tmp/x token-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_variable_expanded_invocation_still_blocked[P=pkill; $P -f kirocrew-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_expanded_program_name_is_judged_by_its_rule[test_variable_expanded_invocation_still_blocked-P=pkill; $P -f kirocrew-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_computed_assignment_value_still_blocked[X=$(printf {n}); $X {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_computed_assignment_value_still_blocked-X=$(printf {n}); $X {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_computed_assignment_value_still_blocked[X=`printf {n}`; $X {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_computed_assignment_value_still_blocked-X=`printf {n}`; $X {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_computed_assignment_value_still_blocked[X=$(which {n}); $X {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_computed_assignment_value_still_blocked-X=$(which {n}); $X {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_computed_assignment_value_still_blocked[P=$(printf PKILL); $P -f {n}-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_computed_assignment_value_still_blocked-P=$(printf PKILL); $P -f {n}-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_computed_assignment_without_a_protected_name_allowed[X=$(date); echo $X {v}]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_computed_assignment_without_a_protected_name_allowed-X=$(date); echo $X {v}]
TestSelfProtectionKillTargetScoping::test_computed_assignment_without_a_protected_name_allowed[X=$(cat /workplace/alice/{n}-wt-x/f); echo $X {v}]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_computed_assignment_without_a_protected_name_allowed-X=$(cat /workplace/alice/{n}-wt-x/f); echo $X {v}]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cross_a_glued_operator[echo foo;kirocrew>/tmp/x token]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_does_not_cross_a_glued_operator-echo foo;kirocrew>/tmp/x token]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cross_a_glued_operator[echo foo;kirocrew token]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_does_not_cross_a_glued_operator-echo foo;kirocrew token]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cross_a_glued_operator[echo foo;pkill>/tmp/x -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_does_not_cross_a_glued_operator-echo foo;pkill>/tmp/x -f kirocrew]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cross_a_glued_operator[echo foo&&pkill -f kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_does_not_cross_a_glued_operator-echo foo&&pkill -f kirocrew]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_refused_when_piped_to_a_shell[echo kirocrew token | sh]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_refused_when_piped_to_a_shell-echo kirocrew token | sh]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_refused_when_piped_to_a_shell[echo kirocrew token | bash]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_refused_when_piped_to_a_shell-echo kirocrew token | bash]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_refused_when_piped_to_a_shell[echo 'pkill -f kirocrew' | sh]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_refused_when_piped_to_a_shell-echo 'pkill -f kirocrew' | sh]
TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_refused_when_piped_to_a_shell[echo kirocrew token | xargs sh -c]
  -> TestSelfProtectionKillTargetScoping::test_data_consumer_exemption_does_not_cover_a_real_run[test_data_consumer_exemption_refused_when_piped_to_a_shell-echo kirocrew token | xargs sh -c]
TestSelfProtectionKillTargetScoping::test_variable_expanded_shell_sink_still_blocked[echo 'PKILL -f {n}' | $SHELL]
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_variable_expanded_shell_sink_still_blocked-echo 'PKILL -f {n}' | $SHELL]
TestSelfProtectionKillTargetScoping::test_variable_expanded_shell_sink_still_blocked[echo 'PKILL -f {n}' | ${{SHELL}}]
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_variable_expanded_shell_sink_still_blocked-echo 'PKILL -f {n}' | ${{SHELL}}]
TestSelfProtectionKillTargetScoping::test_variable_expanded_shell_sink_still_blocked[echo {n} {v} | $SHELL]
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_variable_expanded_shell_sink_still_blocked-echo {n} {v} | $SHELL]
TestSelfProtectionKillTargetScoping::test_variable_expanded_shell_sink_still_blocked[echo {n} {v} | "$SHELL"]
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_variable_expanded_shell_sink_still_blocked-echo {n} {v} | "$SHELL"]
TestSelfProtectionKillTargetScoping::test_herestring_payload_still_blocked[bash <<< '{n} {v}']
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_herestring_payload_still_blocked-bash <<< '{n} {v}']
TestSelfProtectionKillTargetScoping::test_herestring_payload_still_blocked[bash <<< "{n} {v}"]
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_herestring_payload_still_blocked-bash <<< "{n} {v}"]
TestSelfProtectionKillTargetScoping::test_herestring_payload_still_blocked[sh <<< '{n} {v}']
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_herestring_payload_still_blocked-sh <<< '{n} {v}']
TestSelfProtectionKillTargetScoping::test_herestring_payload_still_blocked[bash <<< '{n} >/tmp/x {v}']
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_herestring_payload_still_blocked-bash <<< '{n} >/tmp/x {v}']
TestSelfProtectionKillTargetScoping::test_herestring_payload_still_blocked[bash <<< 'PKILL -f {n}']
  -> TestSelfProtectionKillTargetScoping::test_text_fed_to_a_shell_still_blocked[test_herestring_payload_still_blocked-bash <<< 'PKILL -f {n}']
TestSelfProtectionKillTargetScoping::test_ansi_c_quoted_program_still_blocked[$'kirocrew' token-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_expanded_program_name_is_judged_by_its_rule[test_ansi_c_quoted_program_still_blocked-$'kirocrew' token-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_ansi_c_quoted_program_still_blocked[$"kirocrew" token-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_expanded_program_name_is_judged_by_its_rule[test_ansi_c_quoted_program_still_blocked-$"kirocrew" token-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_ansi_c_quoted_program_still_blocked[$'pkill' -f kirocrew-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_expanded_program_name_is_judged_by_its_rule[test_ansi_c_quoted_program_still_blocked-$'pkill' -f kirocrew-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_empty_substitution_inside_the_target_is_still_a_kill[pkill -f kiro$()crew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_empty_substitution_inside_the_target_is_still_a_kill-pkill -f kiro$()crew]
TestSelfProtectionKillTargetScoping::test_empty_substitution_inside_the_target_is_still_a_kill[pkill -f kiro``crew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_empty_substitution_inside_the_target_is_still_a_kill-pkill -f kiro``crew]
TestSelfProtectionKillTargetScoping::test_empty_substitution_inside_the_target_is_still_a_kill[killall kiro$()crew]
  -> TestSelfProtectionKillTargetScoping::test_kill_spellings_that_name_the_cli_are_kills[test_empty_substitution_inside_the_target_is_still_a_kill-killall kiro$()crew]
TestSelfProtectionKillTargetScoping::test_globbed_program_name_still_blocked[./bin/kiro[c]rew {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_globbed_program_name_still_blocked-./bin/kiro[c]rew {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_globbed_program_name_still_blocked[kiro?rew {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_globbed_program_name_still_blocked-kiro?rew {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_globbed_program_name_still_blocked[kiro*rew {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_globbed_program_name_still_blocked-kiro*rew {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_globbed_program_name_still_blocked[/usr/local/bin/kiro[c]rew {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_globbed_program_name_still_blocked-/usr/local/bin/kiro[c]rew {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_globbed_program_name_still_blocked[p[k]ill -f {n}-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_globbed_program_name_still_blocked-p[k]ill -f {n}-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_glob_that_cannot_name_the_cli_allowed[kiro[x]few {v}]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_glob_that_cannot_name_the_cli_allowed-kiro[x]few {v}]
TestSelfProtectionKillTargetScoping::test_glob_that_cannot_name_the_cli_allowed[ls ./bin/kiro*rew]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_glob_that_cannot_name_the_cli_allowed-ls ./bin/kiro*rew]
TestSelfProtectionKillTargetScoping::test_glob_that_cannot_name_the_cli_allowed[echo kiro[c]rew {v}]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_glob_that_cannot_name_the_cli_allowed-echo kiro[c]rew {v}]
TestSelfProtectionKillTargetScoping::test_brace_expansion_in_program_name_blocked[kiro{{c..c}}rew {v}]
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_brace_expansion_in_program_name_blocked-kiro{{c..c}}rew {v}]
TestSelfProtectionKillTargetScoping::test_brace_expansion_in_program_name_blocked[kiro{{c,c}}rew {v}]
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_brace_expansion_in_program_name_blocked-kiro{{c,c}}rew {v}]
TestSelfProtectionKillTargetScoping::test_brace_expansion_in_program_name_blocked[p{{k,k}}ill -f {n}]
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_brace_expansion_in_program_name_blocked-p{{k,k}}ill -f {n}]
TestSelfProtectionKillTargetScoping::test_name_assembled_across_assignments[x=p; x=${{x}}kill; $x -f {n}-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_name_assembled_across_assignments-x=p; x=${{x}}kill; $x -f {n}-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_name_assembled_across_assignments[x=pk; y=${{x}}ill; $y -f {n}-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_name_assembled_across_assignments-x=pk; y=${{x}}ill; $y -f {n}-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_name_assembled_across_assignments[a=kiro; b=$a; c=${{b}}crew; $c {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_name_assembled_across_assignments-a=kiro; b=$a; c=${{b}}crew; $c {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_name_assembled_across_assignments[n=kiro; n=${{n}}crew; $n {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_program_name_built_by_expansion_is_judged_by_its_rule[test_name_assembled_across_assignments-n=kiro; n=${{n}}crew; $n {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_indirect_expansion_resolved[N=PKILL; V=N; ${{!V}} -f {n}-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_indirect_expansion_resolved-N=PKILL; V=N; ${{!V}} -f {n}-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_indirect_expansion_resolved[A={n}; B=A; ${{!B}} {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_indirect_expansion_resolved-A={n}; B=A; ${{!B}} {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_indirect_expansion_resolved[x=p; x=${{x}}kill; y=x; ${{!y}} -f {n}-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_indirect_expansion_resolved-x=p; x=${{x}}kill; y=x; ${{!y}} -f {n}-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_sink_module_alias_is_the_same_sink[import subprocess as sp; sp.run('{n} {v}', shell=True)-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_python_sink_spellings_are_sinks[test_sink_module_alias_is_the_same_sink-import subprocess as sp; sp.run('{n} {v}', shell=True)-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_sink_module_alias_is_the_same_sink[from subprocess import run; run('{n} {v}', shell=True)-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_python_sink_spellings_are_sinks[test_sink_module_alias_is_the_same_sink-from subprocess import run; run('{n} {v}', shell=True)-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_sink_module_alias_is_the_same_sink[import subprocess as sp; sp.Popen('PKILL -f {n}', shell=True)-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_python_sink_spellings_are_sinks[test_sink_module_alias_is_the_same_sink-import subprocess as sp; sp.Popen('PKILL -f {n}', shell=True)-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_parameter_transformation_on_a_tracked_variable[K={n}; ${{K:0}} {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_parameter_transformation_on_a_tracked_variable-K={n}; ${{K:0}} {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_parameter_transformation_on_a_tracked_variable[K={n}; ${{K:0:9}} {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_parameter_transformation_on_a_tracked_variable-K={n}; ${{K:0:9}} {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_parameter_transformation_on_a_tracked_variable[K={n}; ${{K^^}} {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_parameter_transformation_on_a_tracked_variable-K={n}; ${{K^^}} {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_parameter_transformation_on_a_tracked_variable[K={n}; ${{K/x/y}} {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_parameter_transformation_on_a_tracked_variable-K={n}; ${{K/x/y}} {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_parameter_transformation_on_a_tracked_variable[K={n}; ${{K#z}} {v}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_parameter_transformation_on_a_tracked_variable-K={n}; ${{K#z}} {v}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_parameter_transformation_on_a_tracked_variable[K=PKILL; ${{K:0}} -f {n}-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_parameter_transformation_on_a_tracked_variable-K=PKILL; ${{K:0}} -f {n}-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_parameter_transformation_on_a_tracked_variable[V2={v}; {n} ${{V2:0}}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_parameter_transformation_on_a_tracked_variable-V2={v}; {n} ${{V2:0}}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_subprocess_output_sinks[subprocess.getoutput('{n} {v}')-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_python_sink_spellings_are_sinks[test_subprocess_output_sinks-subprocess.getoutput('{n} {v}')-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_subprocess_output_sinks[subprocess.getstatusoutput('{n} {v}')-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_python_sink_spellings_are_sinks[test_subprocess_output_sinks-subprocess.getstatusoutput('{n} {v}')-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_subprocess_output_sinks[from subprocess import getoutput; getoutput('{n} {v}')-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_python_sink_spellings_are_sinks[test_subprocess_output_sinks-from subprocess import getoutput; getoutput('{n} {v}')-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_subprocess_output_sinks[sp.getoutput('PKILL -f {n}')-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_python_sink_spellings_are_sinks[test_subprocess_output_sinks-sp.getoutput('PKILL -f {n}')-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_interpreter_variable_bindings_are_inlined[n="{n}"; v="{v}"; subprocess.run([n,v])-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_interpreter_assembled_payload_is_inlined[test_interpreter_variable_bindings_are_inlined-n="{n}"; v="{v}"; subprocess.run([n,v])-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_interpreter_variable_bindings_are_inlined[c="PKILL"; t="{n}"; subprocess.run([c,"-f",t])-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_interpreter_assembled_payload_is_inlined[test_interpreter_variable_bindings_are_inlined-c="PKILL"; t="{n}"; subprocess.run([c,"-f",t])-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_script_that_executes_is_not_a_data_consumer[awk 'BEGIN {{ system(ARGV[1] " " ARGV[2]) }}' {n} {v}]
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_script_that_executes_is_not_a_data_consumer-awk 'BEGIN {{ system(ARGV[1] " " ARGV[2]) }}' {n} {v}]
TestSelfProtectionKillTargetScoping::test_script_that_executes_is_not_a_data_consumer[awk 'BEGIN {{ print | "{n} {v}" }}']
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_script_that_executes_is_not_a_data_consumer-awk 'BEGIN {{ print | "{n} {v}" }}']
TestSelfProtectionKillTargetScoping::test_script_that_executes_is_not_a_data_consumer[sed 's/x/{n} {v}/e' /tmp/f]
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_script_that_executes_is_not_a_data_consumer-sed 's/x/{n} {v}/e' /tmp/f]
TestSelfProtectionKillTargetScoping::test_ordinary_text_processing_still_allowed[awk '{{print $1}}' /workplace/alice/{n}-wt-x/log]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_ordinary_text_processing_still_allowed-awk '{{print $1}}' /workplace/alice/{n}-wt-x/log]
TestSelfProtectionKillTargetScoping::test_ordinary_text_processing_still_allowed[awk '/{v}/ {{print}}' /workplace/alice/{n}-wt-x/log]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_ordinary_text_processing_still_allowed-awk '/{v}/ {{print}}' /workplace/alice/{n}-wt-x/log]
TestSelfProtectionKillTargetScoping::test_ordinary_text_processing_still_allowed[sed -n '1,5p' /workplace/alice/{n}-wt-x/README.md]
  -> TestSelfProtectionKillTargetScoping::test_text_that_cannot_name_the_cli_allowed[test_ordinary_text_processing_still_allowed-sed -n '1,5p' /workplace/alice/{n}-wt-x/README.md]
TestSelfProtectionKillTargetScoping::test_glued_herestring[bash<<<'{n} {v}'-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_glued_herestring-bash<<<'{n} {v}'-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_glued_herestring[sh<<<'{n} {v}'-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_glued_herestring-sh<<<'{n} {v}'-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_glued_herestring[bash<<<'PKILL -f {n}'-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_glued_herestring-bash<<<'PKILL -f {n}'-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_bash_array_expanded_as_a_command[a=({n} {v}); "${{a[@]}}"-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_bash_array_expanded_as_a_command-a=({n} {v}); "${{a[@]}}"-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_bash_array_expanded_as_a_command[a=({n} {v}); ${{a[*]}}-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_bash_array_expanded_as_a_command-a=({n} {v}); ${{a[*]}}-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_bash_array_expanded_as_a_command[arr=({n} {v}); "${{arr[@]}}"-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_bash_array_expanded_as_a_command-arr=({n} {v}); "${{arr[@]}}"-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_bash_array_expanded_as_a_command[a=({n} {v}); echo hi; "${{a[@]}}"-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_bash_array_expanded_as_a_command-a=({n} {v}); echo hi; "${{a[@]}}"-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_bash_array_expanded_as_a_command[a=(PKILL -f {n}); "${{a[@]}}"-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_bash_array_expanded_as_a_command-a=(PKILL -f {n}); "${{a[@]}}"-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_bash_array_expanded_as_a_command[a=(killall {n}); "${{a[@]}}"-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_bash_array_expanded_as_a_command-a=(killall {n}); "${{a[@]}}"-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_percent_format_join_inside_a_sink[os.system("{n} %s" % "{v}")-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_interpreter_assembled_payload_is_inlined[test_percent_format_join_inside_a_sink-os.system("{n} %s" % "{v}")-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_percent_format_join_inside_a_sink[os.system("%s %s" % ("{n}", "{v}"))-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_interpreter_assembled_payload_is_inlined[test_percent_format_join_inside_a_sink-os.system("%s %s" % ("{n}", "{v}"))-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_percent_format_join_inside_a_sink[os.system("PKILL -f %s" % "{n}")-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_interpreter_assembled_payload_is_inlined[test_percent_format_join_inside_a_sink-os.system("PKILL -f %s" % "{n}")-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_shell_reached_through_a_variable_is_a_nested_shell[$SHELL -c '{n} {v}'-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_shell_reached_through_a_variable_is_a_nested_shell-$SHELL -c '{n} {v}'-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_shell_reached_through_a_variable_is_a_nested_shell[${{SHELL}} -c '{n} {v}'-credential-exfil-kirocrew-token]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_shell_reached_through_a_variable_is_a_nested_shell-${{SHELL}} -c '{n} {v}'-credential-exfil-kirocrew-token]
TestSelfProtectionKillTargetScoping::test_shell_reached_through_a_variable_is_a_nested_shell[$SHELL -c 'PKILL -f {n}'-self-protection-kill]
  -> TestSelfProtectionKillTargetScoping::test_resolved_program_text_is_judged_by_its_rule[test_shell_reached_through_a_variable_is_a_nested_shell-$SHELL -c 'PKILL -f {n}'-self-protection-kill]
TestSelfProtectionKillTargetScoping::test_windows_drive_qualified_path_blocked[C:\\Users\\runner\\Scripts\\{n}.exe {v}]
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_windows_drive_qualified_path_blocked-C:\\Users\\runner\\Scripts\\{n}.exe {v}]
TestSelfProtectionKillTargetScoping::test_windows_drive_qualified_path_blocked[C:/Users/runner/Scripts/{n}.exe {v}]
  -> TestSelfProtectionKillTargetScoping::test_expanded_or_executing_spelling_blocked[test_windows_drive_qualified_path_blocked-C:/Users/runner/Scripts/{n}.exe {v}]
TestSelfProtectionKillTargetScoping::test_kill_of_something_else_then_a_mention_allowed[pkill -f other; echo kirocrew]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_kill_of_something_else_then_a_mention_allowed-pkill -f other; echo kirocrew]
TestSelfProtectionKillTargetScoping::test_kill_of_something_else_then_a_mention_allowed[pkill -f other && ls /workplace/alice/kirocrew-wt-x]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_kill_of_something_else_then_a_mention_allowed-pkill -f other && ls /workplace/alice/kirocrew-wt-x]
TestSelfProtectionKillTargetScoping::test_incidental_mention_allowed[kill 12345]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_incidental_mention_allowed-kill 12345]
TestSelfProtectionKillTargetScoping::test_incidental_mention_allowed[kill 12345 && cp /tmp/bk/kirocrew.json ~/.kiro/agents/]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_incidental_mention_allowed-kill 12345 && cp /tmp/bk/kirocrew.json ~/.kiro/agents/]
TestSelfProtectionKillTargetScoping::test_incidental_mention_allowed[kill $PID; diff /tmp/bk/kirocrew.json ~/.kiro/agents/kirocrew.json]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_incidental_mention_allowed-kill $PID; diff /tmp/bk/kirocrew.json ~/.kiro/agents/kirocrew.json]
TestSelfProtectionKillTargetScoping::test_incidental_mention_allowed[kill $PID  # stop the stray kirocrew preview instance]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_incidental_mention_allowed-kill $PID  # stop the stray kirocrew preview instance]
TestSelfProtectionKillTargetScoping::test_incidental_mention_allowed[kill 12345 | tee /tmp/kirocrew-gw.log]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_incidental_mention_allowed-kill 12345 | tee /tmp/kirocrew-gw.log]
TestSelfProtectionKillTargetScoping::test_incidental_mention_allowed[kill $(cat /tmp/pids) && cp /tmp/bk/kirocrew.json ~/]
  -> TestSelfProtectionKillTargetScoping::test_kill_that_only_mentions_the_cli_allowed[test_incidental_mention_allowed-kill $(cat /tmp/pids) && cp /tmp/bk/kirocrew.json ~/]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill `printf ')' ; pgrep -f {n}`]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill `printf ')' ; pgrep -f {n}`]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[sudo kill $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-sudo kill $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[sh -c 'kill $(printf ")" ; pgrep -f {n})']
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-sh -c 'kill $(printf ")" ; pgrep -f {n})']
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill 123 ';' $(pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill 123 ';' $(pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill &>/dev/null $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill &>/dev/null $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill >|/dev/null $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill >|/dev/null $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill `printf '\\`' ; pgrep -f {n}`]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill `printf '\\`' ; pgrep -f {n}`]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[echo "$(date)" ; kill $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-echo "$(date)" ; kill $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill "$(printf ')' ; pgrep -f {n})"]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill "$(printf ')' ; pgrep -f {n})"]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[k''ill $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-k''ill $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[k'i'll $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-k'i'll $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill["ki"ll $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-"ki"ll $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill$() $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill$() $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill$( ) $(pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill$( ) $(pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill$(:) $(pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill$(:) $(pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill$(:) $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill$(:) $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[kill$(true) `pgrep -f {n}`]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-kill$(true) `pgrep -f {n}`]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[k=kill; $k $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-k=kill; $k $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[k=kill; ${{k}} $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-k=kill; ${{k}} $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[x=/usr/bin/kill; $x $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-x=/usr/bin/kill; $x $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[`printf kill` $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-`printf kill` $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_quoted_paren_decoy_is_still_a_self_kill[$(echo kill) $(printf ')' ; pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_quoted_paren_decoy_is_still_a_self_kill-$(echo kill) $(printf ')' ; pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_control_spellings_remain_detected[kill $(pgrep -f {n})]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_control_spellings_remain_detected-kill $(pgrep -f {n})]
TestSelfKillArgvWindowIsQuoteAware::test_control_spellings_remain_detected[kill $(pgrep -f {n}]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_control_spellings_remain_detected-kill $(pgrep -f {n}]
TestSelfKillArgvWindowIsQuoteAware::test_control_spellings_remain_detected[kill $(printf ')' ; pgrep -f {n}]
  -> TestSelfKillArgvWindowIsQuoteAware::test_quote_aware_window_still_sees_the_kill[test_control_spellings_remain_detected-kill $(printf ')' ; pgrep -f {n}]
TestSelfKillRawWindowSearchesDequotedView::test_sibling_spellings_stay_denied[kill $(case x in x) :;; esac; pgrep -f {n})]
  -> TestSelfKillRawWindowSearchesDequotedView::test_dequoted_view_keeps_these_denied[test_sibling_spellings_stay_denied-kill $(case x in x) :;; esac; pgrep -f {n})]
TestSelfKillRawWindowSearchesDequotedView::test_sibling_spellings_stay_denied[kill $(case x in x) pgrep -f {q};; esac)]
  -> TestSelfKillRawWindowSearchesDequotedView::test_dequoted_view_keeps_these_denied[test_sibling_spellings_stay_denied-kill $(case x in x) pgrep -f {q};; esac)]
TestSelfKillRawWindowSearchesDequotedView::test_sibling_spellings_stay_denied[kill $(:; pgrep -f {q})]
  -> TestSelfKillRawWindowSearchesDequotedView::test_dequoted_view_keeps_these_denied[test_sibling_spellings_stay_denied-kill $(:; pgrep -f {q})]
TestSelfKillRawWindowSearchesDequotedView::test_sibling_spellings_stay_denied[kill $(echo ';;'; pgrep -f {q})]
  -> TestSelfKillRawWindowSearchesDequotedView::test_dequoted_view_keeps_these_denied[test_sibling_spellings_stay_denied-kill $(echo ';;'; pgrep -f {q})]
TestSelfKillRawWindowSearchesDequotedView::test_a_redirected_mention_in_a_kill_owned_body_stays_denied[kill $(case x in x) :;; esac; printf {q} >/dev/null; printf 4242)]
  -> TestSelfKillRawWindowSearchesDequotedView::test_dequoted_view_keeps_these_denied[test_a_redirected_mention_in_a_kill_owned_body_stays_denied-kill $(case x in x) :;; esac; printf {q} >/dev/null; printf 4242)]
TestSelfKillRawWindowSearchesDequotedView::test_a_redirected_mention_in_a_kill_owned_body_stays_denied[kill $(printf {q} >/dev/null; printf 4242)]
  -> TestSelfKillRawWindowSearchesDequotedView::test_dequoted_view_keeps_these_denied[test_a_redirected_mention_in_a_kill_owned_body_stays_denied-kill $(printf {q} >/dev/null; printf 4242)]
TestSelfKillRawWindowSearchesDequotedView::test_a_redirected_mention_in_a_kill_owned_body_stays_denied[kill $(case x in x) :;; esac; printf {n} >/dev/null; printf 4242)]
  -> TestSelfKillRawWindowSearchesDequotedView::test_dequoted_view_keeps_these_denied[test_a_redirected_mention_in_a_kill_owned_body_stays_denied-kill $(case x in x) :;; esac; printf {n} >/dev/null; printf 4242)]

@iamwhatever

Copy link
Copy Markdown
Contributor Author

Old → new test-id map (continued)

test/test_denied_commands_security_mentions.py (115)
TestNameAsDataIsNotAnInvocation::test_name_and_verb_as_data_allowed[echo kirocrew token]
  -> TestNameAsDataIsNotAnInvocation::test_names_as_data_allowed[test_name_and_verb_as_data_allowed-echo kirocrew token]
TestNameAsDataIsNotAnInvocation::test_name_and_verb_as_data_allowed[echo 'the kirocrew token command mints a credential']
  -> TestNameAsDataIsNotAnInvocation::test_names_as_data_allowed[test_name_and_verb_as_data_allowed-echo 'the kirocrew token command mints a credential']
TestNameAsDataIsNotAnInvocation::test_name_and_verb_as_data_allowed[printf '%s' kirocrew token]
  -> TestNameAsDataIsNotAnInvocation::test_names_as_data_allowed[test_name_and_verb_as_data_allowed-printf '%s' kirocrew token]
TestNameAsDataIsNotAnInvocation::test_name_and_verb_as_data_allowed[cat notes.md | grep kirocrew token]
  -> TestNameAsDataIsNotAnInvocation::test_names_as_data_allowed[test_name_and_verb_as_data_allowed-cat notes.md | grep kirocrew token]
TestNameAsDataIsNotAnInvocation::test_name_and_verb_as_data_allowed[git commit -m 'note: kirocrew token rule']
  -> TestNameAsDataIsNotAnInvocation::test_names_as_data_allowed[test_name_and_verb_as_data_allowed-git commit -m 'note: kirocrew token rule']
TestNameAsDataIsNotAnInvocation::test_kill_verb_as_data_allowed[echo pkill kirocrew]
  -> TestNameAsDataIsNotAnInvocation::test_names_as_data_allowed[test_kill_verb_as_data_allowed-echo pkill kirocrew]
TestNameAsDataIsNotAnInvocation::test_kill_verb_as_data_allowed[echo 'run pkill kirocrew to stop it']
  -> TestNameAsDataIsNotAnInvocation::test_names_as_data_allowed[test_kill_verb_as_data_allowed-echo 'run pkill kirocrew to stop it']
TestPermissionVerbMentionNarrowing::test_exec_capable_exclusion_costs_these_audit_spellings[rg -n 'chmod|chown' /etc/profile.d]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_exec_capable_exclusion_costs_these_audit_spellings-rg -n 'chmod|chown' /etc/profile.d]
TestPermissionVerbMentionNarrowing::test_exec_capable_exclusion_costs_these_audit_spellings[sed -n '/chmod/p' /etc/passwd]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_exec_capable_exclusion_costs_these_audit_spellings-sed -n '/chmod/p' /etc/passwd]
TestPermissionVerbMentionNarrowing::test_exec_capable_exclusion_costs_these_audit_spellings[awk '/chmod/ {print $1}' /etc/passwd]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_exec_capable_exclusion_costs_these_audit_spellings-awk '/chmod/ {print $1}' /etc/passwd]
TestPermissionVerbMentionNarrowing::test_exec_capable_exclusion_costs_these_audit_spellings[grep -rn 'chmod|/etc/' src/ | base64]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_exec_capable_exclusion_costs_these_audit_spellings-grep -rn 'chmod|/etc/' src/ | base64]
TestPermissionVerbMentionNarrowing::test_exec_capable_exclusion_costs_these_audit_spellings[grep -rn 'chmod|/etc/' src/ | yq]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_exec_capable_exclusion_costs_these_audit_spellings-grep -rn 'chmod|/etc/' src/ | yq]
TestPermissionVerbMentionNarrowing::test_exec_capable_exclusion_costs_these_audit_spellings[grep -rn 'chmod|/etc/' src/ | sort | uniq | head -20]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_exec_capable_exclusion_costs_these_audit_spellings-grep -rn 'chmod|/etc/' src/ | sort | uniq | head -20]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[env X=1 chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-env X=1 chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[timeout 5 chown root /etc/passwd]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-timeout 5 chown root /etc/passwd]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[nice -n 5 chown root /etc/passwd]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-nice -n 5 chown root /etc/passwd]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[nohup chown root /etc/passwd]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-nohup chown root /etc/passwd]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[runuser -u root -- chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-runuser -u root -- chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[chroot / chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-chroot / chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[pkexec chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-pkexec chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[systemd-run chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-systemd-run chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[doas chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-doas chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[su -c 'chmod 600 /etc/shadow']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-su -c 'chmod 600 /etc/shadow']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[echo x | xargs chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-echo x | xargs chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[find . -name x -exec chmod 600 /etc/shadow ;]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-find . -name x -exec chmod 600 /etc/shadow ;]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[X=1 chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-X=1 chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[A=1 B=2 chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-A=1 B=2 chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[bash -c 'chmod 000 /etc/shadow']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-bash -c 'chmod 000 /etc/shadow']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sh -c "chmod 000 /etc/shadow"]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sh -c "chmod 000 /etc/shadow"]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[eval 'chmod 600 /etc/shadow']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-eval 'chmod 600 /etc/shadow']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[echo $(chmod 600 /etc/shadow)]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-echo $(chmod 600 /etc/shadow)]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[cat <(chmod 600 /etc/shadow)]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-cat <(chmod 600 /etc/shadow)]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[echo `chmod 600 /etc/shadow`]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-echo `chmod 600 /etc/shadow`]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[echo "$(bash -c 'chmod 600 /etc/shadow')"]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-echo "$(bash -c 'chmod 600 /etc/shadow')"]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sh <<EOF\nchmod 600 /etc/shadow\nEOF]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sh <<EOF\nchmod 600 /etc/shadow\nEOF]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ls /etc/profile.d& chmod -R g+w /etc/profile.d]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ls /etc/profile.d& chmod -R g+w /etc/profile.d]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ls /etc/profile.d&& chmod -R g+w /etc/profile.d]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ls /etc/profile.d&& chmod -R g+w /etc/profile.d]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[cat /tmp/f& chown root:root /etc/profile.d]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-cat /tmp/f& chown root:root /etc/profile.d]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ls /tmp& chmod 777 ~]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ls /tmp& chmod 777 ~]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn chmod src/& sudo chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn chmod src/& sudo chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[bash -c 'ls /etc/profile.d& chmod -R g+w /etc/profile.d']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-bash -c 'ls /etc/profile.d& chmod -R g+w /etc/profile.d']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 600 /etc/shadow' f|bash|wc]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 600 /etc/shadow' f|bash|wc]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 600 /etc/shadow' f|sh]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 600 /etc/shadow' f|sh]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 777 /etc/x' f|python3]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 777 /etc/x' f|python3]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 600 /etc/shadow' f;bash]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 600 /etc/shadow' f;bash]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[bash -c "grep -h 'chmod 600 /etc/shadow' f|bash"]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-bash -c "grep -h 'chmod 600 /etc/shadow' f|bash"]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[xxd chmod /usr/local/bin/git]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-xxd chmod /usr/local/bin/git]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[xxd chown /usr/local/bin/git]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-xxd chown /usr/local/bin/git]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[uniq chmod /usr/local/bin/git]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-uniq chmod /usr/local/bin/git]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[uniq -c chmod /usr/local/bin/git]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-uniq -c chmod /usr/local/bin/git]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[xxd - chmod/etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-xxd - chmod/etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 600 /etc/shadow' f | xxd a b]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 600 /etc/shadow' f | xxd a b]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[bash -c 'xxd chmod /usr/local/bin/git']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-bash -c 'xxd chmod /usr/local/bin/git']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch""mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch""mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch''mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch''mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch'mod' 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch'mod' 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied["ch"mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-"ch"mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch\\mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch\\mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch$()mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch$()mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[/bin/ch""mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-/bin/ch""mod 777 ~/.ssh/id_rsa ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch""own root /etc/passwd ; grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch""own root /etc/passwd ; grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch""mod 777 ~/.ssh/id_rsa && grep -h 'chmod 777 /etc/x' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch""mod 777 ~/.ssh/id_rsa && grep -h 'chmod 777 /etc/x' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep "$(ls /etc/x& chmod -R g+w /etc/x)" f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep "$(ls /etc/x& chmod -R g+w /etc/x)" f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep "`chmod 600 /etc/shadow`" f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep "`chmod 600 /etc/shadow`" f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep "a"|"b" chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep "a"|"b" chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ls /etc/x&2>&1 chmod -R g+w /etc/x]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ls /etc/x&2>&1 chmod -R g+w /etc/x]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ls /etc/x& chmod -R g+w /etc/x 2>&1]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ls /etc/x& chmod -R g+w /etc/x 2>&1]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn x src/ > /tmp/s.sh 2>&1; chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn x src/ > /tmp/s.sh 2>&1; chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn chmod src/ ; chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn chmod src/ ; chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn chmod src/ && chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn chmod src/ && chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn chmod src/ || sudo chown root /etc/passwd]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn chmod src/ || sudo chown root /etc/passwd]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn x src/;chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn x src/;chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep x f && (chmod 600 /etc/shadow)]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep x f && (chmod 600 /etc/shadow)]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep x f && { chmod 600 /etc/shadow; }]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep x f && { chmod 600 /etc/shadow; }]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn chmod src/\nchmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn chmod src/\nchmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[chmod 600 \\\n/etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-chmod 600 \\\n/etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -nE 'chmod /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -nE 'chmod /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -nE chmod|chown /etc/passwd]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -nE chmod|chown /etc/passwd]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep 'x'|'chmod' /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep 'x'|'chmod' /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep "x|$(chmod 600 /etc/shadow)" f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep "x|$(chmod 600 /etc/shadow)" f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[echo 'chmod 600 /etc/shadow' > /tmp/s.sh]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-echo 'chmod 600 /etc/shadow' > /tmp/s.sh]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[printf 'chmod 600 /etc/shadow' >> /tmp/s.sh]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-printf 'chmod 600 /etc/shadow' >> /tmp/s.sh]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 600 /etc/shadow' f > /tmp/s.sh]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 600 /etc/shadow' f > /tmp/s.sh]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[tee /etc/x <<< 'chmod 600 /etc/shadow']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-tee /etc/x <<< 'chmod 600 /etc/shadow']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 600 /etc/shadow' f | sh]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 600 /etc/shadow' f | sh]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -h 'chmod 600 /etc/shadow' f | python]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -h 'chmod 600 /etc/shadow' f | python]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[echo 'chmod 600 /etc/shadow' | bash]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-echo 'chmod 600 /etc/shadow' | bash]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[awk 'begin{system("chmod 600 /etc/shadow")}']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-awk 'begin{system("chmod 600 /etc/shadow")}']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[awk '{print | "chmod 600 /etc/shadow"}' f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-awk '{print | "chmod 600 /etc/shadow"}' f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[cp chmod /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-cp chmod /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[mv chmod /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-mv chmod /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[/bin/chmod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-/bin/chmod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied['chmod' 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-'chmod' 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[$'chmod' 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-$'chmod' 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[ch""mod 600 /etc/shadow]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-ch""mod 600 /etc/shadow]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[chmod --reference=/etc/passwd f]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-chmod --reference=/etc/passwd f]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[chmod -R g-w /etc/ssl]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-chmod -R g-w /etc/ssl]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[chown 0:0 /etc/sudoers]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-chown 0:0 /etc/sudoers]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chmod 755 /usr/bin/ls]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chmod 755 /usr/bin/ls]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chmod 600 /boot/vmlinuz]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chmod 600 /boot/vmlinuz]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chmod 640 /sbin/init]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chmod 640 /sbin/init]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chmod 644 /lib/libc.so]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chmod 644 /lib/libc.so]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chmod 644 /lib64/ld.so]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chmod 644 /lib64/ld.so]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chown root /usr/bin/ls]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chown root /usr/bin/ls]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chown root /boot/vmlinuz]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chown root /boot/vmlinuz]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chown root /sbin/init]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chown root /sbin/init]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chown root /lib/libc.so]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chown root /lib/libc.so]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chown root /lib64/ld.so]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chown root /lib64/ld.so]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[chmod 777 ~]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-chmod 777 ~]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[sudo chmod 777 ~]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-sudo chmod 777 ~]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[bash -c 'chmod 777 ~']
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-bash -c 'chmod 777 ~']
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[echo 'chmod 777 ~' > /tmp/s.sh]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-echo 'chmod 777 ~' > /tmp/s.sh]
TestPermissionVerbMentionNarrowing::test_real_invocation_still_denied[grep -rn chmod src/ && chmod 777 ~]
  -> TestPermissionVerbMentionNarrowing::test_exec_capable_spellings_still_denied[test_real_invocation_still_denied-grep -rn chmod src/ && chmod 777 ~]

@iamwhatever

Copy link
Copy Markdown
Contributor Author

Old → new test-id map (continued)

test/test_denied_commands_security_mint.py (141)
TestInterpreterArgvLiteralMint::test_argv_literal_blocked[python -c "import subprocess; subprocess.run(['kirocrew','token'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_argv_literal_blocked-python -c "import subprocess; subprocess.run(['kirocrew','token'])"]
TestInterpreterArgvLiteralMint::test_argv_literal_blocked[python3 -c "import subprocess; subprocess.run(['kirocrew', 'token'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_argv_literal_blocked-python3 -c "import subprocess; subprocess.run(['kirocrew', 'token'])"]
TestInterpreterArgvLiteralMint::test_argv_literal_blocked[node -e 'require("child_process").execFileSync("kirocrew",["token"])']
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_argv_literal_blocked-node -e 'require("child_process").execFileSync("kirocrew",["token"])']
TestInterpreterArgvLiteralMint::test_argv_literal_blocked[python -c "import os; os.execvp('kirocrew', ['kirocrew', 'token'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_argv_literal_blocked-python -c "import os; os.execvp('kirocrew', ['kirocrew', 'token'])"]
TestInterpreterArgvLiteralMint::test_argv_literal_blocked[perl -e 'system("kirocrew","token")']
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_argv_literal_blocked-perl -e 'system("kirocrew","token")']
TestInterpreterArgvLiteralMint::test_argv_literal_blocked[ruby -e 'system "kirocrew", "token"']
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_argv_literal_blocked-ruby -e 'system "kirocrew", "token"']
TestInterpreterArgvLiteralMint::test_intervening_quoted_flags_still_blocked[python -c "subprocess.run(['kirocrew','--no-jail','token'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_intervening_quoted_flags_still_blocked-python -c "subprocess.run(['kirocrew','--no-jail','token'])"]
TestInterpreterArgvLiteralMint::test_intervening_quoted_flags_still_blocked[python -c "subprocess.run(['kirocrew', '-v', '--no-jail', 'token'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_intervening_quoted_flags_still_blocked-python -c "subprocess.run(['kirocrew', '-v', '--no-jail', 'token'])"]
TestInterpreterArgvLiteralMint::test_intervening_quoted_flags_still_blocked[node -e 'execFileSync("kirocrew",["--json","token"])']
  -> TestInterpreterArgvLiteralMint::test_interpreter_argv_literal_blocked[test_intervening_quoted_flags_still_blocked-node -e 'execFileSync("kirocrew",["--json","token"])']
TestInterpreterArgvLiteralMint::test_separator_nested_in_a_substitution_does_not_end_the_argv[{n} $(true; echo {v})]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_separator_nested_in_a_substitution_does_not_end_the_argv-{n} $(true; echo {v})]
TestInterpreterArgvLiteralMint::test_separator_nested_in_a_substitution_does_not_end_the_argv[{n} $(echo {v})]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_separator_nested_in_a_substitution_does_not_end_the_argv-{n} $(echo {v})]
TestInterpreterArgvLiteralMint::test_separator_nested_in_a_substitution_does_not_end_the_argv[PKILL -f $(true; echo {n})]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_separator_nested_in_a_substitution_does_not_end_the_argv-PKILL -f $(true; echo {n})]
TestInterpreterArgvLiteralMint::test_env_split_string_payload_blocked[env -S '{n} {v}']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_env_split_string_payload_blocked-env -S '{n} {v}']
TestInterpreterArgvLiteralMint::test_env_split_string_payload_blocked[env -S'{n} {v}']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_env_split_string_payload_blocked-env -S'{n} {v}']
TestInterpreterArgvLiteralMint::test_env_split_string_payload_blocked[env --split-string '{n} {v}']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_env_split_string_payload_blocked-env --split-string '{n} {v}']
TestInterpreterArgvLiteralMint::test_env_split_string_payload_blocked[env --split-string='{n} {v}']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_env_split_string_payload_blocked-env --split-string='{n} {v}']
TestInterpreterArgvLiteralMint::test_env_split_string_payload_blocked[env -S 'PKILL -f {n}']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_env_split_string_payload_blocked-env -S 'PKILL -f {n}']
TestInterpreterArgvLiteralMint::test_xargs_appended_arguments_blocked[echo {v} | xargs {n}]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_xargs_appended_arguments_blocked-echo {v} | xargs {n}]
TestInterpreterArgvLiteralMint::test_xargs_appended_arguments_blocked[echo {v} | xargs -n1 {n}]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_xargs_appended_arguments_blocked-echo {v} | xargs -n1 {n}]
TestInterpreterArgvLiteralMint::test_xargs_appended_arguments_blocked[echo {n} | xargs PKILL -f]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_xargs_appended_arguments_blocked-echo {n} | xargs PKILL -f]
TestInterpreterArgvLiteralMint::test_xargs_without_a_protected_command_allowed[echo hi | xargs ls]
  -> TestInterpreterArgvLiteralMint::test_payload_without_a_protected_command_allowed[test_xargs_without_a_protected_command_allowed-echo hi | xargs ls]
TestInterpreterArgvLiteralMint::test_xargs_without_a_protected_command_allowed[echo /workplace/alice/{n}-wt-x | xargs ls]
  -> TestInterpreterArgvLiteralMint::test_payload_without_a_protected_command_allowed[test_xargs_without_a_protected_command_allowed-echo /workplace/alice/{n}-wt-x | xargs ls]
TestInterpreterArgvLiteralMint::test_string_prefix_before_the_payload_blocked[python -c 'os.system(f"{n} {v}")']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_string_prefix_before_the_payload_blocked-python -c 'os.system(f"{n} {v}")']
TestInterpreterArgvLiteralMint::test_string_prefix_before_the_payload_blocked[python -c 'os.system(f"PKILL -f {n}")']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_string_prefix_before_the_payload_blocked-python -c 'os.system(f"PKILL -f {n}")']
TestInterpreterArgvLiteralMint::test_string_prefix_before_the_payload_blocked[python -c 'os.system(rb"{n} {v}")']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_string_prefix_before_the_payload_blocked-python -c 'os.system(rb"{n} {v}")']
TestInterpreterArgvLiteralMint::test_glued_assignment_separator_still_resolved[X={n};$X {v}-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_glued_assignment_separator_still_resolved-X={n};$X {v}-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_glued_assignment_separator_still_resolved[X=PKILL;$X -f {n}-self-protection-kill]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_glued_assignment_separator_still_resolved-X=PKILL;$X -f {n}-self-protection-kill]
TestInterpreterArgvLiteralMint::test_function_forwarding_arguments_blocked[x(){{ {n} "$@";}}; x {v}-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_function_forwarding_arguments_blocked-x(){{ {n} "$@";}}; x {v}-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_function_forwarding_arguments_blocked[x(){{ {n} "$1";}}; x {v}-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_function_forwarding_arguments_blocked-x(){{ {n} "$1";}}; x {v}-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_function_forwarding_arguments_blocked[function x(){{ {n} "$@";}}; x {v}-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_function_forwarding_arguments_blocked-function x(){{ {n} "$@";}}; x {v}-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_function_forwarding_arguments_blocked[x(){{ PKILL -f "$1";}}; x {n}-self-protection-kill]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_function_forwarding_arguments_blocked-x(){{ PKILL -f "$1";}}; x {n}-self-protection-kill]
TestInterpreterArgvLiteralMint::test_function_forwarding_arguments_blocked[k(){{ PKILL -f {n};}}; k-self-protection-kill]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_function_forwarding_arguments_blocked-k(){{ PKILL -f {n};}}; k-self-protection-kill]
TestInterpreterArgvLiteralMint::test_path_qualified_program_in_interpreter_argv_blocked[python -c "subprocess.run(['/usr/bin/{n}','{v}'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_path_qualified_program_in_interpreter_argv_blocked-python -c "subprocess.run(['/usr/bin/{n}','{v}'])"]
TestInterpreterArgvLiteralMint::test_path_qualified_program_in_interpreter_argv_blocked[python -c "subprocess.run(['./bin/{n}','{v}'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_path_qualified_program_in_interpreter_argv_blocked-python -c "subprocess.run(['./bin/{n}','{v}'])"]
TestInterpreterArgvLiteralMint::test_path_qualified_program_in_interpreter_argv_blocked[python -c "subprocess.run(['/usr/bin/PKILL','-f','{n}'])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_path_qualified_program_in_interpreter_argv_blocked-python -c "subprocess.run(['/usr/bin/PKILL','-f','{n}'])"]
TestInterpreterArgvLiteralMint::test_path_qualified_program_in_interpreter_argv_blocked[node -e 'execFileSync("/opt/{n}",["{v}"])']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_path_qualified_program_in_interpreter_argv_blocked-node -e 'execFileSync("/opt/{n}",["{v}"])']
TestInterpreterArgvLiteralMint::test_path_qualified_program_in_interpreter_argv_blocked[python -c 'os.system("/usr/bin/{n} {v}")']
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_path_qualified_program_in_interpreter_argv_blocked-python -c 'os.system("/usr/bin/{n} {v}")']
TestInterpreterArgvLiteralMint::test_printf_escaped_payload_blocked[printf '{n} {v}\\n' | bash]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_printf_escaped_payload_blocked-printf '{n} {v}\\n' | bash]
TestInterpreterArgvLiteralMint::test_printf_escaped_payload_blocked[printf '{n} {v}\\n' | sh]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_printf_escaped_payload_blocked-printf '{n} {v}\\n' | sh]
TestInterpreterArgvLiteralMint::test_printf_escaped_payload_blocked[printf 'PKILL -f {n}\\n' | bash]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_printf_escaped_payload_blocked-printf 'PKILL -f {n}\\n' | bash]
TestInterpreterArgvLiteralMint::test_printf_escaped_payload_blocked[echo -e '{n} {v}\\n' | bash]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_printf_escaped_payload_blocked-echo -e '{n} {v}\\n' | bash]
TestInterpreterArgvLiteralMint::test_alias_definition_resolved[bash -c 'alias x={n}; x {v}'-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_alias_definition_resolved-bash -c 'alias x={n}; x {v}'-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_alias_definition_resolved[bash -c 'alias k=PKILL; k -f {n}'-self-protection-kill]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_alias_definition_resolved-bash -c 'alias k=PKILL; k -f {n}'-self-protection-kill]
TestInterpreterArgvLiteralMint::test_star_unpacked_argv_blocked[python -c "subprocess.run(['{n}', *['{v}']])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_star_unpacked_argv_blocked-python -c "subprocess.run(['{n}', *['{v}']])"]
TestInterpreterArgvLiteralMint::test_star_unpacked_argv_blocked[python -c "subprocess.run(['PKILL', *['-f','{n}']])"]
  -> TestInterpreterArgvLiteralMint::test_interpreter_payload_spellings_still_blocked[test_star_unpacked_argv_blocked-python -c "subprocess.run(['PKILL', *['-f','{n}']])"]
TestInterpreterArgvLiteralMint::test_substitution_in_program_position_is_not_inert_data[$(printf {n}) {v}-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_substitution_in_program_position_is_not_inert_data-$(printf {n}) {v}-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_substitution_in_program_position_is_not_inert_data[`printf {n}` {v}-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_substitution_in_program_position_is_not_inert_data-`printf {n}` {v}-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_substitution_in_program_position_is_not_inert_data[$(echo {n}) {v}-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_substitution_in_program_position_is_not_inert_data-$(echo {n}) {v}-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_substitution_in_program_position_is_not_inert_data[$(printf PKILL) -f {n}-self-protection-kill]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_substitution_in_program_position_is_not_inert_data-$(printf PKILL) -f {n}-self-protection-kill]
TestInterpreterArgvLiteralMint::test_process_substitution_body_is_a_command[cat <({n} {v})-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_process_substitution_body_is_a_command-cat <({n} {v})-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_process_substitution_body_is_a_command[diff <({n} {v}) /tmp/x-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_process_substitution_body_is_a_command-diff <({n} {v}) /tmp/x-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_process_substitution_body_is_a_command[tee >({n} {v})-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_process_substitution_body_is_a_command-tee >({n} {v})-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_process_substitution_body_is_a_command[cat <(PKILL -f {n})-self-protection-kill]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_process_substitution_body_is_a_command-cat <(PKILL -f {n})-self-protection-kill]
TestInterpreterArgvLiteralMint::test_multiword_alias_replacement_blocked[bash -c "alias x='{n} {v}'; x"-credential-exfil-kirocrew-token]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_multiword_alias_replacement_blocked-bash -c "alias x='{n} {v}'; x"-credential-exfil-kirocrew-token]
TestInterpreterArgvLiteralMint::test_multiword_alias_replacement_blocked[bash -c "alias k='PKILL -f {n}'; k"-self-protection-kill]
  -> TestInterpreterArgvLiteralMint::test_resolved_payload_is_judged_by_its_rule[test_multiword_alias_replacement_blocked-bash -c "alias k='PKILL -f {n}'; k"-self-protection-kill]
TestInterpreterArgvLiteralMint::test_substitution_outside_the_kill_argv_allowed[kill 123; echo $(cat /tmp/{n})]
  -> TestInterpreterArgvLiteralMint::test_payload_without_a_protected_command_allowed[test_substitution_outside_the_kill_argv_allowed-kill 123; echo $(cat /tmp/{n})]
TestInterpreterArgvLiteralMint::test_substitution_outside_the_kill_argv_allowed[kill 123; ls $(dirname /tmp/{n}/x)]
  -> TestInterpreterArgvLiteralMint::test_payload_without_a_protected_command_allowed[test_substitution_outside_the_kill_argv_allowed-kill 123; ls $(dirname /tmp/{n}/x)]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-kirocrew token]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[kirocrew token --ttl 1h]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-kirocrew token --ttl 1h]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[kirocrew token --port 6777]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-kirocrew token --port 6777]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[./bin/kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-./bin/kirocrew token]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[ssh remote-host kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-ssh remote-host kirocrew token]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked["$HOME/bin/kirocrew" token --ttl 30m]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-"$HOME/bin/kirocrew" token --ttl 30m]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked["$HOME/bin/kirocrew" token --ttl 20h --port 7879]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-"$HOME/bin/kirocrew" token --ttl 20h --port 7879]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked["/opt/custom/kirocrew" token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-"/opt/custom/kirocrew" token]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[$(which kirocrew) token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-$(which kirocrew) token]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[docker exec kirocrew kirocrew token --ttl 2h]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-docker exec kirocrew kirocrew token --ttl 2h]
TestCredentialMintSegmentScoping::test_mint_invocation_still_blocked[KIROCREW_HOME=/tmp/h KIROCREW_PORT=6777 kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_mint_invocation_still_blocked-KIROCREW_HOME=/tmp/h KIROCREW_PORT=6777 kirocrew token]
TestCredentialMintSegmentScoping::test_nested_subcommand_mint_still_blocked[kirocrew pod token mywt]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_subcommand_mint_still_blocked-kirocrew pod token mywt]
TestCredentialMintSegmentScoping::test_nested_subcommand_mint_still_blocked[kirocrew pod token mywt --ttl 2h]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_subcommand_mint_still_blocked-kirocrew pod token mywt --ttl 2h]
TestCredentialMintSegmentScoping::test_shell_forms_between_name_and_verb_still_blocked[kirocrew "token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_shell_forms_between_name_and_verb_still_blocked-kirocrew "token"]
TestCredentialMintSegmentScoping::test_shell_forms_between_name_and_verb_still_blocked[kirocrew 'token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_shell_forms_between_name_and_verb_still_blocked-kirocrew 'token']
TestCredentialMintSegmentScoping::test_shell_forms_between_name_and_verb_still_blocked[kirocrew -v --no-jail token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_shell_forms_between_name_and_verb_still_blocked-kirocrew -v --no-jail token]
TestCredentialMintSegmentScoping::test_shell_forms_between_name_and_verb_still_blocked[unset __EMPTY; kirocrew ${__EMPTY:-} token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_shell_forms_between_name_and_verb_still_blocked-unset __EMPTY; kirocrew ${__EMPTY:-} token]
TestCredentialMintSegmentScoping::test_shell_forms_between_name_and_verb_still_blocked[kirocrew $(printf '') token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_shell_forms_between_name_and_verb_still_blocked-kirocrew $(printf '') token]
TestCredentialMintSegmentScoping::test_redirection_between_name_and_verb_still_blocked[kirocrew >/tmp/out token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_redirection_between_name_and_verb_still_blocked-kirocrew >/tmp/out token]
TestCredentialMintSegmentScoping::test_redirection_between_name_and_verb_still_blocked[kirocrew 2>/dev/null token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_redirection_between_name_and_verb_still_blocked-kirocrew 2>/dev/null token]
TestCredentialMintSegmentScoping::test_redirection_between_name_and_verb_still_blocked[kirocrew >/tmp/o token --ttl 1h]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_redirection_between_name_and_verb_still_blocked-kirocrew >/tmp/o token --ttl 1h]
TestCredentialMintSegmentScoping::test_redirection_between_name_and_verb_still_blocked[kirocrew >>/tmp/o token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_redirection_between_name_and_verb_still_blocked-kirocrew >>/tmp/o token]
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[bash -c "kirocrew token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-bash -c "kirocrew token"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[bash -c 'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-bash -c 'kirocrew token']
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[sh -c "kirocrew token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-sh -c "kirocrew token"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[/bin/bash -c "kirocrew token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-/bin/bash -c "kirocrew token"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[bash -lc "kirocrew token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-bash -lc "kirocrew token"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[zsh -c "kirocrew pod token wt"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-zsh -c "kirocrew pod token wt"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[eval "kirocrew token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-eval "kirocrew token"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[bash -c 'bash -c "kirocrew token"']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-bash -c 'bash -c "kirocrew token"']
TestCredentialMintSegmentScoping::test_nested_shell_payload_still_blocked[bash -c "kirocrew >/tmp/o token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_nested_shell_payload_still_blocked-bash -c "kirocrew >/tmp/o token"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_incidental_mention_allowed[bash -c "cd /workplace/alice/kirocrew-wt-x && pytest test/test_token_auth.py"]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_nested_shell_payload_incidental_mention_allowed-bash -c "cd /workplace/alice/kirocrew-wt-x && pytest test/test_token_auth.py"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_incidental_mention_allowed[sh -c "ls /workplace/alice/kirocrew-wt-x"]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_nested_shell_payload_incidental_mention_allowed-sh -c "ls /workplace/alice/kirocrew-wt-x"]
TestCredentialMintSegmentScoping::test_nested_shell_payload_incidental_mention_allowed[bash -c "kirocrew doctor | grep token"]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_nested_shell_payload_incidental_mention_allowed-bash -c "kirocrew doctor | grep token"]
TestCredentialMintSegmentScoping::test_combined_shell_flag_payload_still_blocked[bash -xc 'kirocrew >/tmp/o token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_combined_shell_flag_payload_still_blocked-bash -xc 'kirocrew >/tmp/o token']
TestCredentialMintSegmentScoping::test_combined_shell_flag_payload_still_blocked[bash -ec 'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_combined_shell_flag_payload_still_blocked-bash -ec 'kirocrew token']
TestCredentialMintSegmentScoping::test_combined_shell_flag_payload_still_blocked[sh -xc 'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_combined_shell_flag_payload_still_blocked-sh -xc 'kirocrew token']
TestCredentialMintSegmentScoping::test_combined_shell_flag_payload_still_blocked[bash -icx 'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_combined_shell_flag_payload_still_blocked-bash -icx 'kirocrew token']
TestCredentialMintSegmentScoping::test_combined_shell_flag_payload_still_blocked[bash --command 'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_combined_shell_flag_payload_still_blocked-bash --command 'kirocrew token']
TestCredentialMintSegmentScoping::test_combined_shell_flag_payload_still_blocked[$(which bash) -c 'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_combined_shell_flag_payload_still_blocked-$(which bash) -c 'kirocrew token']
TestCredentialMintSegmentScoping::test_glued_shell_flag_payload_still_blocked[bash -c'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_shell_flag_payload_still_blocked-bash -c'kirocrew token']
TestCredentialMintSegmentScoping::test_glued_shell_flag_payload_still_blocked[bash -c"kirocrew token"]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_shell_flag_payload_still_blocked-bash -c"kirocrew token"]
TestCredentialMintSegmentScoping::test_glued_shell_flag_payload_still_blocked[sh -ec'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_shell_flag_payload_still_blocked-sh -ec'kirocrew token']
TestCredentialMintSegmentScoping::test_glued_shell_flag_payload_still_blocked[bash -lc'kirocrew token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_shell_flag_payload_still_blocked-bash -lc'kirocrew token']
TestCredentialMintSegmentScoping::test_glued_shell_flag_payload_still_blocked[sh -c'kirocrew >/tmp/o token']
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_shell_flag_payload_still_blocked-sh -c'kirocrew >/tmp/o token']
TestCredentialMintSegmentScoping::test_attached_redirect_still_blocked[kirocrew>/tmp/out token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_still_blocked-kirocrew>/tmp/out token]
TestCredentialMintSegmentScoping::test_attached_redirect_still_blocked[kirocrew>>/tmp/out token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_still_blocked-kirocrew>>/tmp/out token]
TestCredentialMintSegmentScoping::test_attached_redirect_still_blocked[kirocrew token>/tmp/out]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_still_blocked-kirocrew token>/tmp/out]
TestCredentialMintSegmentScoping::test_attached_redirect_still_blocked[kirocrew>/tmp/out token --ttl 1h]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_still_blocked-kirocrew>/tmp/out token --ttl 1h]
TestCredentialMintSegmentScoping::test_glued_control_operator_still_blocked[true;kirocrew>/tmp/minted token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_control_operator_still_blocked-true;kirocrew>/tmp/minted token]
TestCredentialMintSegmentScoping::test_glued_control_operator_still_blocked[true;kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_control_operator_still_blocked-true;kirocrew token]
TestCredentialMintSegmentScoping::test_glued_control_operator_still_blocked[echo hi&&kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_control_operator_still_blocked-echo hi&&kirocrew token]
TestCredentialMintSegmentScoping::test_glued_control_operator_still_blocked[echo hi||kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_control_operator_still_blocked-echo hi||kirocrew token]
TestCredentialMintSegmentScoping::test_glued_control_operator_still_blocked[true;/usr/local/bin/kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_control_operator_still_blocked-true;/usr/local/bin/kirocrew token]
TestCredentialMintSegmentScoping::test_glued_control_operator_still_blocked[x|kirocrew token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_glued_control_operator_still_blocked-x|kirocrew token]
TestCredentialMintSegmentScoping::test_glued_control_operator_incidental_mention_allowed[true;ls /workplace/alice/kirocrew-wt-x]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_glued_control_operator_incidental_mention_allowed-true;ls /workplace/alice/kirocrew-wt-x]
TestCredentialMintSegmentScoping::test_glued_control_operator_incidental_mention_allowed[echo hi&&cat /workplace/alice/kirocrew-wt-x/docs/token.md]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_glued_control_operator_incidental_mention_allowed-echo hi&&cat /workplace/alice/kirocrew-wt-x/docs/token.md]
TestCredentialMintSegmentScoping::test_glued_control_operator_incidental_mention_allowed[cd /workplace/alice/kirocrew-wt-x;pytest test/test_token_auth.py]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_glued_control_operator_incidental_mention_allowed-cd /workplace/alice/kirocrew-wt-x;pytest test/test_token_auth.py]
TestCredentialMintSegmentScoping::test_glued_control_operator_incidental_mention_allowed[true;kirocrew doctor | grep token]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_glued_control_operator_incidental_mention_allowed-true;kirocrew doctor | grep token]
TestCredentialMintSegmentScoping::test_literal_parameter_expansion_default_still_blocked[unset X; ${X:-kirocrew}>/tmp/x token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_literal_parameter_expansion_default_still_blocked-unset X; ${X:-kirocrew}>/tmp/x token]
TestCredentialMintSegmentScoping::test_literal_parameter_expansion_default_still_blocked[unset X; ${X:-kirocrew} token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_literal_parameter_expansion_default_still_blocked-unset X; ${X:-kirocrew} token]
TestCredentialMintSegmentScoping::test_literal_parameter_expansion_default_still_blocked[${X:+kirocrew} token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_literal_parameter_expansion_default_still_blocked-${X:+kirocrew} token]
TestCredentialMintSegmentScoping::test_literal_parameter_expansion_default_still_blocked[${X-kirocrew} token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_literal_parameter_expansion_default_still_blocked-${X-kirocrew} token]
TestCredentialMintSegmentScoping::test_attached_redirect_on_substitution_program_still_blocked[$(which kirocrew)>/tmp/out token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_on_substitution_program_still_blocked-$(which kirocrew)>/tmp/out token]
TestCredentialMintSegmentScoping::test_attached_redirect_on_substitution_program_still_blocked[$(which kirocrew)>>/tmp/out token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_on_substitution_program_still_blocked-$(which kirocrew)>>/tmp/out token]
TestCredentialMintSegmentScoping::test_attached_redirect_on_substitution_program_still_blocked[`which kirocrew`>/tmp/out token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_on_substitution_program_still_blocked-`which kirocrew`>/tmp/out token]
TestCredentialMintSegmentScoping::test_attached_redirect_on_substitution_program_still_blocked["$(command -v kirocrew)">/tmp/out token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_attached_redirect_on_substitution_program_still_blocked-"$(command -v kirocrew)">/tmp/out token]
TestCredentialMintSegmentScoping::test_quoted_substitution_body_resolves_to_its_program["$(command -v kirocrew)" token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_quoted_substitution_body_resolves_to_its_program-"$(command -v kirocrew)" token]
TestCredentialMintSegmentScoping::test_quoted_substitution_body_resolves_to_its_program["`command -v kirocrew`" token]
  -> TestCredentialMintSegmentScoping::test_mint_spellings_still_blocked[test_quoted_substitution_body_resolves_to_its_program-"`command -v kirocrew`" token]
TestCredentialMintSegmentScoping::test_substitution_peel_does_not_reach_into_arguments[$(which cat) /workplace/alice/kirocrew-wt-x/docs/token.md]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_substitution_peel_does_not_reach_into_arguments-$(which cat) /workplace/alice/kirocrew-wt-x/docs/token.md]
TestCredentialMintSegmentScoping::test_substitution_peel_does_not_reach_into_arguments[cd /workplace/x/kirocrew-wt-y && "$(command -v pytest)" test/test_token_auth.py]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_substitution_peel_does_not_reach_into_arguments-cd /workplace/x/kirocrew-wt-y && "$(command -v pytest)" test/test_token_auth.py]
TestCredentialMintSegmentScoping::test_substitution_peel_does_not_reach_into_arguments[$(which cat) /workplace/alice/kirocrew-wt-x/out>/tmp/copy]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_substitution_peel_does_not_reach_into_arguments-$(which cat) /workplace/alice/kirocrew-wt-x/out>/tmp/copy]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[cd /workplace/x/kirocrew-wt-y && pytest test/test_token_auth.py]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-cd /workplace/x/kirocrew-wt-y && pytest test/test_token_auth.py]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[cd /workplace/x/kirocrew-wt-y && grep -n mint src/kiro_crew/token_auth.py]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-cd /workplace/x/kirocrew-wt-y && grep -n mint src/kiro_crew/token_auth.py]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[tail -20 /tmp/kirocrew-gw.log | sed 's/token=.*/REDACTED/']
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-tail -20 /tmp/kirocrew-gw.log | sed 's/token=.*/REDACTED/']
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[KIROCREW_HOME=/tmp/h ./bin/kirocrew gateway  # banner prints the auth token]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-KIROCREW_HOME=/tmp/h ./bin/kirocrew gateway  # banner prints the auth token]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[cat /tmp/kirocrew-dev/config.json  # contains a token field]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-cat /tmp/kirocrew-dev/config.json  # contains a token field]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[grep -rn token ~/.kirocrew/skills/]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-grep -rn token ~/.kirocrew/skills/]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[kirocrew doctor 2>&1 | grep token]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-kirocrew doctor 2>&1 | grep token]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[cd ~/.kirocrew && cat token.txt]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-cd ~/.kirocrew && cat token.txt]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[ls /tmp/kirocrew-dev/tokens]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-ls /tmp/kirocrew-dev/tokens]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[kirocrew doctor > /tmp/token.log]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-kirocrew doctor > /tmp/token.log]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[cat /tmp/kirocrew-dev/token_cache.json]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-cat /tmp/kirocrew-dev/token_cache.json]
TestCredentialMintSegmentScoping::test_incidental_mention_allowed[ls ~/.kirocrew/skills/ && cat tokens.md]
  -> TestCredentialMintSegmentScoping::test_mint_mention_outside_the_invocation_allowed[test_incidental_mention_allowed-ls ~/.kirocrew/skills/ && cat tokens.md]
test/test_exfil_carveouts.py (2)
TestExistingCurlDenialsUnchanged::test_plain_curl_file_body_denied
  -> TestExistingCurlDenialsUnchanged::test_curl_file_body_denied[test_plain_curl_file_body_denied]
TestExistingCurlDenialsUnchanged::test_curl_first_word_not_carved_out
  -> TestExistingCurlDenialsUnchanged::test_curl_file_body_denied[test_curl_first_word_not_carved_out]
test/test_governance_list_otlp_hosts.py (4)
TestListKeys::test_each_key_parses_with_its_catalog_matcher[capabilities.telemetry.otlp_hosts]
  -> test/test_governance_list_keys.py::TestListKeys::test_each_key_parses_with_its_catalog_matcher[capabilities.telemetry.otlp_hosts]
TestListKeys::test_the_list_permits_what_it_names_and_denies_the_rest[capabilities.telemetry.otlp_hosts]
  -> test/test_governance_list_keys.py::TestListKeys::test_the_list_permits_what_it_names_and_denies_the_rest[capabilities.telemetry.otlp_hosts]
TestListKeys::test_a_gate_pinned_off_denies_every_item[capabilities.telemetry.otlp_hosts]
  -> test/test_governance_list_keys.py::TestListKeys::test_a_gate_pinned_off_denies_every_item[capabilities.telemetry.otlp_hosts]
TestListKeys::test_no_policy_or_no_list_permits_as_before[capabilities.telemetry.otlp_hosts]
  -> test/test_governance_list_keys.py::TestListKeys::test_no_policy_or_no_list_permits_as_before[capabilities.telemetry.otlp_hosts]
test/test_governance_list_share_sites.py (4)
TestListKeys::test_each_key_parses_with_its_catalog_matcher[capabilities.social_share.sites]
  -> test/test_governance_list_keys.py::TestListKeys::test_each_key_parses_with_its_catalog_matcher[capabilities.social_share.sites]
TestListKeys::test_the_list_permits_what_it_names_and_denies_the_rest[capabilities.social_share.sites]
  -> test/test_governance_list_keys.py::TestListKeys::test_the_list_permits_what_it_names_and_denies_the_rest[capabilities.social_share.sites]
TestListKeys::test_a_gate_pinned_off_denies_every_item[capabilities.social_share.sites]
  -> test/test_governance_list_keys.py::TestListKeys::test_a_gate_pinned_off_denies_every_item[capabilities.social_share.sites]
TestListKeys::test_no_policy_or_no_list_permits_as_before[capabilities.social_share.sites]
  -> test/test_governance_list_keys.py::TestListKeys::test_no_policy_or_no_list_permits_as_before[capabilities.social_share.sites]
test/test_governance_self_protection.py (18)
test_governance_files_are_sensitive[~/.kiro/crew/security_policy.json]
  -> test_trust_root_path_is_sensitive[test_governance_files_are_sensitive-~/.kiro/crew/security_policy.json]
test_governance_files_are_sensitive[~/.kiro/crew/profiles/app-deploy-web.json]
  -> test_trust_root_path_is_sensitive[test_governance_files_are_sensitive-~/.kiro/crew/profiles/app-deploy-web.json]
test_governance_files_are_sensitive[~/.kiro/crew/admission_policy.json]
  -> test_trust_root_path_is_sensitive[test_governance_files_are_sensitive-~/.kiro/crew/admission_policy.json]
test_governance_files_are_sensitive[~/.kirocrew/security_policy.json]
  -> test_trust_root_path_is_sensitive[test_governance_files_are_sensitive-~/.kirocrew/security_policy.json]
test_governance_files_are_sensitive[~/.kirocrew/profiles/app-deploy-web.json]
  -> test_trust_root_path_is_sensitive[test_governance_files_are_sensitive-~/.kirocrew/profiles/app-deploy-web.json]
test_governance_files_are_sensitive[~/.kirocrew/admission_policy.json]
  -> test_trust_root_path_is_sensitive[test_governance_files_are_sensitive-~/.kirocrew/admission_policy.json]
test_validate_file_path_rejects_governance_files[~/.kiro/crew/security_policy.json]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_governance_files-~/.kiro/crew/security_policy.json]
test_validate_file_path_rejects_governance_files[~/.kiro/crew/profiles/app-deploy-web.json]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_governance_files-~/.kiro/crew/profiles/app-deploy-web.json]
test_validate_file_path_rejects_governance_files[~/.kiro/crew/admission_policy.json]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_governance_files-~/.kiro/crew/admission_policy.json]
test_validate_file_path_rejects_governance_files[~/.kirocrew/security_policy.json]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_governance_files-~/.kirocrew/security_policy.json]
test_validate_file_path_rejects_governance_files[~/.kirocrew/profiles/app-deploy-web.json]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_governance_files-~/.kirocrew/profiles/app-deploy-web.json]
test_validate_file_path_rejects_governance_files[~/.kirocrew/admission_policy.json]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_governance_files-~/.kirocrew/admission_policy.json]
test_run_exec_dir_is_sensitive[~/.kirocrew/run]
  -> test_trust_root_path_is_sensitive[test_run_exec_dir_is_sensitive-~/.kirocrew/run]
test_run_exec_dir_is_sensitive[~/.kirocrew/run/gateway-7781.bin]
  -> test_trust_root_path_is_sensitive[test_run_exec_dir_is_sensitive-~/.kirocrew/run/gateway-7781.bin]
test_run_exec_dir_is_sensitive[~/.kirocrew/run/kirocrew_sandbox_abc.py]
  -> test_trust_root_path_is_sensitive[test_run_exec_dir_is_sensitive-~/.kirocrew/run/kirocrew_sandbox_abc.py]
test_validate_file_path_rejects_run_exec_dir[~/.kirocrew/run]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_run_exec_dir-~/.kirocrew/run]
test_validate_file_path_rejects_run_exec_dir[~/.kirocrew/run/gateway-7781.bin]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_run_exec_dir-~/.kirocrew/run/gateway-7781.bin]
test_validate_file_path_rejects_run_exec_dir[~/.kirocrew/run/kirocrew_sandbox_abc.py]
  -> test_validate_file_path_rejects_trust_root_path[test_validate_file_path_rejects_run_exec_dir-~/.kirocrew/run/kirocrew_sandbox_abc.py]
test/test_security_token_params.py (18)
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[[Approve](https://evil.example/?next=({u}))]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-[Approve](https://evil.example/?next=({u}))]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[[Approve](//evil.example/?next=[x]({u}))]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-[Approve](//evil.example/?next=[x]({u}))]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[[Approve](/redirect?next=[x]({u}))]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-[Approve](/redirect?next=[x]({u}))]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[https://evil.example/?next=({u})]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-https://evil.example/?next=({u})]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[https://evil.example/?next=[{u}]]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-https://evil.example/?next=[{u}]]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[https://evil.example/?next=<{u}>]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-https://evil.example/?next=<{u}>]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[https://evil.example/?next="{u}"]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-https://evil.example/?next="{u}"]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[https://evil.example/?next='{u}']
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-https://evil.example/?next='{u}']
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[https://evil.example/?next=`{u}`]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-https://evil.example/?next=`{u}`]
TestTokenParamExemptUrlPrefixes::test_prefix_nested_in_another_url_is_not_exempt[https://evil.example/?next=*{u}*]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_prefix_nested_in_another_url_is_not_exempt-https://evil.example/?next=*{u}*]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[<a href="https://evil.example/?next=\t{u}">Approve</a>]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-<a href="https://evil.example/?next=\t{u}">Approve</a>]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[<a href="https://evil.example/?next=\n{u}">Approve</a>]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-<a href="https://evil.example/?next=\n{u}">Approve</a>]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[<a href="https://evil.example/?next=\r{u}">Approve</a>]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-<a href="https://evil.example/?next=\r{u}">Approve</a>]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[<a href="https://evil.example/?next= {u}">Approve</a>]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-<a href="https://evil.example/?next= {u}">Approve</a>]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[<https://evil.example/?next= {u}>]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-<https://evil.example/?next= {u}>]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[href="//evil.example/?next=\t{u}"]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-href="//evil.example/?next=\t{u}"]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[href="https:\\evil.example/?next=\t{u}"]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-href="https:\\evil.example/?next=\t{u}"]
TestTokenParamExemptUrlPrefixes::test_browser_destination_embedding_is_not_exempt[href="https:evil.example/?next=\t{u}"]
  -> TestTokenParamExemptUrlPrefixes::test_prefix_embedded_in_another_destination_is_not_exempt[test_browser_destination_embedding_is_not_exempt-href="https:evil.example/?next=\t{u}"]

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

UX Review (Opus 5.5) — ⏭️ skipped

Revision b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40 touches no user-facing surface (no changes under website/ or committed screenshots), so the UX review was skipped. Does not block merge.

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

First Principles Review (Opus 5.5) — ⏭️ skipped

Revision b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40 ships no reviewable capability (docs, tests or generated files only), so there is nothing to inventory. Does not block merge.

@github-actions github-actions Bot added the readiness: checking Automated validation is still running label Oct 25, 2026
@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Design Review (Opus 5.5) — ✅ PASS

Design-level review of b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40 — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS does not.

Design-Verdict: PASS

A test-only consolidation with no src change. Every removed test name is either kept as a parametrize origin id or used only in the area's own test files, so nothing outside the area reads it.

[DESIGN-REVIEWED] b1dcbdb

Description read

[DESCRIPTION-READ] 2c2c7e9b29673d360747ed606187dee125d1334bb4da835cc7c61a3bc951d461

That sha256 names everything this verdict read: the PR description, plus the 1 evidence file(s) the workflow collected from it and handed this review. It covers that evidence because the media strip replaces every attachment URL with the same placeholder, so an edit swapping one attachment for another would leave the description's captured text identical while what this review judged changed. Recompute it with .github/scripts/pr-description-capture.sh over the same inputs; if it differs, the description or that evidence changed after this verdict was formed and any finding drawn from either is unproven.

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

GPT 6.1 Review — ✅ no blocking findings

GPT 6.1 completed its review of b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40 and found no blocking issues.

This comment is updated in place on each push.

Review details

No findings.
[GPT-REVIEWED] b1dcbdb

False positive or not applicable? A repository writer can comment:
/ai-review override gpt b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40 false-positive: <reason, 20 to 500 characters>

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Opus 5.5 Review — ✅ no blocking findings

Reviewed b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40 — this comment is updated in place on each push.

Review details

No findings.

[OPUS-REVIEWED] b1dcbdb

Verdict parsed from the review's SHA-scoped output markers for commit b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40.

False positive or not applicable? A repository writer can comment:
/ai-review override fable b1dcbdb0f930ab5f487e2c8c2ef925ad9c6f5b40 false-positive: <reason, 20 to 500 characters>

Phase 12 of the test-suite cleanup, over the sandbox, security, policy,
exfil, denied-commands, rm-floor and governance tests. Merge-only: no
case, assert, platform or skip/xfail is dropped or loosened.

Same-body tests in one class (and one cross-file pair of governance
list-key tests) become one parametrized test whose ids lead with the old
test name. Tests that checked nothing, or only that a mock was called,
now also check the wrapped argv, the cleanup path, the returned alias
set, the retry schedule or the exfil denial reason. Review-round and
ticket narration in comments is cut or rewritten as the reason the rule
exists; threat-model and attack-shape comments are kept.
@iamwhatever

Copy link
Copy Markdown
Contributor Author

Disposition, SAST (Semgrep) kirocrew.test-stdlib-clock-rebound in test/test_sandbox_interpreter_enoent_retry.py: fixed in b1dcbdb. The strengthened retry test had renamed an existing patch.object(sandbox_mod.time, "sleep") to ... as sleep, which the diff scan counts as a new stdlib-clock patch. That line is back to its main spelling, and the backoff schedule is now read from the patched attribute inside the with block. No new time patch; the check is unchanged.

@iamwhatever
iamwhatever force-pushed the test-cleanup/security branch from c9753e8 to b1dcbdb Compare October 25, 2026 19:57

@bolichen97 bolichen97 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at head b1dcbdb. Test-only cleanup of the sandbox, security, exfil and governance test area: twin test bodies folded into parametrize with the old name kept in every id, about 25 weak tests given a real outcome check, and review-history comments rewritten as the reason a rule exists.

What I checked:

  • No src/ change. git diff --stat against main shows 44 files under test/ only, one new file (test/test_governance_list_keys.py).
  • Removed assertions in the denied-commands kill, mint and mentions files: every removed _denied_by(...) is not None / == rule line sits in a deleted twin whose cases moved into a surviving test with the same body, including the same .format(...) and .replace("PKILL", ...) transforms. I spot checked the xargs, herestring, separator-in-substitution, exec-capable-exclusion and interpreter-binding groups.
  • Exfil refusals now assert the reason prefix. The prefix matches every refusal string in the exfil_bash.py security module, so this is a stricter check, not a looser one.
  • The governance list-key tests moved verbatim into test/test_governance_list_keys.py and now run both keys from one place; the call-site tests stay in their own files.
  • The strengthened wrap_argv, seal, retry and boot tests only add assertions; no existing assertion was relaxed and no skip, xfail or platform mark was added in the diff.

Security checklist (no src/ change, so each answer concerns runtime behavior): auth or authz NO, new external input parsing NO, trust boundary NO, sandbox or confinement NO (tests of it change, the code does not), safety override or approval gate NO, secret handling NO.

Looks good to ship. I am leaving this as a comment rather than an approval for two maintainer checks: the PR touches 44 files, above the size where one reviewer approves alone, and several required checks were still running at review time with readiness not yet passed.

Minor, not blocking: in test/test_exfil_carveouts.py the two test_curl_file_body_denied cases run the identical command. Keeping both ids preserves the old names, which is fine; a later pass could drop one.

@iamwhatever

Copy link
Copy Markdown
Contributor Author

Disposition, review note on test/test_exfil_carveouts.py::TestExistingCurlDenialsUnchanged::test_curl_file_body_denied (two cases, identical command): kept on purpose. This phase is merge-only and keeps every old test id, so both test_plain_curl_file_body_denied and test_curl_first_word_not_carved_out stay as param ids. Dropping one, or giving the second its own inert-curl input, is left to a later pass.

@github-actions github-actions Bot added readiness: passed Eligible automated validation passed for the current revision and removed readiness: checking Automated validation is still running labels Oct 25, 2026

This branch has not been deployed

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

Labels

readiness: passed Eligible automated validation passed for the current revision

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants