Skip to content

docs(playbooks): ship DOC bundle 2 — thinking cost doctrine under EC-1, effort dial seam - #1887

Merged
kyle-sexton merged 5 commits into
mainfrom
docs/corpus-doc-bundle2
Aug 3, 2026
Merged

docs(playbooks): ship DOC bundle 2 — thinking cost doctrine under EC-1, effort dial seam#1887
kyle-sexton merged 5 commits into
mainfrom
docs/corpus-doc-bundle2

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Ships DOC bundle 2 of the doc-corpus campaign: DOC-6 and DOC-12 (thinking cost doctrine, rewritten against the EC-1 finding), DOC-10 (effort extend-or-cite deltas), DOC-8 (the two-dials seam). playbooks 0.6.3 -> 0.6.4.

The EC-1 rewrite — the load-bearing change

The thinking cost doctrine (fable-5 context-economy.md + one distilled SKILL.md line) states the harness override as build-pinned behavior: Claude Code sends clear_thinking_20251015 keep:"all" on every thinking-enabled request, on keep-all AND last-turn-only models alike — prior-turn thinking is retained and input-billed everywhere. The per-model keep-all/last-turn split is presented only as what a raw API caller gets, beside the override. The full four-part record ships: claim, basis (wire-captured request bodies, build pinned by byte size), as-of 2026-08-03, recheck trigger (any CC upgrade — the override is a build-time constant, not a documented contract), plus the three gating conditions and both escapes (CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1; a gateway dropping the field) under which per-model defaults resume. Observation and inference kept apart: the wire proves retention; input-billing is upstream's rule applied to it.

The other rows

  • DOC-10: genuine deltas only — the harness corroboration + confirmation-dialog fact into §Effort tiers (A3/A4 already shipped); opus-5.md's campaign-internal "Phase 6 cross-check" deferral replaced with live Effort/model-config pages that actually own per-model starting levels, preserving the TRUNCATED finding.
  • DOC-8: thinking and effort as two separate dials (adaptive is a thinking mode, never an effort value; effort is soft guidance, max_tokens the only strict limit) landed in the effort-doctrine owner where the frontmatter effort trap is reachable. Pins untouched — they move only through the dotfiles seam, per the row's own text; the consumer-state drafts are in the campaign's memory tier.
  • Self-corrections shipped as follow-up commits (append-only): one retracted drift claim (the corpus sentence survives verbatim at the live page — the original dispute was wrong) and one carry of the build pin onto the always-loaded surface plus removal of a session-residue sentence.

Verification

