You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Merge remote-tracking branch 'origin/main' into claude/architecture-improvements-hqfc0i
Two changelogs and their manifests conflicted again: main minor-bumped
claude-config to 0.42.0 and claude-ops to 0.48.0, past the patch numbers this
branch had taken in the previous merge. Main's entries keep the numbers they
released under and this branch's entries move to 0.42.1 and 0.48.1, above them
in the newest-first order, with each manifest bumped to match.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011SQkHipoF2M8rTtnkbFKKP
Copy file name to clipboardExpand all lines: docs/PLUGIN-PHILOSOPHY.md
+14-2Lines changed: 14 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1090,9 +1090,21 @@ name is not the same underlying value across models):
1090
1090
preference, not a task-by-task decision
1091
1091
([choosing a model and effort level](https://claude.com/blog/claude-model-and-effort-level-in-claude-code)).
1092
1092
-**No lane pins `max` without eval evidence** — upstream warns it adds significant cost for
1093
-
relatively small quality gains and can lead to overthinking. A pin above `high` (e.g. `xhigh`)
1093
+
relatively small quality gains and can lead to overthinking. Deliberation helps only while
1094
+
there is still evidence to find; past that point extra effort buys cost and latency and can
1095
+
degrade the answer ([cut spend without losing quality](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence#cut-spend-without-losing-quality),
1096
+
verified 2026-09-09). A pin above `high` (e.g. `xhigh`)
1094
1097
is a deliberate per-lane choice grounded in the target model's own recommended-levels guidance,
1095
-
never a reflex.
1098
+
never a reflex. The miscalibration cuts the other way too: a lane set too low stops before it
1099
+
has enough evidence, makes fewer tool calls, and skips the checks it would run unprompted, so
1100
+
the answer looks finished while resting on partial information (same page, same verification).
1101
+
-**Sweep model and effort together before raising either.** A stronger model at low effort can
1102
+
beat a weaker or older model at high effort on both cost and quality, so a lane outgrowing its
1103
+
level tests the newer model at lower effort before pinning the old one higher, on its own
1104
+
evals. Cross-model economics and the flat-curve reading live in the fable-5 pack's
-**<name> (<provenanceclass>)** — what it does, what it mutates, how it is invoked.
135
-
-**<name> (<provenanceclass>)** — same.
146
+
-**`<name>` (<provenanceclass>)** — what it does, what it mutates, how it is invoked.
147
+
-**`<name>` (<provenanceclass>)** — same.
136
148
137
149
**Routing:** <whentoprefereach>.
138
150
139
151
**Mutation gate:** <which invocations mutate, and the explicit opt-in they require>.
140
152
```
141
153
142
-
Five properties the section keeps:
143
-
144
-
1.**Surfaces named by provenance class**, exactly as in the description phrase.
145
-
2.**A mutation gate per surface that mutates.** Naming an overlap without naming what it writes
154
+
Six properties the section keeps:
155
+
156
+
1.**Every overlapped surface named in the section, as a code span.**`## Boundary` on its own is
157
+
a heading any prose satisfies, and several components carry one for a surface this convention
158
+
has no verdict on. The heading naming the surface is the preferred shape and is what the
159
+
template above shows; a generic `## Boundary` heading is still accepted when the section text
160
+
names the surface, which is how one section covers a component that overlaps several. Either
161
+
way the name is a code span, so a surface whose name is also an ordinary English word (`run`,
162
+
`design`) is never satisfied by a sentence that happens to use the word.
163
+
2.**Surfaces named by provenance class**, exactly as in the description phrase.
164
+
3.**A mutation gate per surface that mutates.** Naming an overlap without naming what it writes
146
165
invites an unrequested mutation.
147
-
3.**One owning description, pointers elsewhere.** Where two components in the *same plugin* both
166
+
4.**One owning description, pointers elsewhere.** Where two components in the *same plugin* both
148
167
overlap the surface, one carries the description and the other points at it with a same-plugin
149
168
relative link and adds only what is specific to itself. Cross-plugin pointers are forbidden.
150
-
4.**Presence-gated language throughout** — the body inherits the description's gate; it never
169
+
5.**Presence-gated language throughout** — the body inherits the description's gate; it never
151
170
promotes a surface to available because the body is longer.
152
-
5.**Upstream specifics carry their basis and date**, per
171
+
6.**Upstream specifics carry their basis and date**, per
153
172
[`upstream-drift`](../upstream-drift/README.md).
154
173
155
174
## Self-containment — shipped plugins never cite the registry
@@ -160,9 +179,13 @@ broken reference at install time, and the reader would be routed to a file that
160
179
161
180
So: baked text repeats what it needs and cites nothing outside its own plugin. The registry is a
162
181
maintainer surface — it records the verdict, the evidence, and the trigger that would change them;
163
-
the component carries the conclusion. This is the same direction the parity check enforces
164
-
mechanically: every baked line traces back to a store row, while a store row without a baked line
165
-
is legal pending-sweep state.
182
+
the component carries the conclusion. The parity check enforces the forward direction
183
+
mechanically: every baked line traces back to a store row, and a claimed Boundary section must name
184
+
that row's surface rather than merely carry the heading. In the other direction the two baked
185
+
surfaces differ. A row without its Boundary section is a defect the self-check fails on, because
186
+
the section costs nothing and can always land in the change that adds the row; a row without a
187
+
description phrase is legal pending state, because the phrase is the budget-priced,
188
+
routing-affecting half and earns its separate gate.
166
189
167
190
## Enforceability
168
191
@@ -171,6 +194,7 @@ Classified per `melodic-software/standards` `conventions/engineering/enforceabil
171
194
| Judgment | Tier |
172
195
|---|---|
173
196
| A baked native reference traces to a store row |**Deterministic** — built, as the overlap self-check's store↔baked-line parity pass |
197
+
| Every non-`defer` extraction-evidence row has its Boundary section (`baked.boundary_section` true, and a `## Boundary` section in the component naming that row's surface as a code span) |**Deterministic**: built, in the same self-check, as a blocking problem (exit 1). The tier carries no advisory grade: advisory belongs to detect-then-judge, where a tool narrows a set a human then rules on, and nothing here needs a ruling. A consumer gate passes a degraded run because degraded reports what this repository cannot fix by editing its own files; a missing section is fixable in the change that adds the row |
174
198
| Every store row carries a recheck trigger and a class-tagged observation record |**Deterministic** — built, in the same self-check |
175
199
| The phrase uses the presence gate rather than an availability assertion |**Detect-then-judge** — the `resolves in your session` token is greppable, but deciding whether a *different* sentence asserts availability is a judgment about meaning. Candidate check named, not built: flag a component description naming a bundled or built-in surface with no gate token. Build trigger: a second assertion-shaped native reference reaches `main` after this doc |
176
200
| The routing split is the right one |**Reasoning-only** — it is the verdict, and verdicts are human-gated by design |
@@ -181,9 +205,20 @@ Classified per `melodic-software/standards` `conventions/engineering/enforceabil
181
205
|---|---|
182
206
|`/claude-ops:audit-install-state`| Description phrase + `## Boundary` section for the bundled `doctor` skill (verdict `complementary`) |
183
207
|`/review:quality-gate`, `/review:fanout`| The organic Boundary pattern this doc generalizes; adopts the phrasing rules on next touch |
184
-
185
-
Fleet-wide application is a reserved, separately gated sweep: one plugin per unit — apply, verify,
186
-
PR, close — never a single fleet-wide edit.
208
+
|`/claude-config:audit-instructions`|`## Boundary` section for the bundled `claude-api` skill's `prompt-audit` subcommand (verdict `complementary`, composite posture), four-part detail in the skill's own reference file; no description phrase |
209
+
|`/evals:methodology`|`## Boundary` section for the bundled `claude-api` skill's `hillclimb` and `build-eval` subcommands (verdict `complementary`); detail in the skill's eval-design reference |
210
+
|`/playbooks:fable-5`|`## Boundary` section for the bundled `claude-api` skill as the live-facts and cost-audit surface its chapters defer to (verdict `complementary`); detail in the pack's prompt-caching reference chapter |
211
+
|`/review:code-review`, `/review:security-review`|`## Boundary` sections for the bundled `code-review` skill and the native `security-review` command (verdict `complementary`, CI lane versus session pass); four-part detail in each skill's `reference/` file; no description phrase |
212
+
|`/code-tidying:tidy`, `/code-tidying:batch-simplify`|`## Boundary` sections for the bundled `simplify` skill (verdict `complementary`, diff-anchored versus lane- and sweep-anchored); detail in each skill's reference or context file; no description phrase |
213
+
|`/testing:run-e2e`|`## Boundary` section for the bundled `run` skill (verdict `complementary`, a look versus evidenced verification); detail in the skill's context file; no description phrase |
214
+
|`/claude-ops:audit-performance`, `/claude-ops:audit-skill-visibility`|`## Boundary` sections for the bundled `doctor` skill (and `/skill-doctor` for the second), verdict `complementary`; the second also carries the description phrase; detail in each skill's `reference/` file |
215
+
|`/visualization:visualize`, `/prototype:explore-directions`|`## Boundary` sections for the bundled `design` skill (verdict `complementary`, user-run canvas versus throwaway page or mockup); detail in the catalog spoke and the skill's `reference/` file; no description phrase |
216
+
217
+
Applying **description phrases** fleet-wide is a reserved, separately gated sweep: one plugin per
218
+
unit — apply, verify, PR, close — never a single fleet-wide edit, because each phrase moves routing
219
+
and spends shared budget. **Boundary sections** are not routing-affecting and spend no budget, so
220
+
Boundary-only baking may land across several plugins in one change; the unit rule does not apply
0 commit comments