Skip to content

Unattended triage of existing needs-triage issues - #1917

Merged
JacobStephens2 merged 13 commits into
mainfrom
issue-1695
Nov 10, 2026
Merged

JacobStephens2 merged 13 commits into
mainfrom
issue-1695

Conversation

@JacobStephens2

@JacobStephens2 JacobStephens2 commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

Summary

Closes #1695

triage <Issue>                 → reserve + Claim → investigate → update issue in place
triage --file Report / stdin  → investigate → file or comment on matching issues
triage with terminal/EOF      → Command limit → Sweep → Failure limit → select → reserve + recheck → triage

Existing-issue sessions receive trusted issue text and bounded local image downloads. Publication preserves category labels, holds readiness at ready-for-human unless permitted, and cleans up Claims and reservations on success, failure, interruption and Stop. Passes use the configured issue order and retain normal Activity log, notification and Command-record behavior.

Whole-Spec review fixes route category/state changes through labels::Edit, honor base <branch> for both Report forms, and keep private Security-finding investigation, questionnaires and failure diagnostics out of email. Failure documentation names explicit acknowledgement actions. The coordinated global Claim/takeover change remains in #1902 under #1891's explicit interim permission.

Tested seams

  • CLI input and selected Base branch, observed through fake Harness worktree files and stdout JSON.
  • Issue publication, labels, Claim/reservation lifetime and Pass admission, observed through the existing fake GitHub, origin refs, Command records and Activity log.
  • Run notifications, observed through saved notification text and the existing Resend stand-in.
  • Static website rendering in Chromium at 1440×900 and 390×844.

Evidence

Execution evidence

  • Report Base branch — before: cargo test --test triage_spec_regressions report_modes_honor_the_requested_base_branch -- --exact failed: stdin: thirdshift: triage base <branch> requires an issue or a Pass (Some(1) instead of Some(0)). After: the same command passed, exercising both stdin and --file against a marker present only on the selected origin branch.

  • Private finding notification — before: cargo test --test triage_spec_regressions private_security_finding_triage_does_not_email_its_write_up -- --exact failed: issue: leaked PRIVATE_TRIAGE_FINDING_WRITE_UP_1695; investigation and questionnaire text appeared in the captured Resend notification. After: the same command passed for explicit issue and Pass modes, while full JSON evidence remains on stdout.

  • Private failure notification — before: cargo test --test triage_spec_regressions failed_private_finding_triage_keeps_diagnostics_out_of_email -- --exact failed: notification Cause: included invalid type: string "PRIVATE_FAILED_TRIAGE_EVIDENCE_1695". After: the same command passed for malformed recommendations and Harness failures in both modes; saved and sent notifications retain the recorded title/link and omit private evidence.

  • cargo test --test triage_issue --test triage_pass --test triage_run: 46 passed before review fixes. Existing issue-publication tests also passed after the shared label-edit refactor.

  • cargo test --test triage_spec_regressions: 3 passed after all fixes, plus the intentionally ignored fixture entry point.

  • npm run docs:check --prefix site: passed after manual regeneration.

  • cargo test --locked --test pickup_model -- --nocapture: 4 passed, 1 intentionally ignored. Claimed-dispatch safety passed; the known literal pre-Claim dispatch counterexample remains recorded. Both model mutations failed with their expected counterexamples.

  • scripts/affected-tests main: passed. Site browser tests passed; the full Rust suite passed all 3,954 tests across 98 binaries (94 intentionally skipped), including prompt/manual and the new CLI regressions.

  • Repair validation on b249479f: scripts/affected-tests main passed: all 67 site tests and all 3,995 Rust tests across 100 binaries (97 existing skips). The selected cargo nextest run took 2,792.56 seconds including compilation; test execution took 2,578.466 seconds. The x86_64 musl artifact downloaded from failed Release run 42760089373 passed static-link and thirdshift 0.24.3 version assertions on Linux. WSL itself is unavailable on this host. No source or workflow files changed, and no CI jobs were re-run.

Visual evidence

Expanded Triage workflow, desktop 1440×900:

Before

After

Expanded Triage workflow, mobile 390×844:

Before

After

Unaddressed findings

Standards

None. The one finding was addressed and the Standards reviewer confirmed the fix.

Spec

None. All three findings were addressed and the Spec reviewer confirmed the fixes.

Security

None.

Security review outcome

No unaddressed introduced findings.

Review coverage

Both independent reviewers read all 33 original changed paths and all review fixes, covering all 38 changed files. Changed files left unread: none, on either axis. Generated-output exclusions: none; generated prompts and manual output were inspected directly. Final reports and combined files-read lists are retained as standards.md and spec.md in the session's .thirdshift-review-WLjKX3/, with summary.json recording {"standards":1,"spec":3}. Counts include findings fixed during this review.

CI notes

  • custom-release-smoke / wsl: job log shows the unchanged 10-minute job timing out in Vampire/setup-wsl@v7 during Ubuntu apt-get update, before artifact download or thirdshift execution; git diff main...HEAD -- .github/workflows/release-smoke.yml .github/workflows/release.yml dist-workspace.toml is empty, so this provisioning failure is unrelated to the branch.

Merge Danger

Door: two-way

Blast Radius: triage

Changes existing-issue labels, comments and closure, downloads trusted issue images, and shares failure accounting with Pickup. GitHub publication can be partial when a request fails; completed writes are retained and reported.

Built with codex codex-cli 0.164.0 · gpt-6.1-sol · xhigh

Tickets

Support targeted in-place issue triage
Run unattended Triage Passes from terminal or EOF input
Keep image preparation in the shared Triage investigation path and retain both image-cache and unattended-Pass navigation entries.

Validation: scripts/affected-tests main passed (3,951 Rust tests; 67 site checks). The Rust step took 2,958.41 seconds including compilation. Pickup model regressions, strict Clippy and formatting also passed.
Pre-download trusted issue images for triage
@JacobStephens2
JacobStephens2 marked this pull request as ready for review November 10, 2026 03:59
Preserve main's Claim, Failure limit and Sweep decisions alongside #1695's Triage lifecycle, recommendation-only behavior and explicit failure acknowledgement.
@JacobStephens2
JacobStephens2 merged commit 2a343ad into main Nov 10, 2026
27 of 28 checks passed
@JacobStephens2
JacobStephens2 deleted the issue-1695 branch November 10, 2026 06:23
@JacobStephens2 JacobStephens2 mentioned this pull request Nov 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.

Unattended triage of existing needs-triage issues

1 participant