Independently verified cold by a second model (the implementer's report was lost to a session interruption; the audit ran from the diff and primary bytes alone). Every quoted fragment re-verified verbatim against raw fetches with byte-size pins matching the commits' own records; the build pin re-verified live (same byte count, so the as-of stamp holds); zero surviving unqualified keep-all claims; nothing trips catalog rows I17-I22/I19/I8-b; playbooks 0.6.4 + CHANGELOG parity/order/bump green; markdownlint 0 errors.

Ledger note (immutable commit message): 00dc30749d says "DOC-12 supplies the three buckets"; the shipped section carries two of the pricing page's three — ordinary output-token billing is the pointer's job, not restated. Recorded here per the campaign's history-stays-immutable practice.

No linked issue

Related

kyle-sexton and others added 3 commits August 3, 2026 12:43
…e under EC-1, effort dial seam

Ships DOC bundle 2 of the doc-corpus campaign: DOC-6 and DOC-12 (merged,
rewritten against EC-1), DOC-8, DOC-10. `playbooks` 0.6.3 -> 0.6.4; the
`docs/PLUGIN-PHILOSOPHY.md` rows follow this repo's convention of not
versioning repo-level doctrine (precedent a09efd7, 970d0cb, and
bundle 1 at 90d526d).

## DOC-6 + DOC-12 merged into one home

Both rows state "thinking bills as output". Two sections stating it is
the duplication bundle 1 itself invoked against a second effort home, so
the billing facts get one owner: `skills/fable-5/context/context-economy.md`,
new section "Your own thinking is context you pay for twice". DOC-6
supplies the asymmetry and the operating consequence; DOC-12 supplies the
three buckets and the billed-vs-visible invariance.

Placed in the fable-5 context tree rather than `docs/PLUGIN-PHILOSOPHY.md`
because the content is an action the running model takes (accumulated
thinking is billed history, so hygiene is a cost lever), not a cost table
an author budgets from. It clears that tree's own exclusion rule: the bar
is on model-VERSION claims, and "every model, always" is not one.

## The EC-1 rewrite, and what it does not claim

The inherited row text hung the cost rows on the per-model keep-all vs
last-turn-only split. EC-1 falsifies that for the harness. The shipped
framing states the split as what upstream documents for raw API callers,
with the harness override beside it: Claude Code overrides it in the
keep-all direction on every thinking-enabled request, so retained blocks
accumulate and bill as input on every model.

Observation and inference are kept apart, deliberately. The wire evidence
proves the harness FORCES RETENTION; it does not observe billing. The
input-billing half is upstream's own rule for retained blocks
(thinking.md "Thinking and the context window") applied to that forced
retention, and the section says so in those words. Presenting
"input-billed always" as wire-observed would assert more than the capture
supports.

The four-part record ships with it: claim, basis (request bodies emitted
by `claude.exe`, 265,720,480 bytes, read for both a documented keep-all
and a documented last-turn-only model, `context-management-2025-06-27`
present in each request's `betas`), as-of date, and a recheck trigger on
any Claude Code upgrade — `keep:"all"` is a build-time constant, not a
documented contract. The three gating conditions and both escapes
(`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`, a gateway dropping the
field) are stated, and the escape is described as resuming the per-model
default rather than making the claim false.

DOC-12's observability half is REFUSED, not dropped:
`usage.output_tokens_details.thinking_tokens` is an API-only surface
gated on OQ-A/EC-6, and shipping it into playbook doctrine would state a
harness capability nobody has verified exists.

## DOC-8 — the effort dial seam

`docs/PLUGIN-PHILOSOPHY.md` §Effort tiers, which already owns effort
doctrine, gains the two-dials note: `thinking` decides whether Claude
reasons in blocks, `effort` decides how hard the whole response works;
"Don't pass `adaptive` as an `effort` value: `adaptive` is a thinking
mode, not an effort level"; and "Effort is soft guidance; `max_tokens` is
a strict limit", so a lane needing a hard spend ceiling sets the output
cap instead of pinning effort lower. Placed here because a frontmatter
`effort` field is the one surface in this repo where the `adaptive` trap
is reachable. A7's frontmatter lint stays deferred and the note says why:
a lint rule's source of truth is the harness's accepted-value list, which
this section deliberately does not restate.

## DOC-10 — two genuine deltas, two refusals

A3 and A4 already shipped in bundle 1 (the raise direction verbatim, and
`low` for mechanical fan-out with the "such as subagents" cite), so
nothing is restated. What ships:

- **A6** — the harness prompt-caching cite beside the platform cite, the
  polish bundle 1's verifier flagged. It carries a harness fact the
  platform page does not: once a conversation has started Claude Code
  "shows a confirmation dialog before applying an effort change that
  would invalidate the cache", and a change resolving to the level
  already in effect "skips the dialog and keeps the cache" — which
  independently corroborates the no-op corollary already there.
- **A1** — `context/model-adaptation/opus-5.md` deferred every effort
  claim to "the verified effort-doc slice (see this workstream's Phase 6
  cross-check)". Both referents are campaign-internal and resolvable by
  no consumer — the exact defect class bundle 1 refused for DOC-13. The
  deferral now points at the live Effort and model-config pages, and
  names per-model starting level among the upstream-owned items.

Refused: A3's "exact steering line for must-stay-low lanes" is the `low`
row of the Opus 4.7 per-level table ("Pair `low` with explicit checklists
if your task has multiple sections", effort source :83). §Effort tiers'
own rule bars restating the ladder including per-model guidance —
resolve it at decision time — so shipping it would violate the section it
would live in.

## Dispute

Effort digest 07 claim 5 quotes the harness prompt-caching page as "each
effort level has its own cache for the same model. Changing it
mid-session recomputes the entire request, and Claude Code asks you to
confirm before applying the change". That text no longer exists. The live
page (:82 of a 255-line, 29,777-byte raw fetch) rewords it entirely, same
substance. The live bytes are what ships, and the recheck trigger records
that this section has already moved once inside the campaign's own window.

## Consumer-state halves

Drafted, not committed: `.work` dotfiles-seam draft carrying the A6
addendum to the consumer session-start rule, plus a recorded DECLINE of
the `adaptive` guard consumer-side (the trap is unreachable from a
surface that never sets `effort` from a value list). Lands in a separate
batched dotfiles PR; the source-to-disk sync stays a human interactive
step and is never run from an agent session.

## Verification

Every upstream page fetched raw this session with recorded length:
thinking.md (HTTP 200, 52,769 B / 917 lines — byte-identical to the
frozen slice, so its line numbers are live-valid),
thinking-steering-and-cost.md (200, 40,477 B / 947 lines, likewise),
code.claude.com prompt-caching.md (200, 29,777 B / 255 lines),
model-config.md (200, 83,644 B), effort.md (200, 21,744 B). All anchors
confirmed against live headings. markdownlint 0 errors across 17 files;
`check-changed-skills.sh` PASS (0 errors, 8 warnings, all pre-existing —
the `context-economy.md:67` warning maps to unchanged line 53 on
origin/main); changelog parity, order, and bump checks all pass.

No linked issue

## Related

- Phase 3b DOC chapters of the doc-corpus campaign; bundle 1 is #1885.
- EC-1 answers the pricing digest's OQ-B in the keep-all direction. The
  frozen digest is deliberately not edited — it keeps the epistemic state
  its author had.
- DOC-7/20/23/43 remain gated on campaign decisions.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…eat recheck trigger

Independent verification of 00dc307 caught a shipped claim that is
false at the bytes, and this retracts it.

## What was wrong

The recheck trigger on the harness prompt-caching cite asserted that the
section "already reworded between this corpus's 2026-07-29 capture and
this check, same substance, different words". It did not. The corpus
digest's quoted sentence survives VERBATIM on the live page:

  prompt-caching.md:38 — "* **Effort level**: each effort level has its
  own cache for the same model. Changing it mid-session recomputes the
  entire request, and Claude Code asks you to confirm before applying
  the change."

The page states the mechanic TWICE — once in the cache-key list at :38,
and again in the `### Changing effort level` section body at :82, in
different words. The authoring pass grepped only the section body, found
different wording there, and recorded a divergence that never happened.
Matching one statement and not the other is not evidence of drift.

That is the same defect class this repository's own corpus discipline
exists to catch: a claim of absence derived from a probe that never
covered the place the text actually lives. Shipping it inside a recheck
trigger made it worse, since a trigger is the part a later reader is
supposed to be able to act on.

## The fix

The false clause is removed and replaced with the general caution the
episode actually earns: the page states the mechanic in two places, so a
quote matching only one of them is not evidence the other drifted —
check both before recording a divergence. The recheck trigger keeps its
two observable events (a Claude Code release changing the effort-change
confirmation flow, or that section being reworded).

Nothing else changes. Every quoted fragment shipped in 00dc307 was
re-verified verbatim against raw fetches of all five cited pages, all
six URL anchors resolve to real headings, and the EC-1 boundary
conditions and basis specifics match the evidence file exactly.

## Correction to 00dc307's message, recorded here since it is immutable

- Its "Dispute" section is withdrawn in full — there is no dispute with
  effort digest 07 claim 5. The digest quoted the page correctly.
- It said A3 and A4 "already shipped in bundle 1". A3 did (90d526d).
  A4's `low`-for-mechanical-sweeps bullet shipped earlier, in a09efd7
  (#1725, 2026-07-29). The operative conclusion is unaffected: both were
  already present, so neither was restated.

## Verification

`prompt-caching.md` re-fetched raw, HTTP 200, 29,777 bytes / 255 lines;
the verbatim sentence located at :38 by grep. markdownlint 0 errors.

No linked issue

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…d surface; drop session residue

Two review findings from the bundle 2 pass, both about where a claim is
read rather than whether it is true.

## The distilled line shipped a build-pinned specific bare

`skills/fable-5/SKILL.md`'s core-doctrine line stated the harness
thinking-retention override with no boundary condition, no recheck
trigger, and no route to either. SKILL.md is the always-loaded surface,
so that line is the most-read statement of the claim and the one a
reader can act on without ever reaching the chapter that qualifies it —
exactly the shape `docs/conventions/upstream-drift/README.md` refuses:
anything restating a volatile specific carries a re-derivation event or
it is drift waiting to happen.

0.6.3's chapter/core-doctrine pairing is not precedent for this. Its
distilled line carried a general rule; this one carries a specific
pinned to a harness build.

Fixed with the convention's own preferred shape — the pointer, not a
copy of the record. The line now says the override is pinned to a build
rather than a documented contract, and routes to the context-economy
chapter for the boundary conditions and recheck trigger. No stamp is
duplicated, so the two surfaces cannot drift apart.

## The correction commit encoded session residue into doctrine

f10b0ba replaced a false drift claim with a sentence explaining how
to avoid making it: "That page states the mechanic twice … check both
before recording a divergence." That is verification methodology aimed
at nobody who reads §Effort tiers, and it only parses for someone who
knows which grep missed which line in the session that wrote it. The
recheck trigger's two observable events stand without it, so it is
removed. The retraction itself is preserved where it belongs, in
f10b0ba's message.

The same shape is removed from the uncommitted `.work` dotfiles draft.

## Verification

markdownlint 0 errors across 17 files; `check-changed-skills.sh` PASS
(0 errors, 8 warnings, all pre-existing). Both hunks are re-checked
because f10b0ba was authored after the independent audit closed —
a change written in response to a found defect is the worst place to
leave an unverified edit.

No linked issue

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 3m 41s —— View job


Reviewing PR #1887

  • Gather context (diff, changed files, CLAUDE.md/REVIEW.md rules)
  • Understand the request (code review, this PR)
  • Review each changed file for correctness, doc-fidelity, and maintainability
  • Check CLAUDE.md fresh-docs mandate compliance
  • Post findings

Summary

This is a docs-only PR (playbooks 0.6.3 -> 0.6.4) with no code, config schema, or hook-contract surface touched, so the CLAUDE.md fresh-docs mandate's mandatory-WebFetch gate doesn't apply here (SKILL.md prose bodies and a plugin.json semver bump are both out of that mandate's contract-surface scope). I reviewed the three commits' diffs directly (git show) since sandboxed network access wasn't available to me this run (see Verification note below).

No correctness issues found. This PR is unusually well self-audited — it ships two follow-up commits that retract its own defects (a false drift claim in f10b0ba, a build-pinned bare specific and session-residue prose in c34659e), and the final state holds up:

  • EC-1 rewrite (context-economy.md, SKILL.md): observation (wire-forced retention) and inference (upstream's input-billing rule applied to that retention) are kept textually distinct, matching the PR's stated intent. The four-part verification record (claim/basis/as-of/recheck-trigger) is present and consistent between the full chapter and the distilled SKILL.md line — the line now points at the chapter rather than duplicating the stamp, so the two surfaces can't drift apart.
  • opus-5.md (DOC-10/A1): confirmed no other file in skills/fable-5/context/ still references the old campaign-internal "Phase 6 cross-check" / unreachable .work/ deferral — the fix is complete, not partial.
  • CHANGELOG/version parity: plugin.json 0.6.3→0.6.4 matches the new ## [0.6.4] entry; docs/PLUGIN-PHILOSOPHY.md's Effort-tiers additions (the A6 harness cache cite, the DOC-8 two-dials note) are correctly not in the plugin CHANGELOG, consistent with this repo's established precedent of not versioning repo-level doctrine (same pattern in bundle 1, 90d526d).
  • Retraction commit (f10b0ba): the correction is substantively right — it withdraws a false "already reworded" claim and replaces it with a general caution, and the follow-up commit (c34659e) further trims that replacement down to just the two observable recheck-trigger events, correctly judging the intermediate wording as process-residue rather than doctrine. Good instinct to keep tightening rather than settling for "technically not false."
  • Markdown structure: no broken links, consistent MD013-exempt long-line style matching the rest of these files (confirmed via .markdownlint-cli2.jsonc's repo-wide config), no stray campaign-internal jargon left behind.

Minor, non-blocking observations:

  • The SKILL.md core-doctrine bullet (plugins/playbooks/skills/fable-5/SKILL.md#L119) is dense (three claims: billed-twice fact, harness-retention cause, pointer-not-copy caveat) — but this matches every other bullet's density in that same list, so it's consistent with the file's own style rather than a new problem.
  • I could not execute markdownlint-cli2 or scripts/check-changed-skills.sh / check-changelog-parity.sh myself in this sandbox (both npx and the shell scripts required approval I wasn't able to grant in this run), so I relied on manual inspection against the repo's lint config rather than a live run. The commit messages' own reported results (0 errors, PASS, parity green) line up with what I found by hand, but a maintainer may want to confirm CI is green independently.

Nothing here rises to a blocking finding — this is solid, self-correcting documentation work.

@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 17s —— View job


Security review — no issues found

  • Gather context (diff, changed files)
  • Review each changed file for security issues
  • Post findings

Scope reviewed: the full diff introduced by this PR (90d526d..c34659e, matching the PR's stated +89/-7 across 6 files):

  • docs/PLUGIN-PHILOSOPHY.md — prose additions to the Effort tiers section (citations, upstream quotes)
  • plugins/playbooks/.claude-plugin/plugin.json — version bump 0.6.30.6.4 only; no other fields touched (no hooks, no MCP config, no permission/tool fields)
  • plugins/playbooks/CHANGELOG.md — changelog prose entries
  • plugins/playbooks/skills/fable-5/SKILL.md — one added bullet line under core doctrine; frontmatter (user-invocable, disable-model-invocation, etc.) unchanged
  • plugins/playbooks/skills/fable-5/context/context-economy.md — new "thinking cost" doctrine section (prose + citation links)
  • plugins/playbooks/skills/fable-5/context/model-adaptation/opus-5.md — prose rewording of an effort-doc deferral, swapping campaign-internal references for live upstream URLs

Findings: none. This PR is a pure documentation/doctrine change — markdown prose, citation links to platform.claude.com/code.claude.com, a semver bump, and changelog text. There is no code execution surface: no scripts, no GitHub Actions workflow changes, no hooks, no MCP server config, no allowed-tools/frontmatter permission fields, no secrets or credential handling, and no changes to any contract surface (skill frontmatter fields are untouched — only prose body content changed). None of the categories in scope for this review (injection surfaces, auth/access-control gaps, dangerous Actions patterns, permission-widening, supply-chain pin changes) apply to any file in this diff.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c34659e575

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/playbooks/skills/fable-5/context/context-economy.md Outdated
Comment thread docs/PLUGIN-PHILOSOPHY.md Outdated
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude has reviewed this PR 3 times. The lane skips further automatic reviews after 5; deleting this comment resets the count.

…mpacted window; scope max_tokens to the surface that can reach it

Two Codex P2 threads on #1887. One is accepted as found and fixed on
both surfaces; the other is a split verdict — its headline misreads a
faithful upstream quote, but the prescription it attacks was genuinely
unactionable.

## Thread 1 — accepted: the retention claim was unbounded

`context-economy.md` said every turn's reasoning "is re-sent and
re-billed on every subsequent request", with no upper boundary. That
overcounts after a history reset. Claude Code's own page states it
plainly: compaction "replaces your message history with a summary"
(prompt-caching.md, fetched raw 2026-08-03, HTTP 200, 29,777 bytes).
`keep:"all"` is a preservation instruction over blocks a request still
carries — it cannot resurrect history the harness already summarized
away. `/clear` and a rewind that truncates to an earlier prefix land
the same way.

Both surfaces are fixed, not just the flagged one. The thread cites
`context-economy.md:21`, but `SKILL.md`'s distilled line carried the
identical "every later request" claim, and SKILL.md is always loaded —
fixing only the chapter would have left the defect on the more-read
surface. The chapter gains a bounding bullet with the citation; the
distilled line gains the scope inline.

The four-part record is deliberately untouched. `keep:"all"` is still
what the harness sends on every thinking-enabled request; what narrows
is the billing scope downstream of it, which is upstream's rule applied
to retained blocks, not the wire observation.

## Thread 2 — split: quote faithful, prescription unactionable

The thread's headline says the section presents `max_tokens` as a total
spend cap. It does not invent that framing — `thinking.md:688` reads
verbatim: "**You need a hard ceiling on spend:** use `max_tokens`.
Effort is soft guidance; `max_tokens` is a strict limit" (fetched raw
2026-08-03, HTTP 200, 52,769 bytes). The section quoted the second
sentence and paraphrased the first. Retracting that would retract
upstream.

The thread's second half is right and is the real defect. The section
went on to prescribe that "a lane needing a hard ceiling on spend sets
the output cap rather than pinning effort lower" — an instruction to a
plugin author at a surface where no such field exists. Verified against
the documented field lists: subagent frontmatter carries `model`,
`effort`, and `maxTurns` (an agentic-turn bound, not a token one) with
no token cap; skill frontmatter carries `model` and `effort` and not
even `maxTurns` (sub-agents.md 95,655 bytes, skills.md 73,907 bytes,
both fetched raw 2026-08-03, HTTP 200). `max_tokens` belongs to the API
request a plugin does not assemble.

So the fix extends the quotation to include upstream's own bullet header
— making the attribution visible in the bytes rather than leaving the
framing looking self-authored — and then states what the limit actually
bounds (one response's output, thinking included, saying nothing about
input, cache reads, or an agentic lane's further requests) and that no
plugin surface reaches it. The rule the section can honestly give is
narrower than the quote: lower `effort` and know it is guidance; a hard
cap comes from whoever builds the request.

`maxTurns` is named with both qualifiers it needs — turns not tokens,
subagent-only — rather than offered as a substitute ceiling, since an
unqualified mention would ship a fresh imprecision inside a fix for one.

The absence is stated as what the documented field lists do carry, and
the paragraph's recheck trigger is extended to fire if either list
gains a token cap.

## Verification

markdownlint 0 errors across 36 files; `check-changed-skills.sh
origin/main` PASS, 0 errors, 8 warnings on fable-5 all pre-existing and
line-shifted only. CHANGELOG folded into unreleased playbooks 0.6.4;
the philosophy edit is repo-scope docs and stays out of the plugin
changelog, matching how 0.6.4 already handles that file.

No linked issue

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 55s —— View job


Security review — PR #1887

  • Gather context (diff, changed files)
  • Review each changed file for security issues
  • Post findings

Scope reviewed (git diff 90d526d..956a025, the PR's 4 commits, matching the 6 files listed for this PR):

  • docs/PLUGIN-PHILOSOPHY.md — prose additions to the Effort tiers section (citations, upstream quotes)
  • plugins/playbooks/.claude-plugin/plugin.json — version bump 0.6.30.6.4 only
  • plugins/playbooks/CHANGELOG.md — changelog prose
  • plugins/playbooks/skills/fable-5/SKILL.md — one added bullet under core doctrine; frontmatter unchanged
  • plugins/playbooks/skills/fable-5/context/context-economy.md — new "thinking cost" doctrine section (prose + citation links)
  • plugins/playbooks/skills/fable-5/context/model-adaptation/opus-5.md — prose rewording, swapping campaign-internal references for live upstream URLs

Findings: none. This is a pure documentation/doctrine change — markdown prose, citation links to platform.claude.com/code.claude.com, a semver bump, and changelog text. No code execution surface is touched: no scripts, no GitHub Actions workflows, no hooks, no MCP server config, no allowed-tools/frontmatter permission fields, no secrets or credential handling. None of the categories in scope for this review — injection surfaces, auth/access-control gaps, dangerous Actions patterns (pull_request_target/workflow_run, script injection via the github context), permission-widening, or supply-chain/pin changes — apply to any file in this diff. This confirms the same conclusion reached in the earlier automated security-review pass on this PR (job 30837609734).

Note: the two Codex bot review comments on this PR (compaction bounding the thinking-cost claim; max_tokens not being a total spend cap) are doctrine-accuracy points, not security findings, and are out of scope for this review lane.

@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 29s —— View job


Reviewing PR #1887 (code-review lane)

  • Gather context (diff, changed files, CLAUDE.md/REVIEW.md rules)
  • Understand the request (code review, this PR)
  • Review each changed file for correctness, doc-fidelity, and maintainability
  • Check CLAUDE.md fresh-docs mandate compliance
  • Post findings

Summary

Docs-only PR (playbooks 0.6.3 → 0.6.4), no code/config-schema/hook-contract surface touched, so CLAUDE.md's fresh-docs mandatory-WebFetch gate doesn't apply (SKILL.md/context-chapter prose bodies and a plugin.json semver bump are prose edits, out of that mandate's contract-surface scope). I diffed this PR's actual commit range (90d526d..956a025, matching the stated 6 files / +107/-7) and read every changed file at HEAD.

This review is against the latest commit (956a025), which lands after the two prior automated reviews in this thread. It specifically addresses both P2 findings @chatgpt-codex-connector posted against c34659e:

  • Compaction bound (context-economy.md#L22) — new bullet "Count from the last history reset, not from the first turn" now explicitly scopes the retention/re-billing claim to the current uncompacted window, citing the harness's own "Compacting the conversation" page for why a summary stops the re-send. The distilled SKILL.md line (SKILL.md#L119) was updated in lockstep ("count it from the last history reset: compaction replaces that history with a summary, so the total does not carry across one"), so the two surfaces don't drift back apart. This resolves the concern correctly rather than just hedging it.
  • max_tokens scope (PLUGIN-PHILOSOPHY.md#L702-L717) — the section now explicitly narrows the upstream "hard ceiling on spend" quote to what it actually bounds ("binds per response and constrains neither input and cache reads nor the further requests an agentic lane makes"), and adds the "no plugin surface reaches it" point (neither skill nor subagent frontmatter exposes a token-cap field). The final stated rule is correctly narrowed to "a lane wanting to spend less lowers effort knowing it is guidance, and a hard cap has to be imposed by whoever builds the request" — matching exactly what Codex asked for.

No new correctness issues found beyond what the two prior review passes already covered (EC-1 observation/inference separation, the opus-5.md deferral fix, CHANGELOG/version parity — all still hold at this commit; I re-checked plugin.json 0.6.4 against the new ## [0.6.4] entry and it's still in sync).

Minor, non-blocking: the verification record and both new PLUGIN-PHILOSOPHY.md paragraphs are dense multi-claim blocks, consistent with this doc corpus's established style elsewhere (already noted in the prior review pass) — not a new issue introduced by this commit.

Note on security: per REVIEW.md's lane split, security findings are left to the dedicated security-review lane (already posted "no issues found" for this diff in this thread).

I could not run markdownlint-cli2 or the repo's parity-check scripts in this sandbox (no elevated shell approval available this run), so this is a manual read against the repo's lint config rather than a live run — the commit messages' own reported results (0 errors, parity green) are consistent with what I found by hand, but a maintainer may want CI confirmation.

kyle-sexton added a commit that referenced this pull request Aug 3, 2026
…undary in the docs profile (#1888)

Lands two adopted Sitting-2 decisions in the anthropic-docs publisher
profile — the campaign's consumer-facing tag-selection doctrine.
`knowledge` 0.10.16 -> 0.10.17.

## PA-M — the harness-surface definition

New bullet appended to the near-miss rule: **a harness surface is a
surface a user can reach**, with three non-falsifying sub-shapes that
harness-doc text can take without establishing one. Both the definition
sentence and sub-shape (3) carry explicit `[campaign-owned amendment]`
labels — the record shows the campaign making the selection-over-support
choice, not inheriting an adjudication. Sub-shape (3) rests on its
single attested instance (`env-vars.md:394`, a retry/fallback row) and
carries its own over-broadening boundary: a doc line describing some
*other* model's tier fails the sub-shape's own test.

The landing site was derived three independent ways: the profile already
uses "harness surface" as its negative-claim term (`:34`, `:54`); the
adopted row's own text says "write into the profile"; and the 0.10.16
CHANGELOG deliberately held this exact question (J-12) for the
dispositions interview this answers.

## PA-V — the bare-name boundary

The `cc-applicable`/`mixed` boundary bullet now carries the fourth API
surface (**model ID**) and the negative half the profile never stated:
**bare names are not API surfaces** — a product name, display name, or
docs-path slug never by itself triggers `mixed`. Ratified from the de
facto standard 15+ rows already stood on (cross-vendor retag applied
in-slice). Deliberately excluded: a `[campaign-owned amendment]` label
(this ratifies an evidence-carried standard, not a campaign-invented
definition) and "feature names" (present only in one slice's wording,
not the adopted row — widening the enumeration would exceed the adopted
authority).

## Verification

Both commits independently verified by a second model with the
implementer's rationale withheld: the PA-M landing audited across
landing-site derivation, amendment fidelity (verbatim vs the adopted
blockquote), self-fire (no profile or checklist conflict; no live
campaign artifact violates the definition), and mechanics; the PA-V text
was *authored* by that verifier from the adopted row and applied
verbatim, with the producer re-confirming the authority citations at the
bytes before editing. The one enumeration of the API-surface list
repo-wide is this bullet — no drift introduced. markdownlint 0 errors;
CHANGELOG newest-first, both entries folded into the unreleased 0.10.17.

Downstream, already discharged against these rules: the four slice-local
`api-only` ratifications (memory-tier) now cite the landed definition
and route their three disclosed near-miss hits per these bullets.

No linked issue

## Related

- Sitting 2 of the doc-corpus decision block, ADOPTED 2026-08-03 after
adversarial validation (21/21 CONFIRMED); PA-M ordered first carrying
its amendment flags, exactly as the adoption block specifies.
- Siblings this session: #1881, #1882, #1884, #1885, #1887 (open);
standards#311 + ADR-0002; dotfiles#394, #399 (open).
- The J-12 hold this closes: `knowledge` 0.10.16's CHANGELOG (PR #1879).

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ied; drop a duplicated pointer

Self-review of 956a025 found two defects in the bytes that commit
shipped. Both are in text its thread replies quote, so they are fixed
before the replies are allowed to stand.

## The absence claim outran its evidence

956a025 bolded "And no plugin surface reaches it" about `max_tokens`.
What was actually verified is two documented frontmatter field lists.
"No plugin surface" is a universal over everything a plugin ships —
including `hooks`, which both of those field lists expose and which is
arbitrary code. That is the exhaustiveness-from-a-null-result shape this
repo refuses, committed inside a fix whose whole subject is a claim
outrunning its surface.

Narrowed to "no documented frontmatter field reaches it", which is what
the two citations support. The trailing reasoning is scoped the same
way: the parameter belongs to the API request "that the lane-pin surface
does not assemble", not one "a plugin does not assemble".

The commit message for 956a025 already stated the correct, narrower
form. Only the shipped bytes and the thread reply carried the absolute.

## The bounding bullet re-stated a rule two sections down

Its closing sentence — the reset is a cost event, so externalize before
one — is "Externalize conclusions when they stabilize" line 55, which
fires on exactly that trigger. The bullet directly above already routes
there by name, so the sentence bought a duplicate that can drift and
nothing else. It is the residue class c34659e stripped one commit
ago. Removed; the bounding bullet is complete without it.

## Verification

markdownlint 0 errors across 36 files; `check-changed-skills.sh
origin/main` PASS (0 errors, 8 pre-existing fable-5 warnings).
`check-changelog-parity.sh` run in all three modes — `--check`,
`--check-bump origin/main`, `--check-order` — all pass, confirming the
scope call in 956a025: no version bump is implied and the repo-scope
philosophy edit correctly stays out of the plugin changelog.

No linked issue

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 3s —— View job


Security review — PR #1887

  • Gather context (git diff 90d526d..HEAD, matching the PR's stated 6 files / +107/-7)
  • Review each changed file for security issues
  • Post findings

Scope reviewed (base 90d526d → head b53ae48, this PR's full diff):

  • docs/PLUGIN-PHILOSOPHY.md — prose additions to Effort tiers (upstream quotes, citation links)
  • plugins/playbooks/.claude-plugin/plugin.json — version bump 0.6.30.6.4 only, no other fields touched
  • plugins/playbooks/CHANGELOG.md — changelog prose
  • plugins/playbooks/skills/fable-5/SKILL.md — one added bullet under core doctrine; frontmatter unchanged
  • plugins/playbooks/skills/fable-5/context/context-economy.md — new "thinking cost" doctrine section (prose + citations)
  • plugins/playbooks/skills/fable-5/context/model-adaptation/opus-5.md — prose rewording, campaign-internal references swapped for live upstream URLs

This pass also covers the newest commit (b53ae48, pushed since the prior security-review pass on this thread), which is a self-correction narrowing an absence claim and removing a duplicated pointer — both edits are prose-only, confined to docs/PLUGIN-PHILOSOPHY.md and context-economy.md.

Findings: none. This remains a pure documentation/doctrine change. Checked specifically for this PR's diff:

  • No code execution surface. No scripts, no GitHub Actions workflows, no hooks, no MCP server config.
  • No contract-surface change. SKILL.md frontmatter (user-invocable, disable-model-invocation, etc.) and plugin.json's non-version fields are untouched — only the version string and prose bodies changed.
  • Link/citation audit. Every URL added across the full diff resolves to platform.claude.com or code.claude.com (first-party Anthropic docs) — no new external domains, no unvetted third-party links: code.claude.com/docs/en/model-config, .../prompt-caching#changing-effort-level, .../prompt-caching#compacting-the-conversation, .../skills#frontmatter-reference, .../sub-agents#supported-frontmatter-fields; platform.claude.com/docs/en/build-with-claude/effort, .../thinking#thinking-and-effort, .../thinking#thinking-and-the-context-window, .../thinking-steering-and-cost#pricing, .../thinking-steering-and-cost#prompt-caching.
  • No secrets/credentials handling, no injection surfaces (command, SQL, path, template) — nothing in this diff constructs a command, path, or template from any input.

None of the categories in scope for this lane — dangerous Actions patterns (pull_request_target/workflow_run, script injection via the github context), permission-widening, or supply-chain/pin changes — apply, since no workflow, script, or dependency file is touched. This confirms the same conclusion reached by the three earlier automated security-review passes on this thread (jobs 30837609734, 30838716846, and now this one), extended to cover the latest commit.

@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 23s —— View job


Reviewing PR #1887 (code-review lane) — delta review of b53ae48

  • Gather context (diff, changed files, CLAUDE.md/REVIEW.md rules)
  • Understand the request (code review, this PR)
  • Review the delta since commit 956a025 (already reviewed in this thread) for correctness, doc-fidelity, and maintainability
  • Check CLAUDE.md fresh-docs mandate compliance
  • Post findings

Summary

This PR had already been reviewed twice by this lane (at 956a025). This pass covers only the new commit, b53ae48, which is itself a self-correction of two precision defects in 956a025's shipped text (2 files, +7/-7).

No correctness issues found. Both fixes are accurate and land cleanly:

  • docs/PLUGIN-PHILOSOPHY.md#L706 — narrows "And no plugin surface reaches it" to "And no documented frontmatter field reaches it." The prior wording was a universal claim over every plugin surface, but what was actually verified is two documented frontmatter field lists (subagent, skill) — hooks is a plugin surface those lists don't cover and is arbitrary code, so the broader claim outran its evidence. Confirmed via grep that no other copy of the old absolute phrasing survives elsewhere in the corpus. The trailing reasoning was rescoped in lockstep ("the API request that the lane-pin surface does not assemble," replacing "a plugin does not assemble"), so the sentence stays internally consistent rather than just swapping the headline clause.
  • plugins/playbooks/skills/fable-5/context/context-economy.md#L22 — drops the trailing sentence about externalizing before a history reset. That instruction is a restatement of the existing "Externalize conclusions when they stabilize" rule the same bullet already points to by name (context-economy.md:50-52), so the removal is a genuine duplicate cut, not a loss of coverage.
  • Version/changelog scope: confirmed this commit touches only the two doc files (git show --stat 956a025..b53ae48) — CHANGELOG.md and plugin.json are untouched, consistent with the commit message's claim that this is a repo-scope philosophy fix with no version bump implied.
  • CLAUDE.md fresh-docs mandate: not triggered — this commit only rewords already-cited, already-verified upstream quotes; it introduces no new external claims or contract-surface changes.

Environment note: markdownlint-cli2 required shell approval I wasn't able to grant in this sandboxed run, so I couldn't execute it directly — I verified formatting by reading the changed lines in context instead. The commit message's own reported result (0 errors across 36 files) is consistent with what I found by hand, but a maintainer may want CI confirmation.

Note on security: per REVIEW.md's lane split, security findings are left to the dedicated security-review lane (this diff is prose-only — no code, hooks, or config-schema surface touched).

@kyle-sexton
kyle-sexton merged commit 05a571c into main Aug 3, 2026
32 checks passed
@kyle-sexton
kyle-sexton deleted the docs/corpus-doc-bundle2 branch August 3, 2026 19:19
kyle-sexton added a commit that referenced this pull request Aug 3, 2026
…uthority, consistency rationale (#1893)

## Summary

DOC bundle 3 of the doc-corpus application campaign — three
evidence-forced rows, one playbooks bump (0.6.5 → 0.6.6):

- **Verification surfaces table** (`fable-5/context/verification.md`):
six-row map of the built-in verification surfaces to their canonical
pages — spanning the harness, the managed Code Review service, and the
Managed Agents platform API — including the one source item nothing
implements (spec validation, shipped as a dated absence with a recheck
trigger). Closes with the invocation/plan/version caveats that make
"built-in" not mean "automatic".
- **Channel-authority routing rule** (`fable-5/context/calibration.md` +
one SKILL.md distillation line): the reference page that owns a term
defines it; a vendor post corroborates — written once, never revised,
and what it omits is invisible from inside it. Worked instance: the
glossary's verification-loop entry carries the
prerequisite-for-`/goal`/unattended-runs/dynamic-workflows fact a
post-length definition drops. The paired glossary-row half of this row
targets a graduated-corpus surface that does not exist yet and is
deliberately unlanded.
- **Consistency rationale for decomposing**
(`fable-5/context/orchestration.md`): output consistency recorded beside
context economy as the second rationale — fewer inconsistency errors
across scaled workflows — with the tiebreak consequence,
mechanism-agnostic, and deliberately in exactly one place (no SKILL.md
line).

All canonical URLs and anchors re-verified live 2026-08-03 in both
raw-md and rendered forms. Independently verified (fresh-context,
rationale withheld): FIX-FIRST with three one-line wording findings, all
applied in `8786a772ec`; no blockers.

No linked issue

## Related

- #1885, #1887 — DOC bundles 1 and 2 (same evidence-forced class and
delivery shape)
- #1891 — the playbooks rehost this bundle's version bump follows (0.6.5
→ 0.6.6)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_011UarawwEnZQu7cB6i7WatJ

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 3, 2026
…ster (#1895)

## Summary

Repopulates the docpage-digest Anthropic profile's doc queue with the
doc-corpus campaign's adopted enqueue roster (knowledge 0.10.18 →
0.10.19):

- **14 pages queued across seven groups** — thinking troubleshooting
first (on the corrected rationale: the harness carries a parallel
troubleshooting surface, so the page's transfer is demonstrated, not
conjectured), then the last thinking page, the retention/ZDR slice (one
slice, two lanes, three pages — org-level policy, the one queued topic
with compliance weight), one Agent SDK page with the wider-scope
boundary stated in the group heading, the models freshness pair, three
Claude Code companion docs in digestion order, two blog posts, and one
engineering post (the property admitted in 0.10.18).
- **5 pages deferred with triggers** — each carrying its named re-arm
condition, including a context-window deferral that states its
discharged check's result rather than leaving the trigger dormant.
- The retention/ZDR enqueue is recorded as still open to an owner veto;
the engineering entry's contingency is disclosed as discharged (its
prerequisite property edit was the 0.10.18 merge).

Independently verified (fresh-context, rationale withheld): SHIP, with
the two findings (deferred-block position; contingency disclosure)
applied in `6395841eb3` and confirmed CLOSED. All 14 queued URLs return
HTTP 200 live; queue counts recounted at the bytes by producer and
verifier independently.

No linked issue

## Related

- #1892 — the property admission and artifact-target amendment this
queue builds on (0.10.18)
- #1887 — DOC bundle 2, where the queue's prior entries were retired on
slice completion

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_011UarawwEnZQu7cB6i7WatJ

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 4, 2026
…s, residual-risk footer (#1898)

## Summary

DOC bundle 4 of the doc-corpus application campaign — the three
unblocked rows (playbooks 0.6.6 → 0.6.7; knowledge 0.10.19 → 0.10.20):

- **Point at a per-model matrix; never copy one**
(`fable-5/context/calibration.md` + one SKILL.md line): a third
source-grading axis (volatility) beside the surface and channel axes —
point at the vendor page that owns a per-model table; a stated matrix
carries a re-check trigger naming the next model release; table presence
is not reachability where you run. Worked instance corrected at the
bytes: Claude Mythos 5 is a known registry model with full gating
machinery and still not selectable — exactly one non-null provider id
beside **seven** null siblings (the earlier "all eight null" figure was
schema-disproven; the correction and its reason are in the CHANGELOG).
- **Archive-reading conventions** (knowledge profile): a dated entry is
not a content-change signal (two byte-identical entries five days apart
prove it); absence of bold does not prove absence of change — deltas
come from diffing entries, never reading markup; note a source artifact
at the row, never silently repair it (with the one reader-facing
exception stated). Recheck against the UNC-1 ruling confirmed no premise
moved — the ruling touched tags, these are page properties.
- **Residual-risk footer** (knowledge profile): the
reduce-hallucinations page's own hedge, quoted verbatim (byte-compared
live), scope unbroadened — hallucinations only, no validator named —
with the cite-never-restate rider for graduated chapters.

Fourth commit removes a cross-plugin dependency claim and an
internal-record pointer from the knowledge CHANGELOG (self-caught;
disclosed).

Independently verified (fresh-context, rationale withheld): SHIP, zero
findings — EC-3 seven-count, UNC-1 no-retag ruling,
byte-identical-entries evidence, and the footer byte-compare all
re-derived by the verifier.

No linked issue

## Related

- #1885, #1887, #1893 — DOC bundles 1-3 (same campaign, same delivery
shape)
- #1895 — the doc-queue repopulation this bundle's knowledge bump
follows (0.10.19 → 0.10.20)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_011UarawwEnZQu7cB6i7WatJ

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant