docs(work-items): de-slop instruction surfaces (0.39.13) - #3107
Conversation
Rewrite README and every SKILL.md under /ai-slop:audit fix semantics for the #2891 campaign. Em dashes become periods or commas, or the sentence is restructured. Generated options block is ignore-fenced. The quoted trigger 'the spec changed — redo the tickets' is kept so auto-invocation does not regress. Cheatsheet refreshed for the rewritten ship summary. Refs #2891 Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
|
Claude finished @kyle-sexton's task in 56s —— View job Security review
Result: skipped — no security-relevant surface. This PR (
No findings to report under |
|
Last security-reviewed head: |
Refs #2891 Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
|
Claude finished @cursor[bot]'s task in 3m 37s —— View job Code review complete
This PR is a mechanical em-dash-removal pass over 3 inline findings posted, all leftover artifacts of the mechanical em-dash → period/comma conversion that a careful pass should catch before merge:
Everything else in the diff is the intended mechanical substitution (em dash → period/comma/restructure) with meaning and code fences untouched; the one deliberately preserved em dash ( |
| The human-gated label (default `needs-human`) is what keeps a slice out of autonomous pickup. `list-frontier --autonomous` excludes it (`${CLAUDE_PLUGIN_ROOT}/tools/work-item-tracker/CONTRACT.md` "Verbs (core public surface)"). Merely omitting the autonomous-eligible label does NOT: the frontier filter keys on the human-gated label, not on the absence of the other, so an unlabeled HITL slice would still be claimable by `/work-items:work`. The autonomous-eligible label (default `agent-ready`) is the positive autonomous-pickup eligibility marker; the two labels gate different filters and an HITL slice wants the human-gated label set AND the autonomous-eligible one omitted. | ||
|
|
||
| **Investigation tickets — decisions, not deliverables.** When the source still carries unresolved unknowns (open design questions, unvalidated approaches, fuzzy scope), emit **investigation tickets** alongside — or ahead of — build slices. An investigation ticket resolves ONE decision and records the resolution as a closing comment; it produces no production code. Type each by the skill that resolves it: | ||
| **Investigation tickets, decisions, not deliverables.** When the source still carries unresolved unknowns (open design questions, unvalidated approaches, fuzzy scope), emit **investigation tickets** alongside, or ahead of. Build slices. An investigation ticket resolves ONE decision and records the resolution as a closing comment; it produces no production code. Type each by the skill that resolves it: |
There was a problem hiding this comment.
The em-dash removal here garbled the sentence rather than preserving its meaning. Original: emit **investigation tickets** alongside — or ahead of — build slices. ("build slices" was the object of "ahead of.") Rewritten: emit **investigation tickets** alongside, or ahead of. Build slices. — this now reads as an incomplete clause ("alongside, or ahead of.") followed by a stray imperative sentence ("Build slices."), which changes what the sentence is telling the reader to do.
Suggested fix: emit **investigation tickets** alongside, or ahead of, build slices.
| whose marker already stands — a still-unratified `ratify-c3`, an idempotent label re-convergence | ||
| — is not a new escalation, so the cycle files no second comment and writes no second record. | ||
| whose marker already stands, a still-unratified `ratify-c3`, an idempotent label re-convergence | ||
| , is not a new escalation, so the cycle files no second comment and writes no second record. |
There was a problem hiding this comment.
Stray leading comma left over from the em-dash rewrite: the line reads , is not a new escalation, so the cycle files no second comment.... This is a mechanical artifact (dash → comma split across a line wrap), not valid prose. Should read ..., an idempotent label re-convergence, is not a new escalation, ... on one clause.
| substring/prefix, not exact-title equality, | ||
| so it can return a longer item (`[Maintenance] Review CI workflow pins`) when the old title was | ||
| `Review CI` — **filter the results to the one whose title equals `[Maintenance] {old title}` | ||
| `Review CI`. **filter the results to the one whose title equals `[Maintenance] {old title}` |
There was a problem hiding this comment.
Sentence-capitalization slip from the em-dash rewrite: `Review CI`. **filter the results...** starts a new sentence with a lowercase "filter". Same pattern recurs at decompose/SKILL.md:106 and :263 (list. **work the frontier**) and work/SKILL.md:260 (section. **ensure the section exists first**) — worth a repo-wide grep for \. \*\*[a-z] before merging, since the self-audit pass mentioned in the PR description was meant to catch exactly this class of split.
|
Claude has reviewed this PR 1 time. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
Fifth #2891 de-slop shard: purge em dashes from the claude-config plugin instruction surfaces, the next-worst cluster after session-flow (#3106), planning (#3105), work-items (#3107) and source-control (#3108). Rewrote README.md and all ten SKILL.md files under /ai-slop:audit fix semantics: periods, commas, a colon before a list, or a restructured sentence. Never parentheses, en dashes, or a spaced hyphen, since each of those is the same interruption wearing a different mark. Two review rounds on the PR caught seven places where a paired em dash had become parentheses and two doubled-connective run-ons; all were restructured. Rebased onto 0.39.0. That release restructured audit-instructions/SKILL.md (moving the Phase D state-key block to context/report-keying.md) and added --persist-findings, so this shard re-applies to the new text rather than reverting it: the flag, its Phase D paragraph, and both context/ spokes are retained, with the em dashes in the new prose purged in the same style. context/ files stay out of scope, matching #2891's target set and every prior shard. Frontmatter description and argument-hint values are rewritten too. No quoted auto-invocation trigger phrase contained an em dash, so no trigger changed. Verification (this repo's .claude/ai-slop.json disables rule-em-dash corpus-wide, so the detector runs against an isolated HOME and CLAUDE_PROJECT_DIR to force the rule on): - detect.sh over the 11 shard files: 482 findings -> 0, every other rule also 0 - no en dash or spaced hyphen introduced; the four en dashes in the diff are pre-existing numeric ranges (I1-I28, I1-I5, 3-5 lanes) - check-changelog-parity.sh --check and --check-bump origin/main: pass - CHECK_SKILL_SKIP_MARKDOWNLINT=1 check-changed-skills.sh origin/main: 10 skills, 0 errors, every base-ref trigger phrase preserved - markdownlint-cli2 over the 12 changed files: 0 issues - audit-instructions/SKILL.md is 483 lines, under the 500-line cap Pre-existing and not from this diff: three audit-permission-state script suites fail identically on a clean origin/main worktree in this environment. This shard touches no script. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tu5t8rYWv2kDzRcdmLE2ro
Fifth #2891 de-slop shard: purge em dashes from the claude-config plugin instruction surfaces, the next-worst cluster after session-flow (#3106), planning (#3105), work-items (#3107) and source-control (#3108). Rewrote README.md and all ten SKILL.md files under /ai-slop:audit fix semantics: periods, commas, a colon before a list, or a restructured sentence. Never parentheses, en dashes, or a spaced hyphen, since each of those is the same interruption wearing a different mark. Two review rounds on the PR caught seven places where a paired em dash had become parentheses and two doubled-connective run-ons; all were restructured. Rebased across two releases that landed on main mid-review, in both cases re-applying to the newer text rather than reverting it: - 0.39.0 (#3176) restructured audit-instructions/SKILL.md, moving the Phase D state-key block to context/report-keying.md and adding --persist-findings. The flag, its Phase D paragraph, and both context/ spokes are retained. - 0.39.1 (#3178) normalized setup/SKILL.md and audit-instructions/SKILL.md to canonical fleet SSOT wording with PLUGIN-PHILOSOPHY citations. That wording and those citations are kept verbatim; only their punctuation is de-slopped. context/ files stay out of scope, matching #2891's target set and every prior shard. Frontmatter description and argument-hint values are rewritten too. No quoted auto-invocation trigger phrase contained an em dash, so no trigger changed. Verification (this repo's .claude/ai-slop.json disables rule-em-dash corpus-wide, so the detector runs against an isolated HOME and CLAUDE_PROJECT_DIR to force the rule on): - detect.sh over the 11 shard files: 0 findings, every rule clean - no en dash or spaced hyphen introduced; the four en dashes in the diff are pre-existing numeric ranges (I1-I28, I1-I5, 3-5 lanes) - check-changelog-parity.sh --check and --check-bump origin/main: pass - CHECK_SKILL_SKIP_MARKDOWNLINT=1 check-changed-skills.sh origin/main: 10 skills, 0 errors, every base-ref trigger phrase preserved - markdownlint-cli2 over the 12 changed files: 0 issues - audit-instructions/SKILL.md is 484 lines, under the 500-line cap Pre-existing and not from this diff: three audit-permission-state script suites fail identically on a clean origin/main worktree in this environment. This shard touches no script. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tu5t8rYWv2kDzRcdmLE2ro
No linked issue ## Summary Fourth #2891 de-slop shard: purge em dashes from the `source-control` plugin instruction surfaces (next-worst cluster after planning, session-flow, and work-items). ## Fix Rewrote `plugins/source-control/README.md` and every `plugins/source-control/**/SKILL.md` under `/ai-slop:audit fix` semantics (periods, commas, or a restructured sentence; never parentheses, en dashes, or a spaced hyphen as a stand-in). Meaning-preserving self-audit repaired multi-line paired asides. The generated options block is ignore-fenced. Protocol strings in fences and inline code stay as written. `source-control` 0.54.17. Cheatsheet refreshed for the rewritten summary. ## Verification - Detector: 0 `rule-em-dash` findings, 76 declined (generated-options fence plus fenced/inline-code protocol spans) - `python3 -m unittest` `test_skill_contract`: 25 tests OK - `python3 scripts/sync-plugin-options-docs.py --check` up to date - `scripts/check-changelog-parity.sh --check-bump origin/main` passes - Quoted trigger phrases vs origin/main: none lost #2891 stays open. Prior shards: #3105 planning, #3106 session-flow, #3107 work-items. ## Related Refs #2891 --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
No linked issue ## Summary Fifth #2891 de-slop shard: purge em dashes from the `claude-config` plugin instruction surfaces, the next-worst cluster after `session-flow` (#3106), `planning` (#3105), `work-items` (#3107) and `source-control` (#3108). #2891 stays open; ranked by em-dash lines over non-vendor instruction surfaces, the next unclaimed cluster after this one is `discipline` (468), then `claude-ops` (336). ## Fix Rewrote `README.md` and all ten `SKILL.md` files under `/ai-slop:audit fix` semantics: em dashes become periods, commas, a colon before a list, or a restructured sentence. Never parentheses, en dashes, or a spaced hyphen, since each of those is the same interruption wearing a different mark. A self-review against that guardrail caught seven places where a paired em dash had become parentheses in this very diff — four frontmatter `description` values (`audit`, `audit-instructions`, `audit-automation-gaps`, `audit-prompting-postures`) and three inline spots (`setup`'s required-keys list, `audit-instructions`' I8-family list and its discover-instruction-surfaces population, `audit-pass`' exclusion-set aside). All seven were restructured to commas, a colon, or a sentence break; the net parenthesis delta across the diff is -1. Frontmatter `description` and `argument-hint` values are rewritten too. No quoted auto-invocation trigger phrase contained an em dash, so no trigger changed. `claude-config` 0.38.10. Wording only: no check, phase, gate, lane, contract, or script changed. ## Verification This repo's `.claude/ai-slop.json` disables `rule-em-dash` corpus-wide (a deliberate house-style decision, #3031), so every detector run below pins `HOME` and `CLAUDE_PROJECT_DIR` to empty directories to lift that config and force the rule on — the same isolation the detector's own test suite uses. - `detect.sh` over the 11 shard files: **482 `rule-em-dash` findings to 0**, with every other rule also reporting 0. - No en dash or spaced hyphen introduced; net parenthesis delta -1. - `scripts/check-changelog-parity.sh --check` and `--check-bump origin/main`: pass. - `CHECK_SKILL_SKIP_MARKDOWNLINT=1 bash scripts/check-changed-skills.sh origin/main`: 10 skills, 0 errors. It confirms every base-ref trigger phrase is preserved on all ten. One soft warning (`unhobble` at 201 lines against a 200-line target) is pre-existing. - `markdownlint-cli2` over the 12 changed files: 0 issues. - `node scripts/generate-cheatsheet.mjs`: already in sync — no `metadata.summary` value changed, so unlike the `work-items` shard this one needs no cheat-sheet refresh. - `python3 scripts/sync-plugin-options-docs.py --check`, `typos`, `editorconfig-checker`: pass. - `origin/main` merged into the branch before this PR; no conflicts, and the two new main commits (#3115, #3116) touch no `claude-config` file. **Pre-existing failure, not from this diff.** Three `audit-permission-state` script suites fail in this environment: `permission-merge` 19/51, `automode-entry-diff` 3/63, `managed-conformance` 1/37. They fail with identical counts on a clean `origin/main` worktree, and this shard touches no script. Flagging rather than fixing, since diagnosing them is out of scope here. ## Related - Refs #2891 — the de-slop campaign this shard advances; stays open for the remaining clusters. - Refs #3105, #3106, #3107, #3108 — the sibling instruction-surface shards. - Refs #3031 — the measurement and decision that disabled `rule-em-dash` corpus-wide, which is why the verification runs force the rule back on rather than trusting a default run. **Deferred finding, deliberately not fixed here: manifest `description` fields are outside the campaign's scope definition.** Review flagged that `plugins/claude-config/.claude-plugin/plugin.json` still carries 5 em dashes in its marketplace-facing `description`. That is correct, and it is a gap in #2891's own scoping rather than in this shard: the issue defines the target set as "every `SKILL.md`, plugin READMEs, `AGENTS.md`, root `README`", which does not include `plugin.json`. The merged `work-items` shard (#3107) touched its manifest for the version bump only, so every shipped shard carries the same gap. Measured across the marketplace: **47 plugins** have em dashes in their manifest `description`, led by `discipline` (14), `claude-ops` (12) and `session-flow` (11). Fixing only `claude-config` here would leave the shard series internally inconsistent while resolving 5 of ~120 occurrences, so this belongs to a campaign-level decision on #2891 about whether manifest descriptions join the target set, not to this PR. Recorded here so it is not lost. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01Tu5t8rYWv2kDzRcdmLE2ro --- _Generated by [Claude Code](https://claude.ai/code/session_01Tu5t8rYWv2kDzRcdmLE2ro)_ --- _Generated by [Claude Code](https://claude.ai/code)_
No linked issue
Summary
Third #2891 de-slop shard: purge em dashes from the
work-itemsplugin instruction surfaces (next-worst cluster afterplanningandsession-flow).Fix
Rewrote
plugins/work-items/README.mdand everyplugins/work-items/**/SKILL.mdunder/ai-slop:audit fixsemantics (periods, commas, or a restructured sentence; never parentheses, en dashes, or a spaced hyphen as a stand-in). Meaning-preserving self-audit repaired multi-line paired asides the mechanical pass split. The generated options block is ignore-fenced; its shared template is a later shard. One quoted auto-invocation trigger (the spec changed — redo the tickets) keeps its em dash so skill-quality does not treat the rewrite as a dropped trigger.work-items0.39.13. Cheatsheet refreshed for the rewrittenshipsummary.Verification
rule-em-dash(the required trigger phrase), 49 declined (generated-options fence plus fenced/inline-code protocol spans)CHECK_SKILL_SKIP_MARKDOWNLINT=1 bash scripts/check-changed-skills.sh origin/main: 10 skills, 0 failedbash plugins/work-items/skills/work/scripts/preflight.test.sh: 99 checks passedbash plugins/work-items/tests/no-hardcoded-priority-scheme.test.sh: 6 passedpython3 scripts/sync-plugin-options-docs.py --checkup to datescripts/check-changelog-parity.sh --check-bump origin/mainpasses#2891 stays open. Next cluster after this is
source-control.Related
Refs #2891