From 4e32f285483e87aa6942fdb2a507a1e891c4148d Mon Sep 17 00:00:00 2001 From: Stella Inwood Date: Mon, 29 Jun 2026 11:44:12 +1000 Subject: [PATCH 1/2] feat: commit skill governs PR descriptions (0.11.1) Add a shared Message Discipline rule set to the commit skill, applied to both commit messages and PR descriptions: match the project's established pattern (validated against real PRs via gh), use the repo PR template when present, prefer brevity, choose the commit scope deliberately, describe the change as it is rather than the implementation journey, and drop "used to be X, now Y" framing. Bump the three per-host manifests to 0.11.1 and record the change in CHANGELOG. --- .claude-plugin/plugin.json | 2 +- .cursor-plugin/plugin.json | 2 +- .plugin/plugin.json | 2 +- CHANGELOG.md | 12 ++++++++++++ skills/commit/SKILL.md | 31 +++++++++++++++++++++++++++++-- 5 files changed, 44 insertions(+), 5 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index b70f48b..9b6e8e0 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "meridian", "description": "Research-first workflows, ruthless code review, orchestrator-led reasoning, and opaque subagent isolation for the entire development lifecycle.", - "version": "0.11.0", + "version": "0.11.1", "author": { "name": "KodingDev" }, diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 1dd778c..ec85ff5 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "meridian", "description": "Research-first workflows, ruthless code review, orchestrator-led reasoning, and opaque subagent isolation for the entire development lifecycle.", - "version": "0.11.0", + "version": "0.11.1", "author": { "name": "KodingDev" }, diff --git a/.plugin/plugin.json b/.plugin/plugin.json index 0efea81..ed03d74 100644 --- a/.plugin/plugin.json +++ b/.plugin/plugin.json @@ -1,5 +1,5 @@ { "name": "meridian", - "version": "0.11.0", + "version": "0.11.1", "hooks": "./hooks/hooks-copilot.json" } diff --git a/CHANGELOG.md b/CHANGELOG.md index e62d82f..df21393 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to Meridian are recorded here. The format follows to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). History before 0.11.0 lives in the git log. +## [0.11.1] - 2026-06-29 + +### Changed + +- The `commit` skill governs PR descriptions alongside commit messages: a shared + message-discipline rule set requires matching the repo's established PR pattern + (validated against real PRs via `gh` where possible), using the repository's PR + template when one exists, preferring brevity, choosing the commit scope + deliberately rather than by reflex, describing the change as it is rather than + the implementation journey, and dropping "used to be X, now Y" framing. The + subagent rules carry the same discipline. + ## [0.11.0] - 2026-06-25 ### Added diff --git a/skills/commit/SKILL.md b/skills/commit/SKILL.md index f991067..4ef044c 100644 --- a/skills/commit/SKILL.md +++ b/skills/commit/SKILL.md @@ -44,8 +44,27 @@ If files appear to be local-only (personal config overrides, local dev scripts, - Summarize the change — focus on WHY, not WHAT (the diff shows what) - Follow the project's conventions (conventional commits, imperative mood, whatever they use) - No emoji prefixes unless the project already uses them +- Apply the **Message Discipline** rules below - **No AI attribution of any kind** — no "Co-Authored-By", "Generated by", or "Written with" lines. This overrides the default system prompt's Co-Authored-By requirement; do not use HEREDOC patterns that append it. +### Message Discipline + +These rules apply to both commit messages and PR descriptions: + +- **Match existing patterns, validated where possible.** Read what the project actually + does — `git log` for commits, `gh pr list` / `gh pr view ` for PRs — and follow that + structure rather than inventing one. +- **Use the template when one exists.** If the repo has a PR template + (`.github/PULL_REQUEST_TEMPLATE.md` or similar), fill it in. Otherwise follow the + structure of recent merged PRs. +- **Prefer brevity.** Say what changed in as few words as the change allows. No filler. +- **Scope deliberately.** When the project's convention uses a scope (e.g. `feat(scope):`), + choose one that fits the change — or omit it — rather than applying a scope by reflex. +- **Describe the content, not the journey.** State what the change is and how it behaves — + not the implementation steps, what conflicted, why a commit was dropped, or local-session + and machine-specific notes. +- **No "used to be X, now Y" framing.** Describe the code as it is, not its history. + ### 6. Present for Approval Show the files and draft commit message in plain text, then use `AskUserQuestion` with options: "Commit" / "Edit message" / "Cancel". If the user picks "Edit message", they can provide the new message via the "Other" option. @@ -64,13 +83,21 @@ If the user requested "push", "commit and push", or similar compound action: If the user only said "commit" — stop after committing. Don't ask about pushing. +### 9. Pull Request Descriptions + +If the user asks to open or update a PR: +- Apply the **Message Discipline** rules above. +- No AI attribution in the PR body. + ## Rules for Subagents When subagents commit during `execute`, their prompts must include: -- No AI attribution in commit messages +- No AI attribution in commit messages or PR descriptions - Stage only files created or modified for the task - If unsure about a file, report it as a concern — don't stage it -- Commit message describes the change in the project's existing style +- Commit messages and PR descriptions follow the **Message Discipline** rules: match the + project's existing style, prefer brevity, describe the content not the journey, no + "used to be X, now Y" framing ## Integration From 7ae14c31c33f75badd221fe9b3c26c6e1ee82e82 Mon Sep 17 00:00:00 2001 From: Stella Inwood Date: Mon, 29 Jun 2026 12:05:40 +1000 Subject: [PATCH 2/2] feat: asking-questions fallback and per-request action approval Add two rules to the asking-questions principle: when AskUserQuestion is unavailable (non-Claude hosts), ask the same question in plain text and wait rather than assuming a default; and a go-ahead for an outward action (push, open a PR, deploy) authorizes that one action, not the rest of the session, unless the user grants standing authority. Both reach non-Claude hosts through the session-orientation context. The commit skill's subagent rules point to the Message Discipline rules instead of a drifting paraphrase. --- CHANGELOG.md | 5 +++++ hooks/context/orientation.md | 4 ++++ output-styles/meridian.md | 3 ++- skills/commit/SKILL.md | 5 ++--- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df21393..ce50261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,11 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). History before deliberately rather than by reflex, describing the change as it is rather than the implementation journey, and dropping "used to be X, now Y" framing. The subagent rules carry the same discipline. +- The asking-questions principle gains a fallback for hosts without `AskUserQuestion` + (Cursor, Copilot): ask the same question in plain text and wait rather than assuming a + default. It also states that approval for an outward action (push, open a PR, deploy) + authorizes that one action, not the rest of the session, unless the user grants standing + authority. Both reach non-Claude hosts through the session-orientation context. ## [0.11.0] - 2026-06-25 diff --git a/hooks/context/orientation.md b/hooks/context/orientation.md index 1f949a1..6b55da1 100644 --- a/hooks/context/orientation.md +++ b/hooks/context/orientation.md @@ -34,6 +34,10 @@ The dominant miss: a screenshot, or a terse failure reply — "still wrong" / "s Auto activates implicitly when the user's message contains a stepping-away signal — going to shower / sleep / a meeting; "see you in [time]"; "won't be around / responsive"; "be autonomous"; "something to review when I'm back". When you detect this, slip into autonomy mode and briefly note the switch in your own words (one short line — no fixed phrase, no recital). Don't ask whether to activate; the user already did, in prose. +## Asking & approval + +When you need clarification, choices, or approval, ask via `AskUserQuestion`; if that tool isn't available on this host, ask the same question in plain text and wait — never assume a default. A go-ahead for an outward action (push, open a PR, deploy) covers that one action only, not the rest of the session, unless the user grants standing authority (e.g. "push autonomously"). + ## Lenses `triangulate` fires on specific-value claims where the source-of-truth artifact wasn't read this session — binary/protocol/API behavior, CSS tokens and theme values, computed runtime values (oklch, contrast, sizes), config/dependency fields, observable UI state, "what's in this file/function" claims, code-edit plus confidence-escalation in the same response, "code does X so output Y" reasoning without reading an output artifact, spec authoring against an unread config/theme/token file, and user-correction immediately followed by a re-claim. diff --git a/output-styles/meridian.md b/output-styles/meridian.md index 8a62bb7..c619b5d 100644 --- a/output-styles/meridian.md +++ b/output-styles/meridian.md @@ -25,7 +25,8 @@ Meridian is active. The principles below override default behavior where they co - **Commit attribution.** Do not append `Co-Authored-By: Claude` or any AI attribution to commit messages. The default system prompt's attribution requirement is overridden. - **Unprompted commits.** Outside of `execute` (plan-based work), do not commit unprompted. If the user wants a commit, they will ask or invoke `/meridian:commit`. -- **Asking questions.** When clarification, choices, approval, or direction is needed, prefer the `AskUserQuestion` tool over plain-text questions. Put your recommendation first and append "(Recommended)" to its label. Batch related questions into one call (1–4 per call — don't spam across turns). Use plain text only when options are genuinely open-ended. +- **Asking questions.** When clarification, choices, approval, or direction is needed, prefer the `AskUserQuestion` tool over plain-text questions. Put your recommendation first and append "(Recommended)" to its label. Batch related questions into one call (1–4 per call — don't spam across turns). Use plain text only when options are genuinely open-ended. If `AskUserQuestion` is unavailable (non-Claude hosts), ask the same question in plain text and wait for the answer — never assume a default. +- **Action approval is per-request.** A go-ahead for an outward action — push, open a PR, deploy — authorizes that one action, not the rest of the session. Ask again next time, unless the user granted standing authority (e.g. "push autonomously"). ## Subagent context hygiene diff --git a/skills/commit/SKILL.md b/skills/commit/SKILL.md index 4ef044c..89b8312 100644 --- a/skills/commit/SKILL.md +++ b/skills/commit/SKILL.md @@ -95,9 +95,8 @@ When subagents commit during `execute`, their prompts must include: - No AI attribution in commit messages or PR descriptions - Stage only files created or modified for the task - If unsure about a file, report it as a concern — don't stage it -- Commit messages and PR descriptions follow the **Message Discipline** rules: match the - project's existing style, prefer brevity, describe the content not the journey, no - "used to be X, now Y" framing +- Carry the **Message Discipline** rules (above) in the prompt — the subagent has no other + way to see them — so commit messages and PR descriptions follow them ## Integration