From 672fa74418d38f450fe2e78a0dd3f9c719b8e862 Mon Sep 17 00:00:00 2001 From: Bruno Guidolim Date: Fri, 8 May 2026 10:23:50 +0200 Subject: [PATCH 1/3] Clarify Applies to: placement to follow the title heading - Replace "first line of every memory" with explicit placement under the `# Title` heading in the synced applies-to block (SYNC-BLOCKS.md + both SKILL.md copies). - Align the standalone instruction in continuous-learning to match. --- SYNC-BLOCKS.md | 2 +- skills/continuous-learning/SKILL.md | 4 ++-- skills/memory-audit/SKILL.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SYNC-BLOCKS.md b/SYNC-BLOCKS.md index 278d5cd..f014594 100644 --- a/SYNC-BLOCKS.md +++ b/SYNC-BLOCKS.md @@ -51,7 +51,7 @@ Locations: ```markdown -**The `Applies to:` field.** The first line of every memory declares which project(s) the memory targets. Use the **git repo name** — the last path segment of `git remote get-url origin`, with `.git` stripped (e.g. `git@github.com:org/repo.git` → `repo`; `https://github.com/owner/my-app.git` → `my-app`). Fall back to the working directory's basename only when the repo has no remote configured. Use the repo name — not the directory basename — because folder names vary across clones while the repo name is stable. This is also why `Applies to:` may differ from the `library:` parameter used for `search_docs`, which is folder-based and set automatically by the indexing hook. +**The `Applies to:` field.** Place `**Applies to:**` on the line immediately after the `# Title` heading of every memory; it declares which project(s) the memory targets. Use the **git repo name** — the last path segment of `git remote get-url origin`, with `.git` stripped (e.g. `git@github.com:org/repo.git` → `repo`; `https://github.com/owner/my-app.git` → `my-app`). Fall back to the working directory's basename only when the repo has no remote configured. Use the repo name — not the directory basename — because folder names vary across clones while the repo name is stable. This is also why `Applies to:` may differ from the `library:` parameter used for `search_docs`, which is folder-based and set automatically by the indexing hook. When a memory genuinely applies to multiple projects, list them comma-separated (e.g. `**Applies to:** web-dashboard, ios-app, api-backend`); the content must stay true in every listed project. When a memory is only partially relevant to one listed project, split it into separate memories instead of mixing. diff --git a/skills/continuous-learning/SKILL.md b/skills/continuous-learning/SKILL.md index 1dd6bc1..c967523 100644 --- a/skills/continuous-learning/SKILL.md +++ b/skills/continuous-learning/SKILL.md @@ -133,10 +133,10 @@ Read [references/templates.md](references/templates.md) for template structures. #### Applies to -Fill in `Applies to:` at the top of every memory. +Fill in `Applies to:` directly under the title heading of every memory. -**The `Applies to:` field.** The first line of every memory declares which project(s) the memory targets. Use the **git repo name** — the last path segment of `git remote get-url origin`, with `.git` stripped (e.g. `git@github.com:org/repo.git` → `repo`; `https://github.com/owner/my-app.git` → `my-app`). Fall back to the working directory's basename only when the repo has no remote configured. Use the repo name — not the directory basename — because folder names vary across clones while the repo name is stable. This is also why `Applies to:` may differ from the `library:` parameter used for `search_docs`, which is folder-based and set automatically by the indexing hook. +**The `Applies to:` field.** Place `**Applies to:**` on the line immediately after the `# Title` heading of every memory; it declares which project(s) the memory targets. Use the **git repo name** — the last path segment of `git remote get-url origin`, with `.git` stripped (e.g. `git@github.com:org/repo.git` → `repo`; `https://github.com/owner/my-app.git` → `my-app`). Fall back to the working directory's basename only when the repo has no remote configured. Use the repo name — not the directory basename — because folder names vary across clones while the repo name is stable. This is also why `Applies to:` may differ from the `library:` parameter used for `search_docs`, which is folder-based and set automatically by the indexing hook. When a memory genuinely applies to multiple projects, list them comma-separated (e.g. `**Applies to:** web-dashboard, ios-app, api-backend`); the content must stay true in every listed project. When a memory is only partially relevant to one listed project, split it into separate memories instead of mixing. diff --git a/skills/memory-audit/SKILL.md b/skills/memory-audit/SKILL.md index 141f6bd..c7aa983 100644 --- a/skills/memory-audit/SKILL.md +++ b/skills/memory-audit/SKILL.md @@ -36,7 +36,7 @@ The audit enforces these rules through the criteria below — see Group A. ## The `Applies to:` field -**The `Applies to:` field.** The first line of every memory declares which project(s) the memory targets. Use the **git repo name** — the last path segment of `git remote get-url origin`, with `.git` stripped (e.g. `git@github.com:org/repo.git` → `repo`; `https://github.com/owner/my-app.git` → `my-app`). Fall back to the working directory's basename only when the repo has no remote configured. Use the repo name — not the directory basename — because folder names vary across clones while the repo name is stable. This is also why `Applies to:` may differ from the `library:` parameter used for `search_docs`, which is folder-based and set automatically by the indexing hook. +**The `Applies to:` field.** Place `**Applies to:**` on the line immediately after the `# Title` heading of every memory; it declares which project(s) the memory targets. Use the **git repo name** — the last path segment of `git remote get-url origin`, with `.git` stripped (e.g. `git@github.com:org/repo.git` → `repo`; `https://github.com/owner/my-app.git` → `my-app`). Fall back to the working directory's basename only when the repo has no remote configured. Use the repo name — not the directory basename — because folder names vary across clones while the repo name is stable. This is also why `Applies to:` may differ from the `library:` parameter used for `search_docs`, which is folder-based and set automatically by the indexing hook. When a memory genuinely applies to multiple projects, list them comma-separated (e.g. `**Applies to:** web-dashboard, ios-app, api-backend`); the content must stay true in every listed project. When a memory is only partially relevant to one listed project, split it into separate memories instead of mixing. From b47825fa42ae76f6334c3b3c9781518e85ced2f7 Mon Sep 17 00:00:00 2001 From: Bruno Guidolim Date: Fri, 8 May 2026 10:56:39 +0200 Subject: [PATCH 2/3] Tighten capture skill: forcing-function gate, fix doc drift - Promote the forcing-function check in continuous-learning Stage A from a soft prompt to a hard gate, anchoring the "Do Not Save" table's `[Forcing-function]` label. - Correct the Bash row in the Tool Reference to describe its actual purpose (resolving the git repo name for `Applies to:`) instead of memory deletion. - Sync README's required mcs version with techpack.yaml and fix a heading-depth typo in a self-link. --- README.md | 2 +- skills/continuous-learning/SKILL.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5f526db..87462ec 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Built for the [`mcs`](https://github.com/mcs-cli/mcs) configuration engine. ``` identifier: memory -requires: mcs >= 2026.3.22 +requires: mcs >= 2026.4.12 ``` --- diff --git a/skills/continuous-learning/SKILL.md b/skills/continuous-learning/SKILL.md index c967523..8b79c48 100644 --- a/skills/continuous-learning/SKILL.md +++ b/skills/continuous-learning/SKILL.md @@ -13,7 +13,7 @@ allowed-tools: Write, Read, Glob, Edit, Bash, WebSearch, mcp__docs-mcp-server__s Evaluate reusable knowledge from work sessions and route it: codebase knowledge → `/.claude/memories/`, environment/tool/instance config → suggest a `CLAUDE.local.md` section, public documentation → skip. The skill is the **only** path to `memories/` — never `Write` there directly. Suggesting `CLAUDE.local.md` is a successful outcome, not a failure. -> **Note:** `` refers to the current working directory (project root) throughout this document. The `Applies to:` field inside memory content has its own semantics — see the `### Applies to` subsection in [Step 4](#step-4-route-and-save). +> **Note:** `` refers to the current working directory (project root) throughout this document. The `Applies to:` field inside memory content has its own semantics — see the `#### Applies to` subsection in [Step 4](#step-4-route-and-save). ## Memory Categories @@ -82,9 +82,9 @@ After completing any task, evaluate in two stages. - Did this require non-obvious investigation or debugging? - Was a choice made about architecture, patterns, or approach? - Is there an established project convention worth documenting? -- Without this, would someone make a different decision in the project? +- **Forcing-function (hard gate):** without this memory, would a future session act differently in the project? If the code, `git log`, lint, or the formatter already drives the behavior → skip. The "Do Not Save" table cites this as `[Forcing-function]`. -If NO to all → skip. Otherwise continue to Stage B. +If the forcing-function gate fails, or no other prompt answers yes → skip. Otherwise continue to Stage B. **Stage B — Apply the three Capture Rules above as hard gates. All three must pass.** Enforcement maps: @@ -267,5 +267,5 @@ When the user asks to "run a retrospective", "extract learnings from this sessio | `Read` | Read a specific memory file | | `Write` | Create new memory file | | `Edit` | Update existing memory file | -| `Bash` | Remove outdated memory file (`rm`) | +| `Bash` | Resolve git repo name for `Applies to:` (`git remote get-url origin`) | | `WebSearch` | Built-in web search for general topics | From 360f5727242b1e4f31aba2d75298f83fbfc027e5 Mon Sep 17 00:00:00 2001 From: Bruno Guidolim Date: Fri, 8 May 2026 11:01:05 +0200 Subject: [PATCH 3/3] Drop heading-syntax noise from Applies to cross-reference - Refer to the subsection by name instead of leaking the markdown nesting depth. --- skills/continuous-learning/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/continuous-learning/SKILL.md b/skills/continuous-learning/SKILL.md index 8b79c48..3b37e30 100644 --- a/skills/continuous-learning/SKILL.md +++ b/skills/continuous-learning/SKILL.md @@ -13,7 +13,7 @@ allowed-tools: Write, Read, Glob, Edit, Bash, WebSearch, mcp__docs-mcp-server__s Evaluate reusable knowledge from work sessions and route it: codebase knowledge → `/.claude/memories/`, environment/tool/instance config → suggest a `CLAUDE.local.md` section, public documentation → skip. The skill is the **only** path to `memories/` — never `Write` there directly. Suggesting `CLAUDE.local.md` is a successful outcome, not a failure. -> **Note:** `` refers to the current working directory (project root) throughout this document. The `Applies to:` field inside memory content has its own semantics — see the `#### Applies to` subsection in [Step 4](#step-4-route-and-save). +> **Note:** `` refers to the current working directory (project root) throughout this document. The `Applies to:` field inside memory content has its own semantics — see the **Applies to** subsection in [Step 4](#step-4-route-and-save). ## Memory Categories