docs(plan): add the floor constraint — compensatory vs load-bearing (§6.0)
Operator corrected two things about the brief committed in 3086e8b/3252b51.
Provenance: the operator watched the recording and identifies Boris Cherny on
stage, so the attribution is confirmed by direct observation, not a channel's
claim. The verbatim figures (80 %, "more intelligent without the prompts") still
reach us through the summary's editing and stay at that confidence level. §1 now
carries both levels separately, and the register source string reflects the split
instead of flattening to "unverified".
Design: "start with what it must have" is the constraint the whole feature turns
on, so it is a hard constraint (§6.0), not a candidate-shape detail. Model
capability erodes compensatory instructions ("read the whole file first") and
does nothing to load-bearing local facts ("only Forgejo", "bash is 3.2", the test
command) — the model isn't failing at intelligence there, it cannot know. A tool
that treats them alike deletes the Forgejo constraint because Opus 5 "is smart
enough now". Rebuild is therefore three tiers: floor restored immediately, earned
returns on repeated stumbling, dead never comes back. Policy prohibitions stay in
the floor by decision rather than classification — asymmetric cost, cheap to keep.
Consequences threaded through: §5 disqualifies any shape that cannot express the
distinction, §7.2 becomes the core open question (age and class are independent
signals, so age alone can never carry the call), and §8 gains a blocking floor
test with a hand-built fasit and named must-survive items.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JNrtHo9hKSLKNyMS6b4Zuy
This commit is contained in:
parent
3252b514ed
commit
36c55fb167
1 changed files with 81 additions and 15 deletions
|
|
@ -19,16 +19,28 @@ shipped. Claims attributed to him in that summary:
|
|||
stumbles on the same thing repeatedly.
|
||||
- The model measured *slightly more intelligent* with the built-in prompts stripped.
|
||||
|
||||
**None of this is verified.** It is a secondhand transcript of a talk, from a channel
|
||||
selling a lead-magnet PDF. It is recorded here as the *trigger*, and it is deliberately
|
||||
not load-bearing for anything below. This repo already has one scar from treating a
|
||||
plausible quote as fact («Fable low ≈ Opus high», fabricated, rejected 2026-07-14).
|
||||
**Two levels of confidence here, and they must not be collapsed** (updated 2026-07-29
|
||||
after the operator corrected the first draft):
|
||||
|
||||
If the attribution ever needs to matter — e.g. if this becomes a `BP-*` entry in the
|
||||
best-practices register — it needs a primary source (the YC talk itself, or an
|
||||
Anthropic doc), and until then the register's source field must read
|
||||
*"third-party video summary, unverified"*. Verification is a Thursday task, not a
|
||||
prerequisite: the feature justifies itself from this repo's own logic (§3).
|
||||
- **Attribution — confirmed.** The operator watched the recording and identifies Boris
|
||||
Cherny on stage. This is not a channel's claim about who spoke; it is direct
|
||||
observation by the operator. The talk happened and it is him.
|
||||
- **The verbatim figures — still summary-level.** "80 % of the system prompt", "the
|
||||
model measured slightly more intelligent without the prompts", the Bun numbers: these
|
||||
reach us through the channel's editing, not through a primary transcript. They are
|
||||
plausible and consistent with §2, and they are not quoted as fact anywhere below.
|
||||
|
||||
So if this becomes a `BP-*` entry in the best-practices register, the source field reads
|
||||
*"Boris Cherny, YC Startup School talk (attribution confirmed by operator); figures via
|
||||
third-party summary, not primary-verified"* — not "unverified", and not a bare citation
|
||||
either. Getting a primary transcript for the figures is a nice-to-have, never a
|
||||
prerequisite: the feature is argued from this repo's own logic (§3), and this repo has
|
||||
one scar from treating a plausible quote as load-bearing fact («Fable low ≈ Opus high»,
|
||||
fabricated, rejected 2026-07-14).
|
||||
|
||||
**What the operator has affirmed as in scope:** delete CLAUDE.md, then rebuild by adding
|
||||
back what the model needs help with — *starting with what it must have*. That last clause
|
||||
is not a detail; it is the design constraint in §6.0.
|
||||
|
||||
## 2. Verified ground truth (checked against the local CLI, 2026-07-29)
|
||||
|
||||
|
|
@ -85,6 +97,10 @@ Two further reasons this belongs *here* specifically:
|
|||
|
||||
## 5. Candidate shapes (sketches — pick on Thursday, do not pre-commit)
|
||||
|
||||
All three inherit the floor constraint in §6.0: whatever the shape, load-bearing local
|
||||
facts are never deletion candidates, and a rebuild restores them first. A shape that
|
||||
cannot express that distinction is disqualified regardless of how cheap it is.
|
||||
|
||||
**A. Deterministic vintage scanner (`CA-VIN-*`).** Per instruction block in CLAUDE.md /
|
||||
rules / skills / hooks: age from git history, plus a compensatory-phrasing signal
|
||||
(blocks that exist to correct model behaviour — "ALWAYS", "never forget", "read the
|
||||
|
|
@ -110,6 +126,44 @@ workflow that consumes A's output. C stays a documented idea until A+B exist.
|
|||
|
||||
## 6. Hard constraints (carry these into any implementation)
|
||||
|
||||
### 6.0 The floor: compensatory vs load-bearing instructions
|
||||
|
||||
**This is the invariant all three shapes in §5 must respect, and it is what makes the
|
||||
feature safe to ship at all.** Not every line in a CLAUDE.md is the same kind of thing:
|
||||
|
||||
| Class | What it is | Test | Disposition |
|
||||
|---|---|---|---|
|
||||
| **Compensatory** | An instruction correcting model *behaviour* — "read the whole file first", "don't guess", "ALWAYS verify", "think before you code" | A smarter model would do this unprompted | **Deletion candidate.** Returns only when earned. |
|
||||
| **Load-bearing** | A *local fact* the model cannot derive at any capability level — "never GitHub, only Forgejo at git.fromaitochitta.com", "system bash is 3.2, no `declare -A`", "test with `node --test 'tests/**/*.test.mjs'`", "`~/.claude` is not git-tracked" | No amount of intelligence produces this from the codebase alone | **Floor. Never a deletion candidate.** |
|
||||
|
||||
Model capability erodes the first class and does nothing to the second. That is the whole
|
||||
mechanism behind the source idea — and it means "delete your CLAUDE.md" is only correct
|
||||
for one of the two classes. A tool that treats them alike would delete the operator's
|
||||
Forgejo constraint because Opus 5 "is smart enough now", which is a category error: the
|
||||
model isn't failing at intelligence there, it simply cannot know.
|
||||
|
||||
**Consequence for the rebuild ordering.** A rebuild is not one undifferentiated
|
||||
add-back-on-stumble loop. It is three tiers:
|
||||
|
||||
1. **Floor — goes back immediately, no trial period.** Load-bearing facts. The config is
|
||||
never in a state where these are absent; a "delete everything" that drops them is a
|
||||
broken experiment, not a brave one.
|
||||
2. **Earned — out, returns only on repeated observed stumbling.** Compensatory
|
||||
instructions that turn out to still be needed by *this* model.
|
||||
3. **Dead — out and never missed.** The payoff, measurable in tokens via `manifest`.
|
||||
|
||||
A third class sits deliberately outside the axis: **policy prohibitions** ("never commit
|
||||
secrets"). These may well be things the model would honour unprompted, but their cost of
|
||||
being wrong is asymmetric and they are cheap. They stay in the floor by decision, not by
|
||||
classification. Do not let a "the model knows this now" argument reach them.
|
||||
|
||||
The hard part is tier 1 vs tier 2, and that classification — not the deletion mechanics —
|
||||
is the real engineering problem in this brief. Precision is asymmetric: a missed dead line
|
||||
costs a few tokens per turn; a deleted load-bearing line costs a wrong remote, a broken
|
||||
bash script, or a lost afternoon.
|
||||
|
||||
### 6.1 Existing repo constraints
|
||||
|
||||
- **`~/.claude` is NOT git-tracked.** A literal `rm` there is unrecoverable. Archive by
|
||||
`mv` into `_archive/`, never delete. This is already an inviolable rule in STATE.md.
|
||||
- **`settings.json` is pathguard-protected** — no Edit/Write. Use `jq` + temp file +
|
||||
|
|
@ -126,8 +180,13 @@ workflow that consumes A's output. C stays a documented idea until A+B exist.
|
|||
|
||||
1. Scope of the deletion candidate set: user-level `~/.claude` only, project only, or both?
|
||||
(Age evidence is much stronger for project-level, per §5A.)
|
||||
2. Is "compensatory phrasing" detectable with acceptable precision, or does it need the
|
||||
agent layer (like `optimize`'s precision-gated `optimization-lens-agent`)?
|
||||
2. **The core question, given §6.0:** can compensatory-vs-load-bearing be classified
|
||||
deterministically with acceptable precision, or does it need the agent layer (like
|
||||
`optimize`'s precision-gated `optimization-lens-agent`, which stays silent when
|
||||
unsure)? Note the two signals are independent — a load-bearing fact can be old, and a
|
||||
compensatory instruction can be new — so age alone can never carry this call. Prior:
|
||||
a deterministic pre-filter feeding a precision-gated judge, which is exactly the
|
||||
`optimize` architecture already in the repo.
|
||||
3. Does this ship as its own command, or as a `--subtract` mode of `optimize`?
|
||||
Both are defensible; command count is already 21.
|
||||
4. ~~Ordering against the existing queue.~~ **Decided 2026-07-29:** the operator
|
||||
|
|
@ -163,6 +222,13 @@ workflow that consumes A's output. C stays a documented idea until A+B exist.
|
|||
scanners 16 → 17).
|
||||
- [ ] Every new finding renders with a non-`Other` `userImpactCategory` and a
|
||||
non-`_default` action language → humanizer wiring correct (M-16/M-17).
|
||||
- [ ] Dogfood on this machine produces at least one candidate the operator agrees is
|
||||
genuinely dead weight, and zero candidates the operator judges load-bearing
|
||||
(precision over recall — a false "delete this" is far more costly than a miss).
|
||||
- [ ] **Floor test (§6.0), the blocking one.** Build a fasit by hand first — per
|
||||
[[judge-the-judge-build-fasit-first]] — over the operator's own global CLAUDE.md,
|
||||
labelling each block compensatory or load-bearing. Then run the tool. Required
|
||||
result: **zero load-bearing blocks proposed for deletion.** Non-negotiable; the
|
||||
known-correct floor items to check for explicitly are "never GitHub, only Forgejo",
|
||||
"system bash is 3.2", the test command, and "`~/.claude` is not git-tracked". One
|
||||
of those in the delete list fails the gate outright, whatever the recall.
|
||||
- [ ] Recall, secondary: at least one candidate the operator agrees is genuinely dead
|
||||
weight. Precision over recall throughout — a missed dead line costs a few tokens
|
||||
per turn, a deleted load-bearing line costs a wrong remote or a broken script.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue