Plugin: session-flow · Categories: hardcoded repo coupling (1), missing externalization (2)
Source: work-readiness sweep (read-only audit vs docs/PLUGIN-PHILOSOPHY.md + docs/MIGRATION-PLAYBOOK.md)
Findings
plugins/session-flow/reference/topic-docs.md:7-8 — https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/conventions/topic-docs/README.md
reference/topic-docs.md:32-38 — "The contract owns both … apply its 'Resolution order' and 'Runtime guards' sections as written"
plugins/session-flow/CHANGELOG.md:3-11 — 0.10.1 deliberately removed the local restatement of the resolution order + runtime guards
Why it breaks agnosticism
An installed plugin cannot reach docs/conventions/topic-docs/ (not bundled under ${CLAUDE_PLUGIN_ROOT}), so authoritative placement resolution depends on fetching an org/repo/main-branch-coupled URL at runtime — coupling runtime behavior to the publisher's repo name, the branch, and the path staying put, plus a network dependency. Cuts against PLUGIN-PHILOSOPHY ("runtime behavior must not depend on … repository names") and the cache-isolation rule. Mitigation: handoff/SKILL.md:29-37 and context/structure.md:110-166 still restate the load-bearing essentials, so the common path works offline; the exposure is the "apply the contract as written" instruction leaning on the external fetch.
Related shape: toolchain header propagation (#410) — both stem from how the fleet cites the convention SSOT; fix pattern should be decided once.
Fix direction
Bundle the load-bearing contract subset (resolution order + runtime guards) inside the plugin via ${CLAUDE_PLUGIN_ROOT}, synced from upstream through the marketplace's own sync path, and point the binding doc at the bundled copy. If the URL stays as provenance, pin to a tag/commit rather than main and label it a provenance link, not a runtime dependency.
Plugin:
session-flow· Categories: hardcoded repo coupling (1), missing externalization (2)Source: work-readiness sweep (read-only audit vs docs/PLUGIN-PHILOSOPHY.md + docs/MIGRATION-PLAYBOOK.md)
Findings
plugins/session-flow/reference/topic-docs.md:7-8—https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/conventions/topic-docs/README.mdreference/topic-docs.md:32-38— "The contract owns both … apply its 'Resolution order' and 'Runtime guards' sections as written"plugins/session-flow/CHANGELOG.md:3-11— 0.10.1 deliberately removed the local restatement of the resolution order + runtime guardsWhy it breaks agnosticism
An installed plugin cannot reach
docs/conventions/topic-docs/(not bundled under${CLAUDE_PLUGIN_ROOT}), so authoritative placement resolution depends on fetching an org/repo/main-branch-coupled URL at runtime — coupling runtime behavior to the publisher's repo name, the branch, and the path staying put, plus a network dependency. Cuts against PLUGIN-PHILOSOPHY ("runtime behavior must not depend on … repository names") and the cache-isolation rule. Mitigation:handoff/SKILL.md:29-37andcontext/structure.md:110-166still restate the load-bearing essentials, so the common path works offline; the exposure is the "apply the contract as written" instruction leaning on the external fetch.Related shape: toolchain header propagation (#410) — both stem from how the fleet cites the convention SSOT; fix pattern should be decided once.
Fix direction
Bundle the load-bearing contract subset (resolution order + runtime guards) inside the plugin via
${CLAUDE_PLUGIN_ROOT}, synced from upstream through the marketplace's own sync path, and point the binding doc at the bundled copy. If the URL stays as provenance, pin to a tag/commit rather thanmainand label it a provenance link, not a runtime dependency.