Repository navigation
Stage proposed public issue text for validation before creation - #632
Merged
Merged
Conversation
The security-fix publishing session now stages its proposed public issue text (title + body) in its final message instead of creating the public issue directly with gh issue create. thirdshift creates the needs-triage top issue from the staged text via GitHub::create_issue_in, then runs the existing checks (open, fresh, needs-triage-only, write-up leakage) before marking it ready and dispatching the fix Run. Single public fixes take the staged path; spec and private-reuse flows keep the session-created path until staged specs land. The legacy 'Security fix Ticket: <URL>' final line stays as fallback. Closes #627
This was referenced Oct 10, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
#627, first slice of the #626 security-fix publishing rework: the publishing session stages its proposed public issue text instead of creating the public issue directly, and thirdshift creates the
needs-triagetop issue from the staged text.Spec and private-reuse flows keep the session-created path until staged specs land; the legacy
Security fix Ticket: <URL>final line stays as fallback.Seams under test: the security-fix publishing prompt (
prompt::security_fixtext); the security-fix publishing seam (security::fixing::publishstaged branch plusGitHub::create_issue_in); the prompt catalog (prompts_pagegeneratedprompts/+site/prompts/index.html).Evidence
gh issue createitself; no staged-text path existed (parse_staged_proposaldid not compile — red:error[E0425]: cannot find function parse_staged_proposal).After:
cargo test --test security_run a_staged_proposal_is_created_by_thirdshift_not_the_sessionpasses — the fake session never runsgh issue create, thirdshift creates issue 8 from the staged title/body, labels landsecurity-fix+in-progress, and the fix Run dispatches to PR.../pull/1.cargo testgreen across all 44 test binaries (incl. 930 unit + 88security_run),cargo fmt --checkclean,cargo clippy --all-targets -- -D warningsclean.issue-626(reports in.thirdshift-review-pGFnDC/standards.md,spec.md); both axes read all six changed files, none unread.Merge Danger
Door: two-way — revert the two commits; no data migration, no destructive action.
Blast Radius: security-fix publishing — only the single-public-fix path changes behaviour; legacy session-created path and spec/private flows untouched and still covered by the existing 88
security_runtests.Unaddressed findings
Standards
src/security/fixing.rslegacyNonearm growth (reviewer: extract if a third path ever joins; fine today). Deferred extraction point, no behaviour involved; refuted by the reviewer's own "today it is fine" plus single-reason scope (fixingchanges for one reason only).create_issuedoc (now one line) andSTAGED_*marker normalisation (both bare, trim at parse; rendered prompt byte-identical perprompts_pagegolden test).Spec
src/security/fixing.rs:85creates beforecheck_issue_text): rejected staged text still creates a public issue — verified by running the reviewer'sa_rejected_staged_proposal_creates_no_public_issueas written, which FAILED withrejected staged text must not create a public issue: Object {"8": String("Private candidate write-up. Private record: ...GHSA-finding-0")}. Declined: pre-creation gating is the exact scope of open sibling #628 ("Validate the staged public issue text before any public creation"), so no new triage issue filed.src/security/fixing.rslegacyNonearm acceptsSecurity fix Ticket: <URL>): a session-created ticket is still accepted — verified by running the reviewer'sa_session_created_public_ticket_is_refusedas written, which FAILED withleft: Some(0), right: Some(1)(run succeeded). Declined: enforcement is the exact scope of open sibling #629 ("Remove independent public-issue creation from the publishing session"), so no new triage issue filed.No changed file was left unread by the review (both axes report none unread).
Closes #627
Built with muse · default model · default effort