Skip to content

code-tidying: docs-prose lane uses undeclared wholesale replacement — decompose to per-key override (conformance, ruling #649) #701

Description

@kyle-sexton

Conformance follow-up from the #649 ruling — code-tidying docs-prose lane

Ruling #649 dispositioned this surface CORRECT (not ratify). Filed as status: ready; applied under operator momentum delegation, veto window open.

The deviation

plugins/code-tidying/skills/tidy/lanes/docs-prose.md:14:

Adjust to the consuming project's actual documentation layout (a project lane at .claude/tidy-lanes/docs-prose.md overrides this file entirely).

This is undeclared wholesale replacement of a whole prose-ruleset lane — forbidden by the consumer-config layering contract (docs/conventions/consumer-config-layering/README.md, "Merge semantics"). It turns every generic watch-for pattern the project lane omits into a silent loss of the bundled base, and carries the same freeze as any wholesale replace: a project lane stops bundled lane improvements (new patterns) from ever reaching that repo.

Why CORRECT rather than ratify

The lane is decomposable. Its Scope block is the only part a project genuinely needs to retarget; the watch-for patterns (P-1..P-6) are generic and would concatenate fine. "Override entirely" is broader than the surface needs, so additive merge is the root fix for the freeze — non-overridden parts keep flowing from upstream. This is exactly the sanctioned per-key path #647 took for source-control. No new exception class is warranted.

Scope of the fix

  • Decompose the lane so a project overrides the Scope block per key while the generic watch-for patterns stay additive (concatenate). Declare the per-key override semantics in the surface's own contract, next to its keys.
  • Separate, do not fold in: setup/SKILL.md:110-112 refuses any .local.* overlay — a single-layer gap (the surface resolves one file: project lane, else bundled, no personal layer). Note it; it is a distinct concern from the merge-granularity fix, mirroring source-control: tracked config is single-layer — no ~/.claude user-global or *.local.* overlay, diverging from seam 2 #647's single-layer note.

Acceptance

  • docs-prose lane decomposed: Scope per-key override + additive watch-for patterns, override semantics declared.
  • code-tidying row in docs/conventions/consumer-config-layering/README.md Implementers table updated to reflect conformance (moving it out of the single-layer/undeclared framing).
  • .local.* overlay gap tracked (here or a linked issue), not silently closed.

Refs #649.

Metadata

Metadata

Assignees

Labels

priority: lowNice-to-have, cosmetic, or speculative; opportunistic.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions