Skip to content

feat(work-items): route an idea issue to an interview before triage explores it - #11918

Merged
kyle-sexton merged 10 commits into
mainfrom
feat/11869-idea-issue-interview-route
Nov 1, 2026
Merged

kyle-sexton merged 10 commits into
mainfrom
feat/11869-idea-issue-interview-route

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

Closes #11869

Summary

Triage now recognizes an idea issue: a feature request that names something to build but says nothing about what it is for. Such an item skips the redundancy, ledger and cluster checks and steps 2 to 4 (step 2's direction gate still applies). Triage runs the needs-spec label preflight, posts a comment naming /planning:interview as the next step, then in one edit applies needs-spec and removes the raw marker. A lane does not run the interview; an interactive session offers to. A new eval case checks the route and that triage does no exploration.

The tracker's human floor now holds needs-spec, so list-frontier --autonomous drops a parked idea issue the way it drops status: needs-decision and status: needs-info items.

This carries the work of #11893 (merged in unchanged) plus the floor fix its open review thread asked for, which that PR's fix lane could not take: its scope check refused lib/frontier.test.sh.

Not verified

  • The eval does not grade the label edit on .work-items/1.md. The local-markdown adapter has no label listing or label-edit verb, so whether the needs-spec preflight passes there is uncertain. The final-message grader checks the route instead
  • The eval case was not executed against a model (paid run); only its static samples were checked
  • scripts/fixtures/rule-admit/cases.json refuses status: needs-info through the rule-admit script, a separate mechanism from the frontier floor; it was not changed for needs-spec, since the label-path lanes already need the autonomous-eligible label

Fix

  • plugins/work-items/skills/triage/SKILL.md: adds the 'Idea issue' route to step 1, ahead of the checks: definition, no exploration, preflight, then comment, then needs-spec plus raw-marker removal, the signal-marker exception, and offering the interview interactively but never running it in a lane. ## Next trimmed to four bullets
  • plugins/work-items/skills/triage/context/apply-outcome.md: adds needs-spec to the raw-marker clearing invariant and to the labels the preflight covers
  • plugins/work-items/reference/label-taxonomy.md: lists needs-spec on the Meta axis
  • plugins/work-items/evals/tr-idea-issue-routes-to-interview/: new eval case, scaffold and pass/fail samples for each deterministic grader
  • plugins/work-items/tools/work-item-tracker/lib/labels.sh: needs-spec added to WIT_HUMAN_FLOOR_STATUS_LABELS, with a comment that it is a bare Meta label, not a status: value
  • plugins/work-items/tools/work-item-tracker/lib/frontier.test.sh: the STATUS fixture gains a bare needs-spec item; the autonomous frontier drops it and the default frontier keeps it
  • plugins/work-items/tools/work-item-tracker/CONTRACT.md: the floor sentence names needs-spec
  • .changes/work-items/work-resolve-issue-issue-11869-5d2c9a17.md: minor changelog fragment, extended with the floor change

Verification

  • bash plugins/work-items/tools/work-item-tracker/lib/frontier.test.sh: 25 of 25 pass. With the labels.sh change stashed, case 20 fails (expected github:o/r#1 got github:o/r#1,github:o/r#11), so the test covers the fix
  • python3 plugins/evals/skills/validate/scripts/validate-cases.py plugins/work-items/evals: exit 0, warnings only (none new beyond the allowed_tools grant notes every Bash/Edit/Write case carries)
  • bash plugins/skill-quality/scripts/check-skill.sh plugins/work-items/skills: 10 passed, 0 failed; triage SKILL.md is 499/500 lines
  • scripts/check-changelog-fragments.sh --check: all 75 fragments valid
  • pre-push check-affected: passed
  • Original lane run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41281674150

Related

🤖 Generated with Claude Code

melodic-automation-lanes Bot and others added 4 commits November 1, 2026 07:12
Lane-Activity: work-resolve-issue/resolve-issue
Lane-Activity: pr-unblock/address-feedback
Lane-Thread: PRRT_kwDOTCGFQM6yYIKA
Lane-Thread: PRRT_kwDOTCGFQM6yYIKF
Add needs-spec to the tracker's human floor (lib/labels.sh) so
list-frontier --autonomous drops a parked idea issue the way it drops
status: needs-decision and status: needs-info items. The frontier test's
STATUS fixture gains a needs-spec item, and CONTRACT.md's floor sentence
names the label.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review November 1, 2026 09:54
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-01T09:55:46.725345Z c1085fb Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c1085fb6ab

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed a7a8476d9008996eec4d90cbec6e773d2e4dc0c4: read 1 of 1 changed file(s); 0 finding(s), 0 as inline comments.

Security review (incremental, since fd819b9)

This review covers one file: plugins/work-items/evals/tr-idea-issue-routes-to-interview/case.yaml. The change since the last review edits only a YAML comment in an eval case. The comment now says that | and || stay inside one segment of the no-bash-search grader, so a search after store-read || is exempt. No grader field changed: name, type, tool, min, max and arm are the same as before.

The file is not on a trusted path, and it is not a plugin manifest or a standing instruction surface. It only documents how an eval grader behaves. Nothing in it reaches a credentialed lane, token scope, merge hold or manifest. It does not change the trusted-actor list, the kill switch or the token broker.

The skip gate applies (item 2): the change has no surface a security review needs to examine.

No security issues found.

critical-findings: 0

@github-actions github-actions Bot 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.

claude-review: 1 inline finding(s) on c1085fb6ab780553a28868ec4c10c44bdafcaa60; the summary is in this lane's pull request comment.

claude-lane: claude-review

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed a7a8476d9008996eec4d90cbec6e773d2e4dc0c4: read 1 of 1 changed file(s); 0 finding(s), 0 as inline comments.

Incremental review (fd819b9 → a7a8476): no findings.

The only change since the last review is the scope comment above the no-bash-search grader in plugins/work-items/evals/tr-idea-issue-routes-to-interview/case.yaml. The grader's pattern is unchanged.

I checked the new comment against the input_match regex on case.yaml#L50. It describes the regex correctly:

  • Where a segment starts: after "command":", ;, (, a lone & ((?<!>)&(?!>)), or a literal \n. Each & in && matches that lone-& rule, so && splits a command. The & in 2>&1, >&2 or &> does not, because the lookarounds exclude an & next to >.
  • What a segment can contain: [^;&\\], the redirect & forms, and \\[^n]. None of these excludes |, so | and || stay inside a segment. The old comment listed || as a separator, which was wrong. The new wording fixes that.
  • The exemption: the negative lookahead scans the whole segment for a store path. A search placed after store-read || is therefore exempt, as the comment now says.

The fix is a comment only, so no test could fail if it were wrong. Nothing in this change bears on the closing issue's (#11869) acceptance criteria. The PR context contains no embedded instructions aimed at the lane.

kyle-sexton and others added 2 commits November 1, 2026 06:15
…ea issue's labels

Nothing removed needs-spec once an idea issue's interview was done, and
the "already triaged, stop" rule refused a re-run on an item without the
raw marker, so a specified item stayed off the autonomous frontier for
good. Triage step 1, the side-exit line and the state diagram now return
the item to raw once an interview records its intent: one label edit
removes needs-spec and restores the raw marker, then triage runs from
step 1.

A signal-marked idea issue's labels are now named in place of a pointer
whose paragraph also applies the human-gated role label: it gets
provenance: signal and work-class: untrusted-provenance (provenance:
signal alone in a lane barred from recording a class), and never the
human-gated role label.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeBVgcHpe4YpFuL5b24Ft2

@github-actions github-actions Bot 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.

claude-review: 1 inline finding(s) on 4dd9df298fba21b06d810fb98969519f9987f097; the summary is in this lane's pull request comment.

claude-lane: claude-review

…nd item-store reads

The no-bash-search grader in tr-idea-issue-routes-to-interview failed a
run that grepped the plugin's own references, listed the item store, or
filtered the tracker seam's output, while no-grep and no-glob pass the
same reads. It now carries the same exemption (.work, /work-items/, and
the work-item-tracker.sh seam), and each of those three commands is a
pass sample. The six fail samples still fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@github-actions github-actions Bot 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.

claude-review: 1 inline finding(s) on 61d993e17b0080cab29ab1c77f1825c7c3f613ac; the summary is in this lane's pull request comment.

claude-lane: claude-review

…d in the idea-issue grader

The no-bash-search exemption applied to the whole Bash input, so a
command that also named the item store, the plugin cache or the seam
hid a code search chained after it (cat .work-items/1.md && grep -rn
plugin src), and the bare .work prefix exempted .workspace. The grader
now checks each command segment split on ;, &, ( and newlines, exempts
a segment only when it names .work-items (not as an --exclude-dir=
value), /work-items/ or work-item-tracker.sh, and keeps a pipe inside
its segment so a filtered seam read still passes. Four fail samples
pin the boundary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@github-actions github-actions Bot 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.

claude-review: 1 inline finding(s) on a57cfbb60a88994b3847ac3c0d0584c67d1c9559; the summary is in this lane's pull request comment.

claude-lane: claude-review

…gment

The segment split treated the & of 2>&1, >&2 and &>/dev/null as a
command separator, so a seam read piped through 2>&1 | grep failed the
grader. A lone & still splits; an & next to > stays in the segment.
Add pass samples for the three redirect forms and fail samples for a
redirected source listing and a grep after a redirected seam read, and
state the grader's scope above it: heredoc bodies and quoting are not
parsed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@github-actions github-actions Bot 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.

claude-review: 1 inline finding(s) on fd819b9c46bf3a6995cc322e1cd648c048860234; the summary is in this lane's pull request comment.

claude-lane: claude-review

…gment

The scope comment listed || as a separator; the pattern has no || starter
and its segment class admits |, so a search after `store-read ||` is
exempt. Correct the comment; the pattern is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 1, 2026
Merged via the queue into main with commit 6dfd4d9 Nov 1, 2026
43 checks passed
@kyle-sexton
kyle-sexton deleted the feat/11869-idea-issue-interview-route branch November 1, 2026 11:56
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.

feat(work-items): an idea issue gets an interview before exploration

1 participant