Skip to content

architecture: fix broken ${CLAUDE_PLUGIN_DATA} default candidate-artifact path (deepening lens + eval #1) #1156

Description

@kyle-sexton

Parent

Source: handoff-inbox item 20260723-092605-architecture-improve-deepening-audit (producer: SW2030 consumer audit of architecture@0.3.5, full end-to-end deepening run).

What to build

Fix the broken default location for the durable candidate artifact in the deepening lens. actions/deepening.md Phase 2 currently instructs: "Default location: ${CLAUDE_PLUGIN_DATA}/deepening-candidates-<timestamp>.md", and evals/evals.json eval #1 bakes the same path into its expectation. Two independent defects, both verified against current official docs (fetched 2026-07-23):

  1. The token does not substitute in skill bodies. The skills reference ("Available string substitutions") enumerates the skill-content substitution set: ${CLAUDE_SESSION_ID}, ${CLAUDE_EFFORT}, ${CLAUDE_SKILL_DIR}, ${CLAUDE_PROJECT_DIR} + named args. ${CLAUDE_PLUGIN_DATA} / ${CLAUDE_PLUGIN_ROOT} are path substitutions for hook/monitor commands and MCP/LSP server configs only (plugins-reference "Environment variables"). A consumer following the default literally writes to an unexpanded literal ${CLAUDE_PLUGIN_DATA}/... directory.
  2. Wrong scope even if it resolved. ${CLAUDE_PLUGIN_DATA}~/.claude/plugins/data/{id}/ — plugin-global, shared across every project. Deepening candidates are per-codebase; a global dir collides candidates across projects.

The consumer audit observed the honor-project-convention override branch working correctly (it routed to the repo's own work-artifact convention), which masked the broken default in that run. Keep that branch unchanged.

Fix: change the default to a ${CLAUDE_PROJECT_DIR}-based per-project path (e.g. ${CLAUDE_PROJECT_DIR}/.claude/architecture/deepening-candidates-<timestamp>.md), update eval #1's expectation to match. Docs-verified, one line each. Semver + CHANGELOG per repo convention.

Acceptance criteria

  • actions/deepening.md Phase 2 default artifact path uses a substitution documented to work in skill markdown content (${CLAUDE_PROJECT_DIR}-based), per-project scoped
  • The honor-project-convention override branch is preserved unchanged
  • evals/evals.json eval chore: initialize marketplace scaffold #1 expectation matches the new default
  • No other ${CLAUDE_PLUGIN_DATA} references remain in skill markdown content of this plugin
  • Plugin version bumped + CHANGELOG entry

Blocked by

None — can start immediately.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: highSignificant impact, or blocks an imminent release; staff this cycle.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions