Markdown Article Formatter
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
Establish and enforce deterministic path patterns across Code ↔ UI route/menu ↔ Test for any project.
$ npx skills add JocysCom/FocusLogger --skill solution-patterns -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install JocysCom/FocusLogger solution-patterns --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/JocysCom/FocusLogger.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.ai/skills/solution-patterns .claude/skills/solution-patterns && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "solution-patterns" agent skill from https://github.com/JocysCom/FocusLogger/tree/main/.ai/skills/solution-patterns into .claude/skills/solution-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solution-patterns", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/JocysCom/FocusLogger/tree/main/.ai/skills/solution-patternsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add JocysCom/FocusLogger --skill solution-patterns -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install JocysCom/FocusLogger solution-patterns --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JocysCom/FocusLogger.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.ai/skills/solution-patterns .agents/skills/solution-patterns && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "solution-patterns" agent skill from https://github.com/JocysCom/FocusLogger/tree/main/.ai/skills/solution-patterns into .agents/skills/solution-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solution-patterns", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JocysCom/FocusLogger --skill solution-patterns -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install JocysCom/FocusLogger solution-patterns --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JocysCom/FocusLogger.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.ai/skills/solution-patterns .cursor/skills/solution-patterns && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "solution-patterns" agent skill from https://github.com/JocysCom/FocusLogger/tree/main/.ai/skills/solution-patterns into .cursor/skills/solution-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solution-patterns", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/JocysCom/FocusLogger.git --path .ai/skills/solution-patterns--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add JocysCom/FocusLogger --skill solution-patterns -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install JocysCom/FocusLogger solution-patterns --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JocysCom/FocusLogger.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.ai/skills/solution-patterns .gemini/skills/solution-patterns && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "solution-patterns" agent skill from https://github.com/JocysCom/FocusLogger/tree/main/.ai/skills/solution-patterns into .gemini/skills/solution-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solution-patterns", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install JocysCom/FocusLogger solution-patternsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add JocysCom/FocusLogger --skill solution-patterns -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/JocysCom/FocusLogger.git skills-src && mkdir -p .github/skills && cp -r skills-src/.ai/skills/solution-patterns .github/skills/solution-patterns && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "solution-patterns" agent skill from https://github.com/JocysCom/FocusLogger/tree/main/.ai/skills/solution-patterns into .github/skills/solution-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solution-patterns", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JocysCom/FocusLogger --skill solution-patterns -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install JocysCom/FocusLogger solution-patterns --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JocysCom/FocusLogger.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.ai/skills/solution-patterns .opencode/skills/solution-patterns && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "solution-patterns" agent skill from https://github.com/JocysCom/FocusLogger/tree/main/.ai/skills/solution-patterns into .opencode/skills/solution-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solution-patterns", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
solution-patternsEstablish and enforce deterministic path patterns across Code ↔ UI route/menu ↔ Test for any project.
Solution Patterns is an agent skill from JocysCom/FocusLogger. Establish and enforce deterministic path patterns across Code ↔ UI route/menu ↔ Test for any project. Use this skill before creating, renaming, or relocating any UI component, page, view, view-model, route, controller, desktop panel, or test file — it tells you the exact expected path in each of the three columns before you touch disk. Also use when onboarding a repo (generates .ai/solution-patterns.instructions.md + .ai/solution-patterns.csv), when auditing a project for structural consistency, when asked "where…
Its SKILL.md is about 8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts and reference files (for example `references/angular-patterns.md`, `references/network_patterns.md` and `references/nextjs-patterns.md`).
It sits in Documents & Office. The repository describes itself as: Find out which process or program is taking the window focus. In-game controls could temporary stop responding if other program steals the focus. The licence is GPL-3.0.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b32c096. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 3 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Solution Patterns loads about 8k tokens when it runs, and up to ~21k if it reads all its reference files. Until then it costs about 230 tokens; SKILL.md has 3,556 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from JocysCom/FocusLogger at commit b32c096, republished under its GPL-3.0 licence (© JocysCom). 3,556 words, ~8,046 tokens.
.claude/skills/solution-patterns/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.Core idea: The code folder is the single source of truth. UI routes and test paths are derivable from code paths via stack-specific rules. Once the mapping is explicit and machine-readable, "where does X live?" stops being a guess.
The qa-tester skill already proved the value of a deterministic Code → Test mirror (§5.2 of qa-tester): you compute the test path from the product path with a pure string transform, and "locate or create the test for file X" becomes a one-shot answer instead of a semantic search.
This skill generalises that idea along two axes:
.cshtml ↔ .cshtml.cs), its SQL table.A single page like Pages/Agents/Jobs/Index.cshtml projects into all four navigation forms — URL route /Agents/Jobs, breadcrumb Home > Agents > Jobs, sidebar position under "Agents", and (if exposed) REST endpoint GET /api/agents/{id}/jobs — from the same spine coordinate. The skill stores one nav column per artifact and derives breadcrumb and sidebar as projections; it does not duplicate them.
When the spine and the correspondence rules are machine-readable, the AI can:
Correspondence types and ownership — this skill owns only the path-derivable ones:
| Type | Examples | Owned by |
|---|---|---|
| Path-mirror | App/Foo.cs ↔ App.Tests/FooTests.cs | this skill (reuses qa-tester rule) |
| Folder→nav family | Pages/Agents/Jobs/Index.cshtml ↔ /Agents/Jobs ↔ Home > Agents > Jobs ↔ sidebar position ↔ REST equivalent | this skill |
| Companion | .cshtml ↔ .cshtml.cs, View.xaml ↔ View.xaml.cs, View.xaml ↔ ViewModel.cs | this skill |
| Name-mapping (directional) | Models/Agent.cs ↔ dbo.Agent table | this skill (CSV); per-project .instructions.md declares which side is canonical (see §2 principle 2) |
| Reference | markup class="icon-btn" ↔ .icon-btn in CSS | layout-guidelines.instructions.md — verified by grep/lint, not in the CSV |
| Convention | Agent ↔ AgentService ↔ IAgentRepository | developer.instructions.md — review-only, not in the CSV |
The clearest way to see how the layers fit is as a tree where the folder spine sits on top as SSOT, code projects branch off it, files live in the projects, and typed edges connect files to their corresponding artifacts in other branches.
{Solution}/ ← FOLDER SPINE (top SSOT — every artifact lives here)
│
├── {Project}/ ← code project (csproj) — primary code branch
│ ├── {Sub}/{Name}.cs ← code file (page model, controller, view-model, …)
│ │ ├─ companion ──────────────────→ {Sub}/{Name}.{paired-ext} (e.g. .cshtml ↔ .cshtml.cs, .xaml ↔ .xaml.cs)
│ │ ├─ path-mirror ────────────────→ ../{Project}.Tests/{Sub}/{Name}Tests.cs
│ │ ├─ folder→route ───────────────→ /{Sub}/{Name} (URL — for Role=page)
│ │ │ ├─ projection ──────────→ Home > {Sub} > {Name} (breadcrumb, derived)
│ │ │ └─ projection ──────────→ sidebar position under "{Sub}" (derived)
│ │ └─ convention ─────────────────→ {Name}Service, I{Name}Repository (review-only — owned by developer.instructions.md)
│ ├── Api/{Endpoints}.cs ← REST endpoints
│ │ └─ folder→endpoint ────────────→ {VERB} /api/{path} (REST URL — for Role=endpoint)
│ ├── Models/{Name}.cs ← model class
│ │ └─ name-mapping ───────────────→ dbo.{Name} (SQL table — direction declared in .instructions.md)
│ └── wwwroot/css/{stylesheet}.css ← style file
│ ←── reference ──────────────── markup `class="..."` references (owned by layout-guidelines.instructions.md)
│
├── {Project}.Tests/ ← test project (mirrors {Project}/ structurally — qa-tester §5.2)
│ └── {Sub}/{Name}Tests.cs ←── path-mirror of {Project}/{Sub}/{Name}.cs
│ (linked by qa-tester `@under-test` header)
│
└── {DataProject}/ ← SQL Data project — canonical iff `.instructions.md` declares it so
└── dbo/Tables/{Name}.sql
──── {Generator}.ps1 ────────→ generates {Project}/Models/{Name}.cs (mirrored, not hand-edited)Reading the diagram:
├── └──) are containment — the folder hierarchy. This is the only universal SSOT.──→) are typed correspondences — each one is one of the six types in §1's table. Some are path-derivable (in the CSV); others are reference-based or convention-only (owned elsewhere)..instructions.md declares which side is canonical (in this repo: SQL is canonical, models are generated by Generate-Models.ps1).page row's route + title is known. The CSV stores the route; pattern_map.py emits the breadcrumb map and sidebar tree as a sidecar view (§4.1).ExpectedTestPath.off-convention in §5), not a design choice; declared overrides in .instructions.md are the only legitimate exceptions.Each rule has a Why so you can judge edge cases instead of pattern-matching on the rule.
The folder/code spine is the universal SSOT for path-based correspondences. UI routes, breadcrumbs, sidebar positions, REST endpoints, test paths, and companion files are all derived from code paths. Why: folders are what the filesystem, git, and the IDE navigate by — deriving the other artifacts means they're always in sync with reality, not a stale hand-maintained list. This is the default direction for derivation when nothing yet exists; during refactors, principle #2 applies.
Bidirectional simplification (two-way street). When two components in the chain share a structural relationship — code ↔ folder, folder ↔ route, route ↔ REST endpoint, route ↔ breadcrumb ↔ sidebar, code ↔ test (mirror), code ↔ companion, model ↔ SQL table, descriptor catalog ↔ generated form — always consider adjusting either side to simplify the other. The right fix is whichever change makes the joint system smaller and more consistent: sometimes rename a controller to match a clean route, sometimes rename the route to match a clean controller; sometimes move a file to match its sidebar position, sometimes restructure the sidebar to match the file. Do not treat one side as immutable. Why: principle #1 sets the default derivation direction when nothing yet exists. During refactors, both sides are existing artifacts; treating either as sacred forces ugly names on the other for no engineering benefit. The rule keeps the joint system the focus, not the individual side. How to apply: propose the rename that produces (a) the smaller diff, (b) the cleaner naming, and (c) the fewer downstream renames. Exceptions: extremely rare when all components live in one solution. Hard exceptions — a wire format other systems already consume, a schema with external readers, a public API contract you don't own — must be named explicitly in .instructions.md before any workaround is added. Reference-based pairs (markup ↔ CSS) follow the same principle but are owned by layout-guidelines.instructions.md; convention-only pairs ({Name} ↔ {Name}Service ↔ I{Name}Repository) follow it under developer.instructions.md.
The expectation invariant: any one layer must let a reader imagine the others — divergence is a defect. Looking at a sidebar entry like {Sub} > {Name} should let any developer or AI predict, without searching: the code path ({Project}/{Sub}/{Name}.{ext}), the URL (/{Sub}/{Name}), the breadcrumb (Home > {Sub} > {Name}), the test path ({Project}.Tests/{Sub}/{Name}Tests.cs), and — when an SSOT direction is declared — the SQL table (dbo.{Name} or similar) and the model file. The reverse must also hold: opening any code file should let a reader predict its sidebar entry, URL, breadcrumb, REST equivalent, and test path. Why: mirrored layers turn navigation into a free reference index — every "where is X?" question becomes a string transform instead of a grep. The moment any layer stops mirroring, every future read of the codebase pays a search tax that compounds with every new file. How to apply: before placing a new file, mentally derive the sidebar entry, URL, and test path it implies; if any of those would surprise a careful reader, fix the placement, not the entry — and use principle #2 to decide which side moves. Exceptions: genuinely rare — must be declared in .instructions.md with an explicit "why" (compliance constraint, third-party contract, externally-frozen schema, historical migration). An undeclared deviation is always a defect — its strongest signal is the off-convention code in §5; a declared deviation is a recorded override.
Name-mapping correspondences have a per-project canonical direction. SQL table ↔ model class can have either side as SSOT — Code-First (model canonical, SQL generated by EF migrations) or Database-First (SQL canonical, models generated by a script). Why: the choice depends on who owns the schema and who consumes it. The per-project .instructions.md declares the direction (see §4); the deviation report respects it — drift means the generated side is stale, never the canonical side.
Opinionated defaults per stack, explicit overrides per project. The skill ships default patterns in references/. A repo records its actual patterns in .ai/solution-patterns.instructions.md — that file overrides the defaults. Why: one-size-fits-all fights Angular's deliberate divergence from route=folder mirroring; no-defaults-at-all fails green-field projects that have nothing declared yet.
Record deviations, don't silently enforce. When a file deviates from both the project's declared pattern AND the stack default, flag it with a deviation code. Recommend moving only when the deviation is arbitrary ("the developer had no information on expected patterns when they created it") — not when the .instructions.md documents an intentional choice. Why: a flagged mismatch is a conversation, not a build failure. Projects evolve faster than rewrites.
The CSV is generated; the .instructions.md is written by humans. scripts/pattern_map.py regenerates .ai/solution-patterns.csv on demand. Never hand-edit the CSV — it gets overwritten. Never auto-generate the .instructions.md (except as a first draft during onboarding) — its value is the human reasoning behind each override. Why: mixing generated and hand-written data in one file guarantees losing one or the other.
Every rule in the skill has a Why. If you can't explain the motivation for a pattern, it's dogma the next AI will misapply. Why: (the rule itself is the demonstration.)
Prefer subtraction. Remove any stack rule, default, or deviation code that earns its keep fewer than 1 call in 20. Why: this file must stay under ~400 lines or it stops being loaded as reference and starts being skipped as noise.
Once scripts/detect_stack.py has identified the stack(s) in the repo, load only the reference file(s) you actually need:
| Stack signal (auto-detected) | Reference file | Scope |
|---|---|---|
angular.json or @angular/core in package.json | references/angular-patterns.md | Component-set folder convention, lazy routes, feature folders |
next.config.js / next.config.ts or "next" in package.json | references/nextjs-patterns.md | app/ or pages/ → URL segments |
.csproj with Microsoft.NET.Sdk.Web + any Pages/ or Controllers/ folder | references/razor-patterns.md | Razor Pages + MVC + minimal-API variants |
.csproj with <UseWPF>true</UseWPF> / <UseWinUI>true</UseWinUI> / <UseWindowsForms>true</UseWindowsForms> | references/wpf-winui-patterns.md | WPF, WinUI 3, WinForms — Views/Controls/ViewModels → menu breadcrumb + AutomationId |
Architecture/ folder with a multi-environment hosts/IP/cluster plan, OR an ## Network patterns block in .ai/solution-patterns.instructions.md | references/network_patterns.md | Deployment-side spine: server name → IP → DNS → port → cluster, across LIVE/UAT/DEV (with Azure CAF alignment for cloud / hybrid repos). Loaded in addition to the code-side stack references |
.sln / .slnx whose project files follow {Company}.{Solution}.{Feature}.{Project}.{ext}, OR an ## Project patterns block in .ai/solution-patterns.instructions.md | references/project_patterns.md | Build/install-side spine: project name → namespace → folder → install path → server-suffix tier (the bridge to network_patterns.md). Loaded alongside code-side and network references |
Repos with multiple stacks (e.g. ASP.NET Core + WPF in the same solution) load all matching reference files. Each stack owns its rows in the CSV independently.
Two files, both at .ai/ inside the target repo — never inside the skill itself:
.ai/solution-patterns.instructions.md (human-written, overrides defaults)Minimal shape — the AI drafts this during onboarding; the human confirms and edits:
# Solution Patterns — declared for this repo
## Detected stacks
- aspnet-core (from `{WebProject}/{WebProject}.csproj` — `Microsoft.NET.Sdk.Web`)
- sql-data (from `{DataProject}/{DataProject}.sqlproj`)
## SSOT directions
For correspondences where either side could in principle be canonical, declare which is.
### sql-model
- **Canonical side:** SQL Data project (`{DataProject}/{DataProject}.sqlproj`).
- **Generated side:** model classes under `{WebProject}/Data/`.
- **Generator:** `{WebProject}/Data/Generate-Models.ps1`.
- **Why:** schema is shared with other systems and DBA-owned; models are a consumer view.
- **Implication for the deviation report:** if a model drifts from its table, the *model* is stale — regenerate. Hand-edits to generated model files are flagged as `manual-edit-of-generated`.
## Overrides
### aspnet-core
- `http_api = <flat>` — minimal-hosting endpoints registered in `{WebProject}/Api/ApiEndpoints.cs`; no `Controllers/` or per-resource files.
- **Why:** the API is a small façade; full MVC controllers would add ceremony for no benefit.
- **Recommended future direction:** if endpoints grow past ~15, split into `{WebProject}/Api/{Area}Endpoints.cs`..ai/solution-patterns.csv (generated, one row per artifact)One row per code file. Columns — names are the contract, don't rename them. Path-derivable correspondences get a column; reference-based and convention-only ones don't (they're owned by layout-guidelines.instructions.md and developer.instructions.md respectively).
| Column | Example | Source |
|---|---|---|
CodePath | {Project}/{Sub}/{Name}.cs | Filesystem scan (primary key). |
Role | page, endpoint, desktop-view, view-model, companion, model, service, style, test | Inferred from extension + name suffix via the stack's reference file. |
ExpectedNavPath | /{Sub}/{Name} (page); {VERB} /api/{path} (endpoint); {Top} > {Sub} > {Name} (desktop-view). Blank when Role is not navigation-facing. Interpretation depends on Role. | Stack default, overridable via .instructions.md. |
ActualNavPath | Read from route table / endpoint registration / nav XAML / attribute routes. | Stack-specific discovery (see references/{stack}-patterns.md). |
ExpectedCompanionPath | {Sub}/{Name}.cshtml for {Name}.cshtml.cs; {Sub}/{Name}.xaml.cs for {Name}.xaml; ViewModels/{Name}ViewModel.cs for Views/{Name}.xaml. Blank when Role has no companion. | Companion rule from stack reference. |
ActualCompanionPath | Filesystem scan. | |
ExpectedTestPath | {Project}.Tests/{Sub}/{Name}Tests.cs | qa-tester §5.2 mirror. |
ActualTestPath | Filesystem scan + @under-test header lookup (reuses qa-tester logic). | |
ExpectedSqlTable | dbo.{Name} — only set when the project declares an sql-model SSOT direction in .instructions.md. Blank otherwise. | Per-project SSOT block. |
ActualSqlTable | Read from sqlproj / migration files. | |
Deviation | enum (see §5) | Computed. |
Notes | AutomationId={Screen}.{Element} or See override: aspnet-core.http_api | Free text. Only set when the AI has a concrete remark. |
Why a CSV, not JSON/YAML: Excel-native, diffable in PR review, trivially grep-able, and the column contract forces a flat shape. Power Query can refresh an Excel view straight from the file — see assets/ for an optional template (deferred for v1).
.ai/solution-patterns.nav.json (derived sidecar — DO NOT hand-edit)Generated from the CSV by pattern_map.py. Three projections of the URL tree, computed from Role=page rows + their ExpectedNavPath + page titles:
{ "/Agents/Jobs": { codePath: "...", title: "Jobs" }, ... } — every page keyed by route.{ "/Agents/Jobs": ["Home", "Agents", "Jobs"], ... } — each route's parent walk joined into a breadcrumb.{ name, route, children: [...] } — pages grouped by URL parent into a navigable tree.These are pure projections — never hand-edit; regenerate. They give the AI human-readable navigation without bloating CSV columns. Compare this sidecar against the project's actual sidebar source (e.g. a NavTree.cs, sidebar XAML, or _Layout.cshtml partial — exact location lives in the per-project .instructions.md) to catch nav-tree drift from the route truth.
| Code | Meaning | Agent action |
|---|---|---|
none | All Expected* columns either match their Actual* counterpart or are blank. | Continue. |
nav-mismatch | ExpectedNavPath is discoverable but differs from ActualNavPath (route, REST endpoint, or desktop breadcrumb depending on Role). | Open .instructions.md; if an override explains it, record as accepted. Otherwise recommend the expected path (may be declined). |
nav-missing | Code file is navigation-facing but no route / endpoint / menu reference was found. | File may be orphaned, lazy-loaded via a non-standard mechanism, or dead. Ask the user. |
companion-missing | Role has a companion rule but ActualCompanionPath doesn't exist (e.g. .cshtml without .cshtml.cs, or vice versa). | Create the missing companion or remove the orphan after confirming with the user. |
test-missing | ExpectedTestPath does not exist. | Defer to qa-tester's §5.4 locate-or-create algorithm. |
test-relocated | A test exists at a different path but its @under-test header points at this file. | Leave in place; add // TODO: relocate to {expected} per qa-tester §5.4. |
sql-model-stale | ExpectedSqlTable is set, both sides exist, but their shapes (column set, types) disagree AND the .instructions.md declares a canonical side. | Regenerate the generated side using the declared generator (e.g. Generate-Models.ps1). Never hand-edit the generated artifact to "fix" the drift. |
manual-edit-of-generated | Hand-edit detected on a file that the .instructions.md declares as generated (e.g. by file header marker, [GeneratedCode] attribute, or known generator-output path). | Revert the manual edit and re-run the generator; if the change must persist, update the canonical side (the SQL schema, in this repo's case) and regenerate. |
off-convention | The code path itself doesn't match any recognised pattern for the detected stack — a reader cannot predict the sidebar entry, URL, or test path from the file's location. Violates the §2 expectation invariant. | The strongest signal of inconsistency. Recommend rename unless .instructions.md documents an explicit override with a "why" (compliance, third-party contract, externally-frozen schema, declared historical migration). Undeclared off-convention rows should always be raised as defects, not accepted silently. |
Append-only rule: add a new code when you genuinely can't fit a deviation into the existing set, not when an existing code feels "almost right".
Run these in order. Each is idempotent; re-running costs nothing.
python .claude/skills/solution-patterns/scripts/detect_stack.py --json → list of stacks (wpf, winui, winforms, aspnet-core, angular, nextjs). Zero matches → the skill has nothing to offer for this repo; exit gracefully..ai/solution-patterns.instructions.md (if it doesn't exist): populate ## Detected stacks with evidence (the .csproj / package.json line that matched), leave ## Overrides empty. Ask the user to confirm before proceeding — they may know about a stack the auto-detector missed.python .../scripts/pattern_map.py writes .ai/solution-patterns.csv. Output is deterministic — safe to commit.python .../scripts/validate_patterns.py prints a summary by deviation code and highlights any off-convention rows. For each non-none row, show the user the reason and ask whether to (a) accept and record in .instructions.md as an override, (b) plan a rename, or (c) defer.Before creating, renaming, or relocating any page, endpoint, view, view-model, model, companion file, or test:
.ai/solution-patterns.instructions.md — declared overrides and SSOT directions supersede stack defaults..ai/solution-patterns.csv for the file you're about to touch (or the file that should exist). The row already answers all the predictable questions: where should it live? what's its expected route / REST endpoint / breadcrumb? what's its expected companion? what's its expected test path? what SQL table does it correspond to (if any)?page, predict the test path AND companion path AND nav position in advance — they should all land on the first try..instructions.md) and re-run the declared generator. Hand-edits to the generated side trigger manual-edit-of-generated.python .../scripts/pattern_map.py --affected <paths> refreshes only the affected rows AND regenerates the .nav.json sidecar. Commit the CSV + sidecar alongside the code change — the diff shows the structural impact in a single glance.Shortcut for "where does X go?" questions: the CSV alone answers. No need to rerun detection or validation.
references/{stack}-patterns.mdWhen a repo needs a stack we don't ship a reference for, add it. The reference file must define:
detect_stack.py looks for (file name, config key, NuGet/npm package). One regex or one filesystem probe.Role column enum. Example for Angular: *.component.ts → ui-view, *.service.ts → service, *.module.ts → module.page: src/app/{feature}/{name}-page/{name}-page.component.ts → /{feature}/{name} (derived from Routes declaration, not from folder alone — see the file).page: Pages/{Area}/{Name}.cshtml → /{Area}/{Name}.endpoint: row in Api/ApiEndpoints.cs → {verb} /api/{path} (when http_api = <flat> override is in effect).desktop-view: Controls/{Name}Panel.xaml → menu breadcrumb via the nearest MenuItem/TabItem in MainWindow.xaml whose Content loads this control..cshtml ↔ .cshtml.cs (Razor), View.xaml ↔ View.xaml.cs (WPF code-behind), View.xaml ↔ ViewModel.cs (WPF MVVM pairing — declare which convention this repo uses).Keep each reference under ~150 lines. When a rule applies to all stacks, it belongs in this SKILL.md, not in a stack file.
pattern_map.py. Put the rule in .instructions.md overrides instead..instructions.md. If the rule applies to every Angular repo, it belongs in references/angular-patterns.md. The per-project file is for this repo's choices.solution-patterns without qa-tester. The ExpectedTestPath / ActualTestPath columns depend on qa-tester's §5.2 mirror rule and @under-test headers. Without qa-tester, those two columns are blank and the deviation report loses its strongest signal..instructions.md documents an override. The override is the declared truth for this repo. Recommend only when no override explains the deviation — and even then, propose, don't rewrite.This skill lives in .ai/skills/solution-patterns/, the single source of truth. After editing any file here, run the sync pipeline so the skill appears under .claude/skills/, .roo/skills/, .github/skills/:
python .ai/skills/ai-self-improvement/scripts/sync_agent_assets.py AUTOSee ../ai-self-improvement/SKILL.md for how the fan-out is configured.
references/ or scripts/.CodePath, Role, ExpectedNavPath, ActualNavPath, ExpectedCompanionPath, ActualCompanionPath, ExpectedTestPath, ActualTestPath, ExpectedSqlTable, ActualSqlTable, Deviation, Notes without updating every script and every consuming skill. Adding a column at the end is safe; renaming or reordering is not. Note: the v0 column names ExpectedUiPath / ActualUiPath were renamed to ExpectedNavPath / ActualNavPath to reflect that one column covers route, REST endpoint, and desktop breadcrumb (interpretation per Role). No CSVs were deployed under the old names; future renames must be migration-flagged.qa-tester/scripts/test_map.py and is the contract with calling AIs.pattern_map.py output must be deterministic (sorted rows, stable column order, UTF-8, LF line endings). Why: unstable CSVs produce noisy PR diffs that obscure real structural changes.qa-tester — Code ↔ Test mirror, @under-test headers, impact-scoped test selection. This skill reuses qa-tester's mirror rule to populate the test columns of the CSV.ai-self-improvement — how and where to edit skills, the sync pipeline.repository-analysis — broader repo architecture mapping. Useful companion when onboarding, but coarser-grained than this skill's per-file table.© JocysCom, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (scripts, references) in .ai/skills/solution-patterns of JocysCom/FocusLogger.
Open the folder on GitHubat commit b32c096
Solution Patterns next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Solution Patterns this skillJocysCom/FocusLogger | 213 | — | ~8k | Automated safety check: Pass | GPL-3.0 | |
| Markdown Article FormatterJimLiu/baoyu-skills | 26k | 6 repos | ~3.5k | Automated safety check: Pass | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| Obsidian MarkdownAtmosphere/atmosphere | 3.8k | 20 repos | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| DOCXrvdbreemen/OTGW-firmware | 207 | 33 repos | ~4.3k | Automated safety check: Pass | Proprietary | |
| Gzh Designisjiamu/gzh-design-skill | 3.9k | 1 repos | ~2.2k | Automated safety check: Pass | AGPL-3.0 |
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
Atmosphere/atmosphere
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax.
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
isjiamu/gzh-design-skill
微信公众号文章排版引擎,将 Markdown 转换为可直接粘贴到公众号编辑器的 HTML。主题风格从 references/theme-index.md 注册的自定义主题库中选取,自动章节编号、关键词下划线标记、引言卡片、目录导航、代码块、图片/GIF、作者签名。支持 Markdown / Word(.docx) / PDF / 纯文本输入(非 Markdown…
HKUDS/DeepTutor
Reads, creates and edits Word .docx files with python-docx, and drops to raw OOXML for tracked changes, comments and byte-exact edits.
JocysCom/FocusLogger
Update, create, improve, and synchronise this repository's AI agent instructions and related assets (including skills).
JocysCom/FocusLogger
Create and maintain automated tests in Microsoft-native/.NET projects with a minimal stack — MSTest runner, System.Windows.Automation for Windows desktop, Playwright for real browser smoke.
JocysCom/FocusLogger
Rasterize specific mermaid blocks inside a markdown file into PNG images.
JocysCom/FocusLogger
Gather, improve, and curate repository documentation and wiki content.
JocysCom/FocusLogger
AI-assisted pull request review workflow for Azure DevOps Git repositories.
JocysCom/FocusLogger
Generate or refresh .ai/repository-analysis.instructions.md whenever the user needs a repository-wide map of architecture, projects, technology stack, developer workflows, CI/testing, documentation…
Categories
Establish and enforce deterministic path patterns across Code ↔ UI route/menu ↔ Test for any project. Solution Patterns is an agent skill from JocysCom/FocusLogger. Establish and enforce deterministic path patterns across Code ↔ UI route/menu ↔ Test for any project.
Solution Patterns fits situations like: onboarding a repo (generates .ai/solution-patterns.instructions.md + .ai/solution-patterns.csv); auditing a project for structural consistency; asked where does X live?; whenever the user mentions folder layout.
Run `npx skills add JocysCom/FocusLogger --skill solution-patterns -a claude-code`. Or copy the skill folder (.ai/skills/solution-patterns in JocysCom/FocusLogger) into .claude/skills/solution-patterns in your project. Claude Code loads it when a task matches its description.
Run `npx skills add JocysCom/FocusLogger --skill solution-patterns -a codex`. Or copy the skill folder (.ai/skills/solution-patterns in JocysCom/FocusLogger) into .agents/skills/solution-patterns in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add JocysCom/FocusLogger --skill solution-patterns -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/solution-patterns, .gemini/skills/solution-patterns, .github/skills/solution-patterns and .opencode/skills/solution-patterns in your project.
Going by SKILL.md and its folder, Solution Patterns needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Solution Patterns is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 8k tokens (SKILL.md is roughly 32k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 13k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Solution Patterns: Markdown Article Formatter (JimLiu/baoyu-skills, 26k stars), Markitdown (ImCa0/just-laws, 781 stars), Obsidian Markdown (Atmosphere/atmosphere, 3.8k stars) and DOCX (rvdbreemen/OTGW-firmware, 207 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
JocysCom (a GitHub organization) maintains it in JocysCom/FocusLogger, which has 213 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on June 30, 2026.
Source: JocysCom/FocusLogger on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.