Platform Triage Ledger
Per-minor re-triage of native Claude Code capabilities against RDF’s own mechanisms — one dated block per minor release, newest first below the Conventions section. /r-ship Stage 1d greps the first dated block for the target release’s MAJOR.MINOR; a minor release without a current block is blocked (patch releases skip the check). Origin: docs/specs/2026-09-02-platform-alignment-spike-design.md §6 (D4).
Conventions
How to add a block at the next minor
Before the next minor ships, re-run the eight checklist lines of the newest block against current platform docs (skills.md, agent-teams.md, workflows.md, plugins-reference, etc.), then insert a new ## <MAJOR.MINOR> — <date> block immediately after this Conventions section — ahead of every dated block, which becomes history below it. Fill in the same five columns and update or carry forward the Product rulings. /r-ship Stage 1d greps only the first dated block, so the new block must be prepended, not appended.
Next minor — platform alignment follow-ons
Deferred from the spike’s Go/No-Go summary (spike §8):
- D1 — Workflow-backed
/r-buildbehind a flag. Fix thetiers.mdbugfix/min()contradiction, define a planStatus:form, add adeploy.shworkflows dir, a/r-build --workflowarg (with BATS coverage), an A/B run on one real plan, and an indicator-list contract. - D2 — trigger-eval suite on
claude plugin eval. The 3.8 re-triage foundclaude plugin evalGA (v2.1.269+), so D2 skips the local harness: anevals/*/case.yamlsuite (37 positive + ~10 negative cases) run byclaude plugin eval, a/r-ship1e line, and an optional CI job.
3.8 — 2026-09-24
Re-run against Claude Code 2.1.280 docs (workflows.md, agent-teams.md, skills.md, plugins-reference, memory.md, plugin-evals.md, sub-agents.md, model-config.md, env-vars.md). Four rows are new this minor because 3.8 routes model/effort per agent and keys session state on the harness session id.
| Line | Decision rule | Verdict | Evidence | Re-check trigger |
|---|---|---|---|---|
| Workflows | absorb when GA on the user’s plan and the RDF mechanism is a loop with no user input | absorb (gated spike, D1 — still deferred) | workflows.md: “available on all paid plans, with Anthropic API access, and on Amazon Bedrock, Google Cloud’s Agent Platform, and Microsoft Foundry” (unchanged) | D1’s A/B evidence lands |
| Agent Teams | absorb only when non-experimental, -p capable, worktree-isolated, nested | keep dispatcher (3.7 first case stands) | agent-teams.md: still experimental and off by default; “In non-interactive mode with the -p flag … Claude doesn’t spawn teammates”; “teammates cannot spawn their own teammates” | experimental flag drops, -p support lands, or per-teammate worktree isolation ships |
| Skills frontmatter | absorb keys the CC adapter can emit from skill-meta.json | keep (absorbed in 3.7; no new keys since 2026-09-02). Skill model/effort last one turn, so Fable for /r-spec//r-plan is a session-start advisory, not skill frontmatter | skills.md frontmatter reference | CC’s skill-frontmatter schema changes |
| Plugin components | absorb a component only when an RDF mechanism maps 1:1 | keep | plugins-reference: “Plugin components include skills, agents, hooks, MCP servers, LSP servers, and monitors” (unchanged) | a new plugin component ships with an RDF-equivalent mechanism |
| Auto-memory | retire ~/.rdf/lessons-learned.md only when a native cross-project store exists | keep | memory.md: “Auto memory is machine-local. All worktrees and subdirectories within the same git repository share one auto memory directory” | Anthropic ships a native cross-project memory store |
.claude/rules/ + @import | verify each minor that cc_generate_rules output still loads | keep as-is | memory.md (no behavior change); tests/rules-deploy.bats green | rules-deploy.bats regresses or CC’s @import behavior changes |
| Eval availability | switch the trigger-eval runner to claude plugin eval when the probe stops printing “early access” | trigger fired — claude plugin eval is GA (v2.1.269+); D2 is re-scoped to a claude plugin eval suite, no local harness (not built this release) | plugin-evals.md: requires “v2.1.269 or later”; the early-access message means “Your build predates general availability”; claude plugin eval --help on 2.1.280 has no early-access wording | D2 lands, or the command reports “currently unavailable” (switched off server-side) |
Hazard CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS | a named subagent launches as a teammate when the flag is set | document “unset with RDF” | agent-teams.md (unchanged) | RDF intentionally wants Agent Teams semantics for a named subagent |
Subagent model / effort (new) | absorb per-agent routing when the adapter can emit it from agent-meta.json | absorbed this release — model/effort per agent plus effort variants (rdf-engineer-focused, rdf-reviewer-challenge), since the Agent tool takes a per-call model but no effort | sub-agents.md: effort “Overrides the session effort level. Default: inherits from session”; model-config.md: frontmatter effort overrides “the session level but not the environment variable” | the Agent tool gains a per-call effort (variants become unnecessary) |
| Opus 5.5 effort default (new) | detect and advise; never write user settings | doctor harness scope WARNs | model-config.md: Opus 5.5 defaults to medium; “a top-level effortLevel in your user settings file doesn’t count for Opus 5.5” | the default or the precedence changes |
omitClaudeMd (new) | absorb for agents that take everything from the dispatch payload, once measured | defer to context-economy spec B | sub-agents.md: skips user, project, and local CLAUDE.md; managed policy still loads; v2.1.271+ | spec B lands |
CLAUDE_CODE_SESSION_ID (new) | key session-scoped state on the harness session id; mint only outside Claude Code | absorbed this release (rdf_session_init) | env-vars.md: “Set automatically to the current session ID in Bash and PowerShell tool subprocesses, hook command subprocesses”; matches the hook session_id; updated on /clear; --resume <id> keeps it, --continue may get the startup ID | the variable’s scope or semantics change |
Product rulings
- No dual
/r-buildpath this minor — carried from 3.7 (D1 still unbuilt). - No
disable-model-invocationon lifecycle skills — carried from 3.7. - D4 gate strength: minor-only blocking — carried from 3.7.
- Routing lives in
agent-meta.json, not in dispatch calls. Canonical text dispatches by agent name; no per-callmodel:override (3.8). Effort that differs by mode is a variant agent, not a parameter.
3.7 — 2026-09-02
| Line | Decision rule | Verdict | Evidence | Re-check trigger |
|---|---|---|---|---|
| Workflows | absorb when GA on the user’s plan and the RDF mechanism is a loop with no user input | absorb (gated spike, D1 — deferred to next minor) | workflows.md GA; spike §3 | D1’s A/B evidence lands (see follow-ons below) |
| Agent Teams | absorb only when non-experimental, -p capable, worktree-isolated, nested | keep dispatcher (first case, below) | agent-teams.md; agent-teams-research.md:118-126 | experimental flag drops, -p support lands, or per-teammate worktree isolation ships |
| Skills frontmatter | absorb skills/<name>/SKILL.md + disable-model-invocation on side-effect commands + allowed-tools when the CC adapter can emit them from skill-meta.json | absorbed this release (sibling spec 2026-09-02-skills-native-adapter-consolidation-design.md, Phases 1-6) | skills.md “Custom commands have been merged into skills” | CC’s skill-frontmatter schema changes |
| Plugin components | absorb a component only when an RDF mechanism maps 1:1 | keep (only Workflows is a 1:1 candidate, tracked as D1) | plugins-reference component table | a new plugin component ships with an RDF-equivalent mechanism (MCP/LSP/monitors/output-styles currently have none) |
| Auto-memory | retire ~/.rdf/lessons-learned.md only when a native cross-project store exists | keep | no native cross-project store found (spike §6) | Anthropic ships a native cross-project memory store |
.claude/rules/ + @import | already absorbed (3.4.0 --rules) — verify each minor that cc_generate_rules output still loads | keep as-is | adapters/claude-code/adapter.sh:96,140, tests/rules-deploy.bats | any minor where rules-deploy.bats regresses or CC’s @import behavior changes |
| Eval availability | switch the trigger-eval runner to claude plugin eval when the probe stops printing “early access” | local harness (D2 — deferred to next minor) | spike §2 probe | claude plugin eval output drops “early access” |
Hazard CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS | a named subagent launches as a teammate when the flag is set, forming a team even when not asked | document “unset with RDF” | agent-teams.md | RDF ships a named-subagent workflow that intentionally wants Agent Teams semantics (none today) |
First case — Agent Teams vs dispatcher
Verdict: keep the dispatcher; do not absorb.
- “Agent teams are experimental and disabled by default” (
agent-teams.mdWarning); not enabled in this environment (spike §2). - “Spawning teammates also requires an interactive session. In non-interactive mode with the
-pflag … Claude doesn’t spawn teammates” — no headless/CI path; RDF’s D2 harness and/r-buildresume both need-p. - Shared working tree: “Two teammates editing the same file leads to overwrites” and worktrees are offered only as manual sessions “without automated team coordination”; RDF’s parallel path is worktree-isolated with a pre-commit scope hook (
r-build.md:232-253,273,state/git-hooks/pre-commit,plan-schema.mdRule 8). - Gate machinery is hook-only (
TeammateIdle/TaskCreated/TaskCompletedexit 2) — no engineer→QA→reviewer chain, no evidence grammar, no finding-resolution routing (dispatcher.md:457-536). - “No nested teams” and “Lead is fixed” contradict
/r-build→ dispatcher → engineer nesting (r-build.md:204-208). - “Task status can lag” is the exact failure the dispatcher’s status files exist to prevent.
Re-check triggers: the experimental flag drops, -p support lands, or per-teammate worktree isolation ships.
Product rulings
- No dual
/r-buildpath this minor. The Workflow prototype (docs/specs/support/rdf-build-workflow.prototype.js) stays an unwired artifact until A/B evidence exists — see D1 in the follow-ons below. - No
disable-model-invocationon lifecycle skills. Measured usage shows the pipeline model-invokes/r-build43×,/r-plan75×,/r-spec53×,/r-ship5×,/r-save25× (controller usage mining 2026-09-02: Skill-tool invocations across 10,453 Claude Code transcripts on the maintainer’s machine — not in the repo). Flagging themdisable-model-invocationwould remove them from Claude’s own suggestions — accepted as an AST03 risk (over-privileged skills, see spike §7) for now; revisit alongsideallowed-toolsscoping. - D4 gate strength: minor-only blocking.
/r-shipStage 1d blocks ax.y.0release without a current top block; patch releases (x.y.z,z>0) skip the check unconditionally.