Protocol version: 3
This protocol is the lifecycle interoperability profile for repo-facing plugins that participate in discovery, planning, implementation, verification, or handoff. The marketplace-wide topic-docs convention owns placement, tiers, resolution, slug rules, runtime guards, and lifecycle: https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/conventions/topic-docs/README.md. This profile owns only the cross-plugin artifact names and producer/consumer behavior.
Plugin userConfig is for personal, managed, or enable-time options. It is not a coordination surface
for repository artifacts. The tracked .claude/topic-docs.yaml concern file is the runtime authority;
consumer project instructions are an inference source when that file is absent.
Resolve the memory and contract slices through the topic-docs convention and the current plugin's
reference/topic-docs.md binding. An explicit topic argument may select the slug, but cannot introduce a
competing artifact root. The same slug names the topic in both tiers. Reject invalid roots or slugs using
the convention's guards rather than silently falling back to another location.
Lifecycle plugins exchange these public artifacts:
- Memory tier:
INDEX.md(the reserved per-slice index),EXPLORE.md,RESEARCH.md,<stage>-checklist.md,baselines/, raw captures, and scratch under<memory_dir>/<topic-slug>/. A topic slice is recursive: a decomposed slice holds child slices, and the same names are reserved at every depth. Entering a slice follows the convention's read-first binding (readINDEX.mdfirst; in an index-less leaf the sole artifact is the entry point), whose single home is the convention README's slice-tree section, cited here rather than restated. - Contract tier:
PRD.md,PLAN.md,design/, and distilledverification/manifests under<contract_dir>/<topic-slug>/whencontract_tier: branch. - In
contract_tier: local, contract kinds join the memory slice with the same relative layout. - Session handoffs and branch review reports use the concern-scoped homes defined by topic-docs, not a topic slice.
Each plugin remains horizontally decoupled: it may read artifacts by this public protocol, but it must not import sibling plugin internals or assume another plugin is installed. Namespaced skill invocation is optional and must degrade to a visible manual handoff when unavailable.
The canonical repository copy and every participating plugin's
reference/artifact-protocol.md copy must remain byte-identical. A breaking artifact-name or
producer/consumer change increments this protocol version and updates all copies and consumers together.
Placement changes belong to the versioned topic-docs convention, not this profile.
If an artifact is required, stop with a visible message naming the missing file and the skill that can produce it. If an artifact is helpful but optional, continue and surface a warning. Do not silently fall back to conversation memory when a fresh session is expected to resume from disk.