Skip to content

Surface reasons for deliberate incomplete Security reviews - #612

Merged
JacobStephens2 merged 7 commits into
mainfrom
issue-607
Oct 10, 2026
Merged

JacobStephens2 merged 7 commits into
mainfrom
issue-607

Conversation

@JacobStephens2

@JacobStephens2 JacobStephens2 commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Summary

 Security review terminal line
   complete → validated JSON counts
+  incomplete → nonempty, single-line public reason, capped at 500 characters
   malformed → existing generic incomplete outcome

Deliberate incompletes carry the session's reason into the Run's Cause, the PR's Security review outcome and the Hold. Private reports are still validated in full and recorded privately before an incomplete reason is published. Safeguard refusals keep their existing wording. Both generated prompt outputs reflect the new contract.

Closes #607

Test seams

  • Run CLI with fake Harness and GitHub adapters: final messages, private reports, Run output, PR outcome/readiness and Self-merge holds.
  • Generated prompts page: Security review terminal contract matches the prompt module.

Evidence

  • Before: cargo test --test security_review explicit_incomplete_review_surfaces_its_reason_and_records_old_findings_privately -- --exact, run with main's src/security/review.rs, failed because the Run returned the generic incomplete message instead of the session's reason.
    After: the same command passed on this branch, including private recording without disclosure. All 22 Security review integration tests passed, covering Unicode-safe capping, malformed terminal lines, private-report validation, complete reviews and safeguard refusals.
  • cargo check, cargo fmt --check, cargo clippy --all-targets -- -D warnings and git diff --check passed.
  • UPDATE_PROMPTS=1 cargo test --bin thirdshift prompts_page passed all 10 tests and reproduced the committed generated files without changes.
  • Full-suite coverage: 1665 passed and 1 ignored across cargo test and the continuation below. The full command stopped at site_deploy::the_systemd_units_verify because systemd loaded an unrelated host unit with an invalid RequiredBy key in /etc/systemd/system/career-dashboard-secrets.service. The exact test reproduced that host failure. SYSTEMD_UNIT_PATH=/usr/lib/systemd/system cargo test --test site_deploy --test spec_run --test toolchain --test update --test user_config then passed, validating the site units and every suite that had not yet run. No host configuration or repository code was changed for this environment issue.

Validation used the pinned Rust 1.99 toolchain installed separately for this session because the shared installation was missing rustc.

Unaddressed findings

Standards

None. The Standards reviewer reported zero findings.

Spec

None. The Spec reviewer reported zero findings against #607 and its Agent Brief.

Changed files left unread: none under either axis. Both reviewers read all five changed files. Final reports and each axis's files-read list are saved in .thirdshift-review-YAKH7C/standards.md and .thirdshift-review-YAKH7C/spec.md in the review worktree. Review fixed point: main at d251d5e0063c338df9e5bcd0c29f83d709d3663b.

Merge Danger

Door: two-way

Blast Radius: review

Changes Security review parsing and prompt text. Incomplete Security reviews continue to hold Self-merge; the Security audit protocol is unchanged.

Built with codex · gpt-6.1-sol · high

2026-10-10T03:20:54Z, host thirdshift. Uncommitted work at the time of failure is included in this commit.
@JacobStephens2
JacobStephens2 merged commit 4d23c89 into main Oct 10, 2026
17 checks passed
@JacobStephens2
JacobStephens2 deleted the issue-607 branch October 10, 2026 09:29
@JacobStephens2 JacobStephens2 mentioned this pull request Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Security review: surface the session's reason when it deliberately ends incomplete

1 participant