Skip to content

session-flow: topic-docs placement contract resolved via hardcoded raw.githubusercontent URL instead of bundled copy #432

Description

@kyle-sexton

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-8https://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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: highSignificant impact, or blocks an imminent release; staff this cycle.status: readyTriaged, unblocked, and fully specified; eligible to pick up.wayfind: designWayfind decision item: design-space or domain-model decision; human in the loop.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions