Repository navigation
test(security): pin the rm floor force requirement - #21900
devansh1401 wants to merge 1 commit into
Conversation
UX Review (Opus 5.5, fork) — ⏭️ skippedRevision |
First Principles Review (Opus 5.5, fork) — 🟡 CONCERNSPremise-level review of First-Principles-Verdict: CONCERNS The added spec paragraph says again what the sentence just above it already says, and it names test cases that will drift out of date. The test and comment fixes are justified. Not justified as shipped
What this change shipsInventory (3 items) — 2 justifiedIntent: make sure a regression that drops the force-flag check in the rm floor turns a test red (FIX, test coverage only; closes #21759).
[FIRST-PRINCIPLES-REVIEWED] 5309983 Description read[DESCRIPTION-READ] 7b55d4a9baa729b7cc86a111667dbf481ce5ae861f50ebfb40f3966eb700d769 That sha256 names the PR description this verdict read. Recompute it with |
Design Review (Opus 5.5, fork) — ✅ PASSDesign-level review of Design-Verdict: PASS Nothing to check. [DESIGN-REVIEWED] 5309983 Description read[DESCRIPTION-READ] 60525be6b5aa049199741dbfc438269f9bd8c8bb2dcdc119c894da702eba3736 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 |
Opus 5.5 Review (fork) — ✅ no blocking findingsReviewed |
GPT 6.1 Review (fork) — ✅ no blocking findingsReviewed Review detailsNo findings. |
Security Scope Review (fork) — ✅ PASSWhich legitimate operations does adjudicated, zero confirmed regressions Scope-Verdict: PASS TIGHTENING: none -- the patch changes no matcher. The only code hunk edits a comment in ADJUDICATED: 14 candidates, 0 confirmed newly-refused PLATFORM COVERAGE: The diff adds no new path, separator, interpreter or executable assumption. The recursive-force [SCOPE-REVIEWED] 5309983Security scope review -- adjudicated candidates
No candidate flipped from allowed to refused. |
|
@chenmingwei23 could you take a look at this one when you get a chance? |
|
@bolichen97 could you take a look when you get a chance? this needs a maintainer branch for the sensitive-path check. happy to update the patch for the moved files. |
Problem / Motivation
Goal: pin the force-flag requirement in the recursive-force rm floor.
the existing allow cases miss recursive-only commands against root and home, so dropping the force check leaves them green. the error comment also mentions a depth cap that does not exist.
Why it matters
a missing force check would over-refuse commands that the floor intentionally allows.
Not a goal
What changed (motivation → approach → change)
added
rm -r /andrm -r ~to the allow cases intest/test_denied_commands_security.py, removed the stale depth-cap phrase insrc/kiro_crew/security/__init__.py, and documented the flag coverage indocs/system-specs/modules/security.md.Backwards compatibility
no runtime or public api changes.
Tests
full gate run used base
93e27870. after rebasing the identical patch onto4560da2f, the full changed test file passed again (1,372 passed, 1 skipped) and local gpt review found no issues.and forceleaves the original 43 cases green; exactly the two new cases fail.93e27870: the sage task-isolation failure tracked in Flaky: test_the_post_path_never_sends_a_dismissed_finding inherits mock tasks #20857, andTestEndToEndMacOS::test_round_tripfailing to build the apple speech helper. the remaining selected backend tests were not run.Manual verification
the mutation ran in memory through a temporary pytest plugin. no shell payload was executed, and production source was not modified for the proof.
Screenshots / video
n/a — test and comment changes only.
Related Issues
Closes #21759
follow-up to #18415. checked open prs, including #21650 and #21858; neither implements this fix.
Checklist
Contribution License Agreement
submitted under the project’s apache-2.0 license.