Skip to content

docs(docs-hygiene): fix inverted fork-mechanism attribution in audit-derivability rubric+evals#1058

Merged
kyle-sexton merged 1 commit into
mainfrom
docs/1053-fork-mechanism-wording-fix
Jul 22, 2026
Merged

docs(docs-hygiene): fix inverted fork-mechanism attribution in audit-derivability rubric+evals#1058
kyle-sexton merged 1 commit into
mainfrom
docs/1053-fork-mechanism-wording-fix

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

The audit-derivability spot-test protocol told the auditor to avoid context: fork "because a fork inherits this context's contaminated history." That inverts the mechanism and conflates two distinct things:

  • Skill-level context: fork (a SKILL.md frontmatter setting) starts BLANK — it does not inherit the invoking conversation.
  • Agent-tool fork subagent type (subagent_type: "fork") DOES inherit the parent conversation (and its model), so it is the mechanism that carries the contamination.

The stated reason was inverted; the recommendation (delegate the spot-test to a fresh-context, non-fork subagent) was and remains correct.

Fix

Re-point the contamination risk to the Agent-tool fork subagent type, and add a tight clause distinguishing it from skill-level context: fork, in all three sites where the inverted claim appeared:

  • plugins/docs-hygiene/skills/audit-derivability/SKILL.md (spot-test bullet)
  • plugins/docs-hygiene/skills/audit-derivability/context/rubric.md (spot-test protocol, step 1)
  • plugins/docs-hygiene/skills/audit-derivability/evals/evals.json (eval id 7: expected_output + one expectation)

The issue named only the rubric and evals; a sweep of the skill surfaced the same inverted claim in SKILL.md, which is fixed here too so the correction is complete rather than half-applied. Includes a patch version bump (0.8.40.8.5) and a matching CHANGELOG entry.

Verification

Confirmed the distinction against the official docs (fetched, not recited):

  • Skills — https://code.claude.com/docs/en/skills, "Run skills in a subagent": "Add context: fork to your frontmatter when you want a skill to run in isolation. The skill content becomes the prompt that drives the subagent. It won't have access to your conversation history."
  • Sub-agents — https://code.claude.com/docs/en/sub-agents, "What loads at startup": "Each subagent starts with a fresh, isolated context window… The exception is a fork, which inherits the parent conversation instead of starting fresh." And "Fork the current conversation": "A fork is a subagent that inherits the entire conversation so far instead of starting fresh… a fork sees the same system prompt, tools, model, and message history as the main session." Claude spawns one "by requesting the fork subagent type explicitly."

docs/PLUGIN-PHILOSOPHY.md's fresh-eyes section already carries the correct Agent-tool fork wording and was used as the phrasing model; it is intentionally not edited. evals.json re-validated as well-formed JSON after the edit.

Closes #1053

Related


Authored by Claude Code (Claude Opus 4.8). Session: https://claude.ai/code/session_01Mu8bLN896ia5AeWmGPqAUv

…derivability

The audit-derivability spot-test told the auditor to avoid `context: fork`
"because a fork inherits this context's contaminated history". That inverts the
mechanism: a skill's own `context: fork` frontmatter starts blank with no access
to the invoking conversation (code.claude.com/docs/en/skills, "Run skills in a
subagent": "It won't have access to your conversation history"). The mechanism
that actually inherits the conversation — and so carries the contamination — is
the Agent tool's `fork` subagent type (code.claude.com/docs/en/sub-agents:
"a fork, which inherits the parent conversation instead of starting fresh").

Re-point the contamination risk to the Agent-tool `fork` subagent type and add a
tight clause distinguishing it from skill-level `context: fork`, across SKILL.md,
context/rubric.md, and evals/evals.json. The fresh-context non-fork
recommendation is unchanged. Patch version bump + CHANGELOG entry.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@kyle-sexton kyle-sexton added the automated Opened by automation. label Jul 22, 2026
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

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


PR Review — docs(docs-hygiene): fix inverted fork-mechanism attribution

  • Gather context and understand the request
  • Read changed files
  • Verify the fork-mechanism distinction against the diff
  • Check version bump and CHANGELOG
  • Post review findings

Summary

This is a targeted documentation bug fix. The old wording at three sites told auditors to avoid context: fork because "a fork inherits this context's contaminated history" — but that description belongs to the Agent tool's fork subagent type, not to a skill's context: fork frontmatter, which starts blank. The recommendation (delegate the spot-test to a fresh-context, non-fork subagent) was always correct; only the technical justification was inverted.

Correctness

The attribution is accurate and cross-verified against docs/PLUGIN-PHILOSOPHY.md, which already correctly stated:

"A fork does not [start fresh]: it inherits the parent session's full conversation history, so it carries the same bias forward (subagents, verified 2026-07-18)."

All three corrected sites now read consistently:

