Skip to content

fix(writing): be-concise no longer declines out-of-scope reshapes, and its semantic-diff threshold is too vague to fire #12846

Closed

Description

@kyle-sexton

Refs: #8635

Summary

Three be-concise cases converted from skills/be-concise/evals/evals.json in #8635 fail on every run (Sonnet agent, Opus judge, 3 runs, with-arm, run-validity VALID):

Case Scores Failing graders
be-concise-declines-agent-facing-prose-routes-to-write-for-agents 0.29, 0.43, 0.57 expectation-1..4, names-write-for-agents
be-concise-wall-of-text-routes-to-adhd-clarify 0.375 x3 expectation-1..4, names-adhd-clarify
be-concise-long-tracker-comment-to-bluf 0.78 x3 expectation-5, semantic-diff-dispatched

The legacy suite was never run against the current body. #8459 states that skills/be-concise/evals/evals.json "is unchanged and was not run".

Defect 1: the body routes but no longer declines

#8459 (58b75f3) reworded two Boundary entries:

  • **Does not reshape agent-facing instruction prose.** ... is docs-hygiene:write-for-agents when the docs-hygiene plugin is installed. became **Agent-facing instruction prose** (...): docs-hygiene:write-for-agents when the docs-hygiene plugin is installed.
  • **Does not restructure a dense message without shortening it.** ... is adhd:clarify when the adhd plugin is enabled. became **Restructuring a dense message without shortening it** (...): adhd:clarify when the adhd plugin is enabled.

In the old wording the decline was unconditional and only the route was gated on the plugin. The new wording only routes. With the target plugin absent, nothing in the body tells the model to decline. In all 6 runs the model reshaped the text instead:

  • Agent-facing excerpt: "I made the bullets and the opening summary line because you asked for them." Another run: "I followed your request for both anyway."
  • Wall-of-text memo: every run produced a bulleted rewrite with word counts ("before about 450, after about 270").

The link to #8459 is UNVERIFIED: no run exists on the pre-#8459 body.

Fix: restore the unconditional "Does not ..." form for both entries in plugins/writing/skills/be-concise/SKILL.md (Boundary section), keeping the presence-gated route as the second sentence. Also align the docs-hygiene gates to "enabled", which #5985 standardized on; the body still says "installed".

Defect 2: "longer than a few paragraphs" does not fire on a five-paragraph, 422-word comment

SKILL.md "Guard the meaning" dispatches the semantic-diff subagent "for anything longer than a few paragraphs". The tracker fixture has 5 body paragraphs and 422 words. 0 of 3 runs dispatched. One run said: "I didn't run the subagent check because the text is short."

Fix: give the guard a threshold a model can check. For example, more than three paragraphs or more than about 250 words. Pick the number with an eval run, not by judgment alone.

Eval-side notes (not skill defects)

  • The plugin eval loads only writing, and claude plugin eval --help has no flag to load a second plugin. So adhd:clarify and docs-hygiene:write-for-agents are never present in the run. The graders that require naming those routes (names-write-for-agents, names-adhd-clarify, and adhd expectation-1 and expectation-2) test a branch the sandbox cannot load. Once Defect 1 is fixed, the body should still name the route with its gate. Re-run to see whether those graders pass with the plugin absent.
  • The run's init line names the subagent tool Task, while semantic-diff-dispatched matches tool: 'Agent'. No trace under the run directory contains a subagent call, so whether tool_used: Agent matches a Task call is UNVERIFIED. Check it once Defect 2 is fixed and a dispatch happens. The short-comment case's no-subagent grader has the same question.
  • evals/fixtures/wall-of-text-migration-decisions.md sets a 2026-10-02 deadline. That date is now past, and every run led with a date warning. Move it to a date far in the future, or use a relative date.

Acceptance

  • After the body fix, the three cases score 1.0 on the with-arm, apart from any grader the absent plugin makes unreachable, and the other be-concise cases do not regress.

🤖 Generated with Claude Code

Activity

  1. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

    The triage sweep dispatched intake triage for this issue (dispatch 2; 2 runs that reach intake, or 6 dispatches, hand it to a maintainer).

  2. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Low
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: in be-concise's SKILL.md, the two Boundary entries now only route and no longer decline. Restore the unconditional "Does not ..." wording and change the docs-hygiene gates from "installed" to "enabled". The "longer than a few paragraphs" semantic-diff guard also needs a threshold a model can check, and the fixture's past deadline date needs moving. The refinement comment's acceptance criteria cover this scope. The exact threshold number is an implementation choice, to be picked with an eval run. No duplicates found among open issues.

    Automated triage, applied by the lanes App.

  3. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 3, 2026
  4. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: no trusted-human acceptance criteria: a listed human must put the confirmed - [ ] criteria in the body or post them as their own comment, or, on an issue a listed human filed, intake's newest refinement comment must hold them unedited. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).

  5. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 3, 2026
  6. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    and removed
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    on Nov 3, 2026
  7. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.

    Intended outcome: Restore unconditional decline wording for the two Boundary entries, align docs-hygiene gates to "enabled", and replace "a few paragraphs" with a numeric threshold in plugins/writing/skills/be-concise/SKILL.md, plus move the fixture deadline date.

    Acceptance criteria

    • plugins/writing/skills/be-concise/SKILL.md Boundary entry for agent-facing instruction prose begins with 'Does not reshape agent-facing instruction prose' and its second sentence routes to docs-hygiene:write-for-agents when the docs-hygiene plugin is enabled
    • plugins/writing/skills/be-concise/SKILL.md Boundary entry for dense-message restructuring begins with 'Does not restructure a dense message without shortening it' and its second sentence routes to adhd:clarify when the adhd plugin is enabled
    • No line in plugins/writing/skills/be-concise/SKILL.md says the docs-hygiene plugin is 'installed'; all three docs-hygiene gates (compress, write-for-agents, write-for-humans) say 'enabled'
    • The 'Guard the meaning' section of SKILL.md replaces 'longer than a few paragraphs' with a checkable threshold, e.g. more than three paragraphs or about 250 words, so the 5-paragraph 422-word tracker fixture exceeds it and the short standup fixture does not
    • The short-comment sentence in 'Guard the meaning' stays consistent with the new threshold
    • plugins/writing/skills/be-concise/evals/fixtures/wall-of-text-migration-decisions.md no longer contains the 2026-10-02 deadline; it uses a far-future or relative date, and any evals.json grader that references the old date is updated
    • No other Boundary entries or be-concise eval cases are changed beyond what the above requires
    • If the plugin eval can be run, the three named cases score 1.0 on the with-arm apart from graders needing the absent adhd or docs-hygiene plugin, and the other be-concise cases do not regress; otherwise the PR states the eval was not run

    External state: none

    Dependencies

    • None blocking. Related to #​8635 (eval conversion) and #​8459 (body reword that likely caused Defect 1).

    Related work

    Sources read

    • plugins/writing/skills/be-concise/SKILL.md:82: 'For anything longer than a few paragraphs' is the vague semantic-diff threshold
    • plugins/writing/skills/be-concise/SKILL.md:109-110: docs-hygiene:compress gate says 'installed'
    • plugins/writing/skills/be-concise/SKILL.md:111-113: restructuring entry only routes to adhd:clarify, no 'Does not' decline
    • plugins/writing/skills/be-concise/SKILL.md:114-116: agent-facing prose entry only routes, gate says 'installed'
    • plugins/writing/skills/be-concise/SKILL.md:117-119: write-for-humans gate says 'installed'
    • plugins/writing/skills/be-concise/evals/: evals.json and fixtures exist, including wall-of-text-migration-decisions.md and tracker-comment-checkout-rollout.md

    Automated refinement by the lanes App. Intake triages the issue again with it.

  8. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 3, 2026
  9. added
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    on Nov 3, 2026
  10. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor
    No description provided.
  11. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor
    No description provided.
  12. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    Work status

    agent-ready

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions