CANDIDATE lint rule: misaddressed-audience (Tier-2 prose smell) #135

Open
opened 2026-07-26 20:52:54 +00:00 by jared · 4 comments
Owner

CANDIDATE lint rule -- NOT an approved catalog entry. Proposal only, gated
by catalog admission (docs/adr/0060*, change-control banner in
plugins/os-aidd-lint/references/tier2-charter.md). Derived by running
os-aidd-lint's own Tier-2 judge against its own skills/ dir, then
auditing what it missed.

Problem

tier2-charter.md's own top-of-file change-control banner is pasted
verbatim into the live judge prompt: "Any edit requires: 1. Re-running the
eval fixtures... 3. Human review of the diff." Also, inside
misplaced-pre-emption: "Do not invest further tooling effort narrowing
this entry without a larger sample." Both address a human maintainer
editing the file, not the judge consuming it at inference time -- the
judge has no fixtures to run, no diff to review, no tooling to invest.

Detection (candidate, not finalized)

Flag second-person/imperative text addressed to a human editor role
(re-running fixtures, merging, reviewing diffs) inside a passage the
consuming model has no tool access or task scope to act on. Needs a human
call on how to state this deterministically, or whether it's judgment-only.

Correction

n/a -- not designed. Plausible shape: move human-editing instructions out
of the frozen prompt asset (e.g. into CLAUDE.md/CONTRIBUTING), leaving only
judge-facing content in the pasted text.

Pass/fail examples

  • Must flag: the banner's "Re-running the eval fixtures... Human review of
    the diff."
  • Must NOT flag: imperative instructions to the model about its own output.

Provenance

2026-07-26, /os-aidd-lint:check self-run + miss audit. Single instance:
tier2-charter.md banner + misplaced-pre-emption closing sentence.

Open risk -- single-instance provenance

Exactly ONE source file. Two of the three EXISTING catalog smells were
also derived from thin single/narrow samples and remain provisional with
near-zero confirmed recurrence. Do not promote without a broader sample.

Implementation plan

Not assigned. Needs human catalog-admission decision first.
ready-for-human, not ready-for-agent.

CANDIDATE lint rule -- NOT an approved catalog entry. Proposal only, gated by catalog admission (`docs/adr/0060*`, change-control banner in `plugins/os-aidd-lint/references/tier2-charter.md`). Derived by running os-aidd-lint's own Tier-2 judge against its own `skills/` dir, then auditing what it missed. ## Problem `tier2-charter.md`'s own top-of-file change-control banner is pasted verbatim into the live judge prompt: "Any edit requires: 1. Re-running the eval fixtures... 3. Human review of the diff." Also, inside `misplaced-pre-emption`: "Do not invest further tooling effort narrowing this entry without a larger sample." Both address a human maintainer editing the file, not the judge consuming it at inference time -- the judge has no fixtures to run, no diff to review, no tooling to invest. ## Detection (candidate, not finalized) Flag second-person/imperative text addressed to a human editor role (re-running fixtures, merging, reviewing diffs) inside a passage the consuming model has no tool access or task scope to act on. Needs a human call on how to state this deterministically, or whether it's judgment-only. ## Correction n/a -- not designed. Plausible shape: move human-editing instructions out of the frozen prompt asset (e.g. into CLAUDE.md/CONTRIBUTING), leaving only judge-facing content in the pasted text. ## Pass/fail examples - Must flag: the banner's "Re-running the eval fixtures... Human review of the diff." - Must NOT flag: imperative instructions to the model about its own output. ## Provenance 2026-07-26, `/os-aidd-lint:check` self-run + miss audit. Single instance: `tier2-charter.md` banner + `misplaced-pre-emption` closing sentence. ## Open risk -- single-instance provenance Exactly ONE source file. Two of the three EXISTING catalog smells were also derived from thin single/narrow samples and remain `provisional` with near-zero confirmed recurrence. Do not promote without a broader sample. ## Implementation plan Not assigned. Needs human catalog-admission decision first. `ready-for-human`, not `ready-for-agent`.
Author
Owner

External review (Codex / GPT-5.6 tier), 2026-07-26 — reformulation proposed, not yet applied.

Codex judges the smell real but the name and boundary wrong. Proposed rename: actor-incompatible-directive. Its objection: change-control language such as "requires human review" is NOT inherently a smell — the charter's own frozen-file banner is a legitimate use of it. The defect exists only when the directive reaches an actor incapable of executing it. Note that this sharpens the non-example boundary the ticket currently lacks.


Codex independently agreed these three candidates should NOT be promoted to the live catalog yet, on the same single-instance-provenance grounds already recorded in each ticket. It proposed a three-state pipeline (candidate -> shadow -> confirmed) with a promotion threshold of: at least 5 confirmed positives across at least 3 files and at least 2 repos (no more than 2 from the originating file), at least 10 hard negatives, dual-reviewer agreement, roughly 90% precision / 80% recall on a held-out eval, and no regression on existing categories.

External review (Codex / GPT-5.6 tier), 2026-07-26 — reformulation proposed, not yet applied. Codex judges the smell real but the name and boundary wrong. Proposed rename: `actor-incompatible-directive`. Its objection: change-control language such as "requires human review" is NOT inherently a smell — the charter's own frozen-file banner is a legitimate use of it. The defect exists only when the directive reaches an actor incapable of executing it. Note that this sharpens the non-example boundary the ticket currently lacks. --- Codex independently agreed these three candidates should NOT be promoted to the live catalog yet, on the same single-instance-provenance grounds already recorded in each ticket. It proposed a three-state pipeline (candidate -> shadow -> confirmed) with a promotion threshold of: at least 5 confirmed positives across at least 3 files and at least 2 repos (no more than 2 from the originating file), at least 10 hard negatives, dual-reviewer agreement, roughly 90% precision / 80% recall on a held-out eval, and no regression on existing categories.
Author
Owner

decision recorded — deferred as a candidate pending a second confirmed sample from a different repo; reframed per review as 'actor-incompatible-directive' (the smell is unexecutable-by-this-actor instructions, not change-control language); the sole known instance was fixed structurally by PromptTextFilter (commit c41879e).

decision recorded — deferred as a candidate pending a second confirmed sample from a different repo; reframed per review as 'actor-incompatible-directive' (the smell is unexecutable-by-this-actor instructions, not change-control language); the sole known instance was fixed structurally by PromptTextFilter (commit c41879e).
Author
Owner

Cross-repo sweep found one instance of the actor-incompatible-directive pattern: cc-plugins rails-ui-component references/tiers/tier-patterns.md:118 — 'test with screen readers' inside agent-executed guidance. That's sample 2 of the ≥5 bar. Still a candidate.

Cross-repo sweep found one instance of the actor-incompatible-directive pattern: cc-plugins rails-ui-component references/tiers/tier-patterns.md:118 — 'test with screen readers' inside agent-executed guidance. That's sample 2 of the ≥5 bar. Still a candidate.
Author
Owner

Frozen in the 2026-08-16 backlog reset — see #419 for the expiry procedure. Do not work unless a live run rediscovers this issue.

Frozen in the 2026-08-16 backlog reset — see #419 for the expiry procedure. Do not work unless a live run rediscovers this issue.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#135
No description provided.