SKILL.md line 56: The parenthetical (a skill's own context: fork frontmatter is the opposite: it starts blank) cleanly closes the ambiguity at the place where the mechanism is explained.

context/rubric.md lines 131–135: Same parenthetical in the protocol step where the reader is most likely to choose their subagent type.

evals/evals.json eval id 7: expected_output and the matching expectation both updated; the JSON is valid and the expectation still targets the right observable behavior.

Completeness

The issue named only rubric.md and evals.json. Sweeping SKILL.md was the right call — the same inverted claim appeared in the Establishing Derivability section (line 56), and leaving it there would have made the fix half-applied. All sites are now consistent.

Version and CHANGELOG

0.8.40.8.5 is an appropriate patch bump for a documentation bug fix. The CHANGELOG entry accurately describes what changed, what was wrong, and what was not changed (the recommendation).

One minor observation (not a blocker)

SKILL.md Hard Rules, line 111 — unchanged by this PR:

"Load-bearing or contested deletions are spot-tested by a fresh, non-fork subagent — never confirmed from this (contaminated) context, never by a fork."

The phrase "never by a fork" is unambiguous in intent (it bans the Agent-tool fork type, consistent with the contamination framing in the same sentence), but a first-time reader who hasn't yet reached line 56 might wonder whether this also bans skill-level context: fork. This is not incorrect — the detail with the parenthetical lives at the right place (line 56) — but a brief inline clarification here would make the Hard Rules section fully self-contained. Worth a follow-up, not a blocker.

Verdict

Approve. The fix is technically correct, minimal, consistent across all affected sites, and well-matched to a patch version bump. No new issues introduced.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

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


Security Review — PR #1058

  • Load tool
  • Fetch PR diff / read changed files
  • Assess security implications
  • Post findings

Findings

No security issues found.

All five changed files are purely documentation/text corrections with no executable surface:

File Change type
plugins/docs-hygiene/.claude-plugin/plugin.json Version bump 0.8.40.8.5 only
plugins/docs-hygiene/CHANGELOG.md Prose changelog entry
plugins/docs-hygiene/skills/audit-derivability/SKILL.md Text clarification of fork-mechanism attribution (line 56)
plugins/docs-hygiene/skills/audit-derivability/context/rubric.md Text clarification of fork-mechanism attribution (lines 131–135)
plugins/docs-hygiene/skills/audit-derivability/evals/evals.json Updated expected_output and one expectation string in eval id 7

None of the changes touch shell execution paths, workflow permissions, dependency pins, credential handling, MCP configurations, or GitHub Actions files. The !-prefixed dynamic context injections in SKILL.md (lines 12–13 — git branch --show-current and git status --porcelain | grep …) are pre-existing and unmodified by this PR, so they are out of scope here.

The correction itself is accurate: it properly distinguishes the Agent-tool fork subagent type (inherits parent conversation) from a skill's own context: fork frontmatter (starts blank). This makes the operational guidance more correct, which is directionally positive from a trust/misinformation-risk standpoint.

Nothing in this diff to flag.

@kyle-sexton

Copy link
Copy Markdown
Contributor Author

Post-green review pass (work-2 lane). CI fully green (25/25). Reviewed both bot passes — no review threads to resolve (no inline line-comments, just PR-level review/security-review reports).

Finding Classification Action
Overall fork-mechanism attribution fix VALID, addressed Approved by review bot; no changes needed
Security review No findings N/A
SKILL.md Hard Rules line 111 "never by a fork" reads ambiguous without line 56's parenthetical VALID, non-blocking (SUGGESTION-tier) Deferred — filed #1062

Flipping this PR to ready-for-review and handing off to /source-control:babysit-prs for ongoing watch.

@kyle-sexton
kyle-sexton marked this pull request as ready for review July 22, 2026 19:25
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

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


PR Review — docs(docs-hygiene): fix inverted fork-mechanism attribution

  • Gather context and understand the request
  • Read changed files and verify the diff
  • Check consistency across all corrected sites
  • Verify version bump and CHANGELOG
  • Post review findings

Summary

This PR corrects a documentation error where three sites told auditors to avoid `context: fork` because "a fork inherits this context's contaminated history" — a description that accurately describes the Agent tool's fork subagent type, not a skill's context: fork frontmatter (which starts blank). The recommendation (delegate to a fresh-context, non-fork subagent) was always correct; only the technical justification was wrong.

Correctness

All three affected sites are updated with the accurate distinction and are internally consistent:

SKILL.md line 56

Before: Never a \context: fork` — a fork inherits this context's contamination.`

After: Never the Agent tool's \fork` subagent type — that fork inherits this context's contamination (a skill's own `context: fork` frontmatter is the opposite: it starts blank).`

The re-attribution is correct and the parenthetical cleanly disambiguates the two mechanisms at the exact point where a reader is being told why to avoid one.

rubric.md lines 131–135

Before: must NOT be a \context: fork` (a fork inherits this context's contaminated history).`

After: must NOT be spawned as the Agent tool's \fork` subagent type — that fork inherits this context's contaminated history. (A skill's own `context: fork` frontmatter is the opposite: it starts blank, with no access to the conversation.)`

Same correction, appropriately more detailed in the protocol step where a reader is choosing which subagent type to spawn.

evals.json eval id 7

Both expected_output and the matching expectation at index 1 are updated. The distinction is consistently phrased and the JSON remains well-formed. The eval still targets the correct observable behavior.

Completeness

The fix sweeps all sites where the inverted claim appeared. The Hard Rules line at SKILL.md:111 ("never confirmed from this (contaminated) context, never by a fork") is unchanged — it is not incorrect in context, and the follow-up is already tracked as #1062.

Version bump and CHANGELOG

0.8.40.8.5 is the appropriate increment for a documentation-only fix. The CHANGELOG entry accurately names what changed, what the error was, and what was not changed (the recommendation).

Verdict

Approve. The fix is technically accurate, minimal, and applied consistently across all three sites. No new issues introduced.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

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


Security Review — PR #1058

  • Load tools
  • Fetch PR diff and read changed files
  • Assess security implications
  • Post findings

Findings

No security issues found.

All five changed files are purely documentation/text corrections with no executable surface:

File Change type
plugins/docs-hygiene/.claude-plugin/plugin.json Version bump 0.8.40.8.5 only
plugins/docs-hygiene/CHANGELOG.md Prose changelog entry
plugins/docs-hygiene/skills/audit-derivability/SKILL.md Text clarification of fork-mechanism attribution (line 56)
plugins/docs-hygiene/skills/audit-derivability/context/rubric.md Text clarification of fork-mechanism attribution (lines 131–135)
plugins/docs-hygiene/skills/audit-derivability/evals/evals.json Updated expected_output and one expectation string in eval id 7

None of the changes touch shell execution paths, workflow permissions, dependency pins, credential handling, MCP configurations, or GitHub Actions files. The !-prefixed dynamic context injections in SKILL.md (lines 12–13git branch --show-current and git status --porcelain | grep …) are pre-existing, unmodified by this PR, and read-only with bounded output (head -20).

The correction itself is accurate: it properly distinguishes the Agent-tool fork subagent type (inherits parent conversation) from a skill's own context: fork frontmatter (starts blank). This makes the operational guidance more correct, which is directionally positive from a trust/misinformation-risk standpoint.

Nothing in this diff to flag.

@kyle-sexton
kyle-sexton merged commit 05828a4 into main Jul 22, 2026
30 of 31 checks passed
@kyle-sexton
kyle-sexton deleted the docs/1053-fork-mechanism-wording-fix branch July 22, 2026 19:36
kyle-sexton added a commit that referenced this pull request Jul 23, 2026
…rk-mechanism reference (#1067)

## Summary

The `audit-derivability` Hard Rules bullet read "…never confirmed from
this (contaminated) context, **never by a fork**." That bare "a fork"
was technically correct — it means the Agent tool's `fork` subagent type
— but a reader landing in the Hard Rules section first (via search or a
partial read) had no local disambiguation and could wonder whether it
also bans a skill's own `context: fork` frontmatter. This makes the
bullet self-contained.

## Fix

Name the mechanism inline and distinguish it from skill-level `context:
fork`, matching the phrasing already established in the spot-test bullet
(added in #1058), so the two clarifications read as one consistent
voice:

> …never by the Agent tool's `fork` subagent type (a skill's own
`context: fork` frontmatter is unrelated — it starts blank).

## Verification

Before:
> - **Load-bearing or contested deletions are spot-tested by a fresh,
non-fork subagent** — never confirmed from this (contaminated) context,
never by a fork.

After:
> - **Load-bearing or contested deletions are spot-tested by a fresh,
non-fork subagent** — never confirmed from this (contaminated) context,
never by the Agent tool's `fork` subagent type (a skill's own `context:
fork` frontmatter is unrelated — it starts blank).

The Hard Rules bullet now carries the same Agent-tool-fork-vs-`context:
fork` disambiguation as the spot-test bullet, so it no longer depends on
the reader having reached that earlier line. Patch version bump (`0.8.5`
→ `0.8.6`) with a matching CHANGELOG entry.

Closes #1062

## Related

- #1062 — the deferred follow-up this addresses.
- #1053 — the original inverted-fork-mechanism issue.
- #1058 — the fix that added the spot-test bullet's disambiguation this
now mirrors in the Hard Rules section.
- #1082 — deferred follow-up (SUGGESTION, non-blocking): "opposite" vs
"unrelated" wording drift between line 56 and line 111, plus the Gotchas
bullet (~line 119) still lacking disambiguation.

---

Authored by Claude Code (Claude Opus 4.8). Session:
https://claude.ai/code/session_01Mu8bLN896ia5AeWmGPqAUv

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

Labels

automated Opened by automation.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: audit-derivability rubric/evals invert the context-fork inheritance claim

1 participant