Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/conventions/ecosystem-commands/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog — ecosystem-commands convention

## 1.1.0 — 2026-07-15

Additive: optional `tool-pin` key — pinned tool versions keyed by tool name. When present, resolvers
warn if the installed version drifts from the pin (a pin typically mirrors the repo's own CI pin);
inert when absent. Bundled portable defaults never set it — pins are consumer-specific.

## 1.0.0 — 2026-07-12

Initial contract (design gate melodic-software/medley#1390):
Expand Down
5 changes: 5 additions & 0 deletions docs/conventions/ecosystem-commands/ecosystem.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@
"type": "string",
"description": "Cross-platform install guidance shown when a required tool is missing. Missing tools report skip, never failure."
},
"tool-pin": {
"type": "object",
"additionalProperties": { "type": "string", "minLength": 1 },
"description": "Pinned tool versions keyed by tool name. When present, resolvers warn if the installed version drifts from the pin (a pin typically mirrors the repo's own CI pin). Inert when absent."
},
"gates": {
"type": "array",
"description": "Repo-specific CI-parity gates beyond plain build/test/lint (lockfile drift, generated-artifact freshness, schema regeneration).",
Expand Down
2 changes: 1 addition & 1 deletion plugins/claude-config-audit/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "claude-config-audit",
"version": "0.3.0",
"version": "0.4.0",
"description": "Four audit skills for a repo's Claude Code configuration: settings-audit (settings.json / .mcp.json / hooks / plugins / permissions drift), memory-health (CLAUDE.md, rules, and auto-memory against official-doc criteria), automation-deep-dive (evidence-gated verdicts on automation gaps), and permission-hygiene (allow-rule / allowed-tools grants for auto-mode durability and portability).",
"author": {
"name": "Melodic Software",
Expand Down
17 changes: 17 additions & 0 deletions plugins/claude-config-audit/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Changelog

All notable changes to the `claude-config-audit` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.4.0]

### Added

- "Pre-computed context" blocks in the `automation-deep-dive`, `memory-health`, and `settings-audit`
skills: `!`-executed commands inject live repo facts (automation inventory; memory/rules/CLAUDE.md
counts and the RD1/M2 script-backed check counts; installed Claude Code version) at skill load, so
each audit starts from guaranteed-fresh evidence instead of relying on the model to remember to run
the bundled scripts. Every command carries an `|| echo` fallback so skill load never hard-fails.
No `allowed-tools` self-grant ships with the blocks: a `Bash(bash <path>*)` grant is the
interpreter-led P1 shape this plugin's own `permission-hygiene` criteria flag (auto mode drops it),
and `!`-execution does not route through `allowed-tools`.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ user-invocable: true
disable-model-invocation: false
---

## Pre-computed context

Automation inventory: !`bash "${CLAUDE_PLUGIN_ROOT}/skills/automation-deep-dive/scripts/inventory.sh" 2>/dev/null || echo "inventory unavailable"`

## Purpose

Audit the repo's automation landscape and identify genuine gaps — not surface-level "you don't have X"
Expand Down
10 changes: 10 additions & 0 deletions plugins/claude-config-audit/skills/memory-health/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ user-invocable: true
disable-model-invocation: false
---

## Pre-computed context

Memory files: !`d=$(bash "${CLAUDE_PLUGIN_ROOT}/skills/memory-health/scripts/resolve-memory-dir.sh" 2>/dev/null); ls "$d"/*.md 2>/dev/null | wc -l | tr -d '\r' || echo "0"`
MEMORY.md lines: !`d=$(bash "${CLAUDE_PLUGIN_ROOT}/skills/memory-health/scripts/resolve-memory-dir.sh" 2>/dev/null); test -f "$d/MEMORY.md" && wc -l < "$d/MEMORY.md" | tr -d '\r' || echo "0"`
Rules files: !`find .claude/rules -name "*.md" 2>/dev/null | wc -l | tr -d '\r' || echo "0"`
CLAUDE.md lines: !`test -f CLAUDE.md && wc -l < CLAUDE.md | tr -d '\r' || echo "0"`
CLAUDE.local.md exists: !`test -f CLAUDE.local.md && echo "yes" || echo "no"`
Orphan always-loaded rules (RD1): !`bash "${CLAUDE_PLUGIN_ROOT}/skills/memory-health/scripts/orphan-rule-check.sh" --count 2>/dev/null || echo "?"`
MEMORY.md index issues (M2): !`bash "${CLAUDE_PLUGIN_ROOT}/skills/memory-health/scripts/memory-index-refs-check.sh" --count 2>/dev/null || echo "?"`

# Memory Health

Deterministic health check for the Claude Code instruction/memory layer. Audits files YOU write that
Expand Down
4 changes: 4 additions & 0 deletions plugins/claude-config-audit/skills/settings-audit/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ user-invocable: true
disable-model-invocation: false
---

## Pre-computed context

Claude Code version: !`claude --version 2>/dev/null || echo "unknown"`

## Purpose

Periodic audit of Claude Code configuration files against current official documentation and the
Expand Down
2 changes: 1 addition & 1 deletion plugins/code-tidying/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "code-tidying",
"version": "0.3.1",
"version": "0.4.0",
"description": "Code tidying and comment hygiene: /code-tidying:tidy proactively hunts a rotated, glob-scoped lane for Beck-style tidyings under a research-backed scope budget and ships one tight PR; /code-tidying:batch-simplify sweeps recently changed files through grouped, dependency-ordered simplification waves with a never-drop deferred-items contract; /code-tidying:comment-residue is a read-only classifier that flags history, plan, conversational, and ticket/PR residue in code comments for author-applied deletion. Project-specific tidy lanes are scaffolded into a tracked .claude/tidy-lanes/ config folder by a re-runnable setup skill.",
"author": {
"name": "Melodic Software",
Expand Down
10 changes: 10 additions & 0 deletions plugins/code-tidying/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Changelog

All notable changes to the `code-tidying` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.4.0]

### Added

- Stdlib-only frontmatter-fence integrity check in the self-update lane's verification commands: a portable python one-liner that confirms every SKILL.md's `---` fences are present and the frontmatter between them is non-empty, since a broken fence would block the next session's skill discovery.
7 changes: 7 additions & 0 deletions plugins/code-tidying/skills/tidy/lanes/self-update.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ npx markdownlint-cli2 <changed .md files>
bash skills/tidy/scripts/open-pr-count.test.sh # if the script changed (it shouldn't in this lane)
```

Markdown lint does not cover the frontmatter parse contract — a broken `---` fence in a SKILL.md would block the next session's skill discovery. Run from the plugin root:

```bash
# Stdlib-only (no PyYAML): confirms each SKILL.md's `---` fences are present and the frontmatter between them is non-empty.
python -c "import glob,sys; bad=[p for p in glob.glob('skills/*/SKILL.md') if (lambda s: len(s)!=3 or s[0] or not s[1].strip())(open(p,encoding='utf-8').read().split('---',2))]; sys.exit('broken frontmatter: '+', '.join(bad)) if bad else print('OK')"
```

## Conventional Commits type

`chore(tidy):`. Example title: `chore(tidy): self-update — fix typos in lane file headers`.
Expand Down
2 changes: 1 addition & 1 deletion plugins/codebase-audit/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "codebase-audit",
"version": "0.1.2",
"version": "0.2.0",
"description": "Repo-wide drift audit between docs, config, code, and architecture: verifies every factual claim against reality via parallel subagent fan-out, severity-rates findings, and fixes or presents for review. Audit dimensions are configurable through a tracked .claude/codebase-audit.md config file written by the setup skill.",
"author": {
"name": "Melodic Software",
Expand Down
12 changes: 12 additions & 0 deletions plugins/codebase-audit/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Changelog

All notable changes to the `codebase-audit` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.2.0]

### Added

- Optional background/unattended execution variant for the Phase 1 per-file fan-out: the same
discovery can run as a saved workflow (background execution, same-session resume, rerunnable
script) when the environment provides such a surface; the in-session fan-out remains the default.
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,13 @@ caught vs a single sequential agent.
Because each agent owns one file, the "complete one dimension before the next" sequencing is moot —
there is no shared context to thin out, so dimension order does not matter.

**Background / unattended variant:** the same per-file fan-out can run as a saved workflow
(background execution, same-session resume, rerunnable script) instead of in-session subagents —
same discovery, different executor. This applies only when your environment provides a
background/saved-workflow execution surface; the in-session fan-out above is the default. Reach for
the workflow form only when you want a fire-and-forget periodic audit you can walk away from — an
interactive audit you are actively driving stays with the in-session fan-out.

## What to report

Report **every discrepancy** found, no matter how small. Also report what you verified as correct —
Expand Down
2 changes: 1 addition & 1 deletion plugins/event-storming/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "event-storming",
"version": "0.2.1",
"version": "0.3.0",
"description": "EventStorming for domain discovery — a methodology skill (Big Picture / Process Modeling / Design-Level facilitation reference, notation, patterns) and a simulation skill (agentic multi-persona workshops that produce a structured-markdown model by default; a live Miro-board rendering path is available when the first-party miro plugin is enabled).",
"author": {
"name": "Melodic Software",
Expand Down
14 changes: 14 additions & 0 deletions plugins/event-storming/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Changelog

All notable changes to the `event-storming` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.3.0]

### Added

- `--design-level` deep dive now guards its prerequisite: when no prior Process Modeling board exists for the bounded context in `${CLAUDE_PLUGIN_DATA}/history.jsonl`, it surfaces the missing prerequisite and offers to run `--process-model` first instead of fabricating a process model or aggregates. Pinned by the new `design-level-missing-prerequisite` eval.

### Fixed

- Dangling bare "memory" references in the simulation skill's deep-dive and evaluation steps now use the `${CLAUDE_PLUGIN_DATA}/history.jsonl` run-state seam like every sibling reference.
26 changes: 15 additions & 11 deletions plugins/event-storming/skills/simulation/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Parse `$ARGUMENTS` for a simulation mode:
- `--simulate [domain]`: Run a full simulation cycle with interactive progression. Loads `agentic-simulation.md` and `simulation-evaluation.md`. Starts with Big Picture, identifies bounded contexts, then uses AskUserQuestion to guide the user through selecting which BC to explore next. Domain defaults to "Developer Conference" if not specified. See "Running a Simulation" below.
- `--process-model [board-url-or-bc-name]`: Run Process Modeling only, against an existing Big Picture board. Reads the BP board to extract the winning problem / selected BC, then executes PM with the 3-pass technique. Use when the user wants to deep-dive a specific BC without re-running Big Picture.
- `--design-level [board-url-or-bc-name]`: Run Design-Level only, against an existing Process Modeling board. Reads the PM board to extract the process model, then executes DL with Blank Aggregates technique. Use when the user wants to go from PM → DL on a specific bounded context.
- `--evaluate`: Run the iteration workflow against existing boards. Loads `iteration-workflow.md` and `simulation-evaluation.md`. Executes: SCORE → COMPARE → DIFF → FIX → VERIFY → CODIFY. Requires existing boards (reads from memory for board URLs).
- `--evaluate`: Run the iteration workflow against existing boards. Loads `iteration-workflow.md` and `simulation-evaluation.md`. Executes: SCORE → COMPARE → DIFF → FIX → VERIFY → CODIFY. Requires existing boards (reads the run-state store, `${CLAUDE_PLUGIN_DATA}/history.jsonl`, for board URLs).
- `--retrospective [domain]`: Run Big Picture as an organization retrospective — exploring an existing business process to find improvement opportunities. Frames exploration as "what ACTUALLY happens?" vs the official version. Same phases as `--simulate` but with a focus on problems/opportunities in existing flows rather than new product discovery. (Book Ch. 1 story 4, Ch. 10)
- `--induction [domain]`: Run Big Picture as a new hire onboarding exercise. The New Hire persona leads (models based on guessing/assumptions), senior personas correct and explain. Implements Brandolini's "give newcomers the leading role" (Ch. 10). Produces a learning-oriented model, not a definitive one.
- `--value [domain]`: Run standalone Value Exploration against an existing Big Picture board. Executes all 5 sub-rounds: Financial value → Non-financial currencies → Contrasting perspectives → Diverging perspectives (customer segments) → Explore Purpose. (Book Ch. 5)
Expand Down Expand Up @@ -57,7 +57,10 @@ plugin's tool under the `mcp__plugin_miro_miro__` prefix.

Modes that read an *existing* board (`--process-model`, `--design-level`, `--evaluate`, `--crc`,
`--discover-bcs` with a board URL) require Miro — if it's absent, say so and offer path 2, since
there is no board to read.
there is no board to read. One check precedes that gate: for a BC-name input, `--design-level`
resolves its prerequisite first — the run-state store lookup (`${CLAUDE_PLUGIN_DATA}/history.jsonl`)
needs no Miro, so a missing Process Modeling board is surfaced as the missing prerequisite (offer
`--process-model` first) before any Miro gating.

## Running a Simulation (`--simulate`)

Expand All @@ -75,17 +78,17 @@ there is no board to read.
1. **Setup** — MCP preflight (Miro availability per "Miro availability & graceful degradation" above), domain research (3+ web-research searches — Perplexity MCP if present, else `WebSearch`; default domain "Developer Conference"), persona setup (4-7 personas, three-zone DEEP/GREY/PRETEND knowledge, 5 shared focal moments). Session lifecycle (ID, dirs, teardown) and preflight detail: `@./reference/agentic-simulation.md` "Session lifecycle".
2. **Big Picture** (always first) — run every workshop phase in order (Chaotic Exploration → Enforce Timeline → People & Systems → Explicit Walk-through → Reverse Narrative → [optional] Add the Money / Value Exploration → Problems & Opportunities → Arrow Voting → Wrapping Up) per `@./reference/agentic-simulation.md` "Round-Based Orchestration", taking a visual-verification screenshot at each transition; then run the post-workshop visual check (Ch. 9) and score against the Big Picture rubric.
3. **Post-workshop analysis + interactive progression** — run bounded-context discovery (architect's homework, not a workshop phase — see `--discover-bcs` below), present the arrow-voting winner and discovered BCs, then use AskUserQuestion to let the user pick the next BC to Process Model, then Design-Level, repeating per BC. **Never auto-advance formats — the user chooses each step.**
4. **Evaluation & codification** — score all boards against the full rubric, compare against memory baselines, run the retrospective protocol (`@./reference/simulation-evaluation.md`), update memory with version metrics / board URLs / findings, present the version comparison, and clean up old boards with user approval.
4. **Evaluation & codification** — score all boards against the full rubric, compare against the `${CLAUDE_PLUGIN_DATA}/history.jsonl` baselines, run the retrospective protocol (`@./reference/simulation-evaluation.md`), update the run-state store with version metrics / board URLs / findings, present the version comparison, and clean up old boards with user approval.

Throughout, maintain an **exploration map** (Big Picture URL, all BCs explored + unexplored, per-BC Process Modeling and Design-Level board URLs) on the Big Picture board as a cyan sticky and in memory — layout detail in `@./reference/agentic-simulation.md`.
Throughout, maintain an **exploration map** (Big Picture URL, all BCs explored + unexplored, per-BC Process Modeling and Design-Level board URLs) on the Big Picture board as a cyan sticky and in the run-state store (`${CLAUDE_PLUGIN_DATA}/history.jsonl`) — layout detail in `@./reference/agentic-simulation.md`.

## Running a Deep Dive (`--process-model` or `--design-level`)

When invoked with `--process-model` or `--design-level`, run a single format against an existing board from a previous session. This is for continuing exploration of bounded contexts identified during a prior Big Picture.

**`--process-model [board-url-or-bc-name]`:**

1. Read memory for the Big Picture board URL and the list of identified BCs
1. Read the run-state store (`${CLAUDE_PLUGIN_DATA}/history.jsonl`) for the Big Picture board URL and the list of identified BCs
2. If a BC name is given, extract relevant events from the BP board for that context
3. If a board URL is given, read it directly
4. Execute Process Modeling with 3-pass technique on the selected scope
Expand All @@ -94,17 +97,18 @@ When invoked with `--process-model` or `--design-level`, run a single format aga

**`--design-level [board-url-or-bc-name]`:**

1. Read memory for the Process Modeling board URL for the specified BC
2. Extract the process model (events, commands, policies)
3. Execute Design-Level with Blank Aggregates technique
4. Score against DL rubric
5. Update the exploration map with the new aggregate information
1. Read the run-state store (`${CLAUDE_PLUGIN_DATA}/history.jsonl`) for the Process Modeling board URL for the specified BC
2. If no prior Process Modeling board exists for the BC, surface the missing prerequisite and offer to run `--process-model` first — never fabricate a process model or aggregates from scratch
Comment thread
kyle-sexton marked this conversation as resolved.
3. Extract the process model (events, commands, policies)
4. Execute Design-Level with Blank Aggregates technique
5. Score against DL rubric
6. Update the exploration map with the new aggregate information

## Running an Evaluation (`--evaluate`)

When invoked with `--evaluate`, run the iteration workflow against existing boards WITHOUT re-running the simulation. Use this to re-score boards, compare versions, or verify that fixes improved quality.

**Execution:** Follow `iteration-workflow.md` steps 2-7 (SCORE → COMPARE → DIFF → FIX → VERIFY → CODIFY). Read board data via Miro MCP, score against rubric, compare against memory baselines.
**Execution:** Follow `iteration-workflow.md` steps 2-7 (SCORE → COMPARE → DIFF → FIX → VERIFY → CODIFY). Read board data via Miro MCP, score against rubric, compare against the `${CLAUDE_PLUGIN_DATA}/history.jsonl` baselines.

## Bounded Context Discovery Protocol (`--discover-bcs`)

Expand Down
12 changes: 12 additions & 0 deletions plugins/event-storming/skills/simulation/evals/evals.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,18 @@
"Output does not fabricate some other arbitrary domain as if the user had specified it",
"Output honors the Miro preflight — proceeding on-board when Miro is available, or offering the structured-markdown / connect-and-retry degradation when Miro is absent — rather than assuming an unconditional board run"
]
},
{
"id": 7,
"name": "design-level-missing-prerequisite",
"prompt": "--design-level Enrollment",
"expected_output": "Design-Level deep-dive routing that first requires the prerequisite: an existing Process Modeling board for the Enrollment bounded context. It should look up the PM board URL in the run-state store (${CLAUDE_PLUGIN_DATA}/history.jsonl) and, finding no prior board, surface the missing prerequisite — offering to run --process-model first — rather than fabricating a process model or aggregates from scratch. It routes to Design-Level behavior (Blank Aggregates technique), not to Big Picture or the interactive-discovery flow.",
"files": [],
"expectations": [
"Recognizes Design-Level requires an existing Process Modeling board for the bounded context and looks up the board URL in ${CLAUDE_PLUGIN_DATA}/history.jsonl before proceeding",
"On finding no prior Process Modeling board, surfaces the missing prerequisite (offering to run --process-model first) instead of fabricating a process model or aggregates from scratch",
"Routes to Design-Level behavior (e.g. Blank Aggregates), not to Big Picture or the no-args interactive discovery flow"
]
}
]
}
Loading
Loading