Skip to content

Commit e3e8463

Browse files
TMHSDigitalclaude
andcommitted
docs: remove drift and personal tooling from contributor docs
Docs drift (#110): no doc references the nonexistent docs/style.css or docs/script.js any more (the catalog is one index.html with inline CSS and JS); registry examples drop the removed per-tool version field and gain category; hardcoded standards counts (9, 17, 18; the real number is 19) are replaced by a pointer to standards/README.md; AGENTS.md no longer claims release.yml ignores docs changes; release-doc-sync and drift-check pin guidance matches the floating tags release.yml maintains (@v1, @vMAJOR.MINOR); standards examples use current action majors; the adding-a-tool walkthrough reflects scaffold auto-registration and the real CLI license value; PERFORMANCE.md is labeled a historical baseline. Writing style (#111): the personal context-mode routing block moves out of the committed CLAUDE.md into a gitignored CLAUDE.local.md, and every em and en dash in tracked files is replaced. A test enforcing the style rule lands with the next commit. Closes #110 Closes #111 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
1 parent e01c2cc commit e3e8463

29 files changed

Lines changed: 91 additions & 149 deletions

‎.cursorrules‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ You are working on Developer Tools Directory, a meta-repository that catalogs, s
33
## Repo structure
44

55
- `registry.json` -- single source of truth for all 9 tool repos (name, type, counts, links, status)
6-
- `standards/` -- 18 Markdown docs defining conventions (folder structure, CI/CD, manifests, pages, commits, README, AGENTS.md, versioning, and more)
6+
- `standards/` -- Markdown docs defining conventions (folder structure, CI/CD, manifests, pages, commits, README, AGENTS.md, versioning, and more)
77
- `scaffold/create-tool.py` -- Python repo generator using Jinja2 templates
88
- `scaffold/templates/` -- Jinja2 templates producing a standards-compliant repo
99
- `site-template/` -- shared GitHub Pages build system for tool repos (build_site.py + template.html.j2 + fonts)
10-
- `docs/` -- static GitHub Pages catalog site (index.html, style.css, script.js)
10+
- `docs/` -- static GitHub Pages catalog site (single index.html with inline CSS and JS)
1111
- `assets/` -- logo image
1212
- `.github/workflows/` -- CI/CD for this repo (validate, pages, stale, codeql, dependency-review, release, release-drafter, label-sync)
1313
- `AGENTS.md` -- AI agent guidance for this repo
@@ -66,8 +66,7 @@ Use conventional commits. Prefix determines changelog category:
6666
## When editing docs/
6767

6868
- `docs/index.html` is the catalog site entry point.
69-
- `docs/script.js` fetches `registry.json` at runtime and renders tool cards. It also has an embedded fallback copy.
70-
- `docs/style.css` is the full stylesheet -- dark theme, responsive, card layout.
69+
- All CSS and JS are inline in `docs/index.html`. Cards, filters, and stats are pre-rendered by `scripts/sync_from_registry.py`; the inline script adds search and filtering.
7170
- No external dependencies (CDNs, frameworks). Vanilla HTML/CSS/JS only.
7271
- The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` at deploy time.
7372

‎.github/actions/drift-check/action.yml‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@
2020
# 5. Writes a step summary and exposes counts as outputs so the calling
2121
# workflow can branch on them.
2222
#
23-
# Pinning rule: tool repos MUST consume this action via @v1.7 (or a SHA),
24-
# never @main. The drift checker's release pipeline maintains the v1.7 tag
25-
# pointing at the latest 1.7.x. Q9 of the design doc explains why @main is
26-
# forbidden for tool-repo callers (would break every tool-repo PR on
27-
# unrelated meta-repo changes).
23+
# Pinning rule: tool repos MUST consume this action via a floating
24+
# @vMAJOR.MINOR tag (or a SHA), never @main. The meta-repo's release.yml
25+
# moves vMAJOR and vMAJOR.MINOR to each release; the scaffold emits the pin
26+
# derived from the meta VERSION at generation time. A minor tag stops moving
27+
# once the next minor ships, so bump older pins (for example @v1.9) to pick
28+
# up checker fixes. @main is forbidden for tool-repo callers because it would
29+
# break every tool-repo PR on unrelated meta-repo changes.
2830
# =============================================================================
2931

3032
name: 'Agent-file drift check'

‎.gitignore‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,6 @@ site-audit-evidence/pr4-sc-light.png
6262
site-audit-evidence/sc-dark-390.png
6363
site-audit-evidence/sc-dark-1280.png
6464
site-audit-evidence/sc-light-1280.png
65+
66+
# Personal, machine-specific assistant instructions (not project docs)
67+
CLAUDE.local.md

‎AGENTS.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ This file tells AI coding agents how the Developer Tools Directory repo works an
99
This is a **meta-repository** -- it does not contain a Cursor plugin or MCP server itself. It catalogs, standardizes, and scaffolds other TMHSDigital developer tool repos. It contains:
1010

1111
- **`registry.json`** -- single source of truth for all tool repos. README, CLAUDE.md, and the catalog site's embedded registry are generated from it by `scripts/sync_from_registry.py`.
12-
- **`standards/`** -- 18 Markdown docs defining conventions for folder structure, CI/CD, plugin manifests, GitHub Pages, commits, README format, AGENTS.md format, versioning, release-doc-sync, testing, skills, rules, MCP servers, security, licensing, scope, lifecycle, and writing style.
12+
- **`standards/`** -- Markdown docs defining conventions for folder structure, CI/CD, plugin manifests, GitHub Pages, commits, README format, AGENTS.md format, versioning, release-doc-sync, testing, skills, rules, MCP servers, security, licensing, scope, lifecycle, and writing style.
1313
- **`scaffold/`** -- Python repo generator (`create-tool.py`) with Jinja2 templates that produce a fully standards-compliant new tool repo.
1414
- **`scripts/`** -- automation utilities. `sync_from_registry.py` regenerates all derived artifacts from `registry.json`.
1515
- **`site-template/`** -- shared GitHub Pages build system for tool repos. `build_site.py` reads `.cursor-plugin/plugin.json`, `site.json`, `skills/`, `rules/`, and `mcp-tools.json` from a tool repo and renders `docs/index.html` via `template.html.j2`. Self-hosts Inter and JetBrains Mono fonts. Tool repos clone this directory in CI and run the build script at deploy time.
@@ -50,7 +50,7 @@ Every PR must pass these 7 checks before it can be merged:
5050

5151
Checks:
5252
- `registry.json` is valid JSON with correct schema (required fields, valid types, integer counts)
53-
- `docs/index.html`, `docs/style.css`, `docs/script.js` exist
53+
- `docs/index.html` exists
5454
- `scaffold/create-tool.py` compiles without syntax errors
5555
- Scaffold dry-run test: generates a test repo and verifies key files exist
5656

@@ -61,7 +61,7 @@ Checks:
6161
3. Uploads `docs/` as a Pages artifact
6262
4. Deploys to GitHub Pages via `actions/deploy-pages`
6363

64-
### `release.yml` (runs on push to main, ignores docs/md/standards changes)
64+
### `release.yml` (runs on every push to main)
6565

6666
1. `check-version` reads `VERSION` at the repo root and compares it with the latest git tag
6767
2. If they match, the workflow exits cleanly - no release needed
@@ -233,8 +233,8 @@ Pure documentation -- no code. Each file documents a convention derived from ana
233233
## When editing docs/ (catalog site)
234234

235235
- `docs/index.html` is the single-page catalog site. It embeds a copy of `registry.json` inside a `<script type="application/json" id="registry-data">` tag as a fallback for when the direct fetch fails.
236-
- `docs/script.js` fetches `registry.json` at runtime. If the fetch fails, it reads the embedded copy. It renders aggregate stats (total skills, rules, MCP tools) and tool cards with filtering by type and topic.
237-
- `docs/style.css` contains all styling -- dark theme, responsive layout, card design. No CSS framework.
236+
- All CSS and JS are inline in `docs/index.html`; there is no separate stylesheet or script file. The inline script fetches `registry.json` at runtime (falling back to the embedded copy) and adds search, category and status filters, and URL state on top of cards that `sync_from_registry.py` pre-renders.
237+
- Never edit the generated regions by hand (`registry:cards`, `registry:filters`, the embedded JSON blocks, hero stats); change `registry.json` and run `python scripts/sync_from_registry.py`.
238238
- **No external CDN dependencies.** The site must work fully offline except for badge images. No jQuery, no Bootstrap, no Google Fonts.
239239
- The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` at deploy time. You do not need to manually place these files in `docs/`.
240240
- When testing locally, open `docs/index.html` directly in a browser. The embedded fallback will kick in since `registry.json` won't be in `docs/` locally.

‎CLAUDE.md‎

Lines changed: 7 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Developer Tools Directory is a **meta-repository** that catalogs, standardizes,
1616
```
1717
Developer-Tools-Directory/
1818
registry.json # Source of truth for all tool repos
19-
standards/ # 18 convention docs (structure, CI/CD, testing, MCP, security, licensing, etc.)
19+
standards/ # Convention docs (structure, CI/CD, testing, MCP, security, licensing, etc.)
2020
scaffold/
2121
create-tool.py # Python repo generator (Jinja2)
2222
templates/ # Jinja2 templates for new repos
@@ -28,9 +28,9 @@ Developer-Tools-Directory/
2828
fonts/ # Self-hosted Inter + JetBrains Mono woff2
2929
SETUP-PROMPT.md # Copy-paste prompt for applying template to a repo
3030
docs/
31-
index.html # GitHub Pages catalog site
32-
style.css # Dark theme, responsive, card layout
33-
script.js # Fetches registry.json, renders cards, filters
31+
index.html # GitHub Pages catalog site (inline CSS and JS)
32+
search-index.json # Skill/rule/MCP-tool names for search (aggregate_search.py)
33+
robots.txt, sitemap.xml # Generated by sync_from_registry.py
3434
.well-known/security.txt # RFC 9116 security contact
3535
contributors/ # Worked examples for new contributors
3636
assets/
@@ -47,7 +47,7 @@ Developer-Tools-Directory/
4747

4848
### registry.json
4949

50-
Array of tool objects. Each entry has: `name`, `repo`, `slug`, `description`, `type` (cursor-plugin | mcp-server), `homepage`, `skills`, `rules`, `mcpTools`, `extras`, `topics`, `status`, `language`, `license`, `pagesType`, `hasCI`. `status` is one of `experimental`, `beta`, `active`, `maintenance`, `deprecated`, or `archived` (see [`standards/lifecycle.md`](standards/lifecycle.md)).
50+
Array of tool objects. Each entry has: `name`, `repo`, `slug`, `description`, `type` (cursor-plugin | mcp-server), `category` (catalog filter chip; allowed values in `scripts/validate_registry.py`), `homepage`, `skills`, `rules`, `mcpTools`, `extras`, `topics`, `status`, `language`, `license`, `pagesType`, `hasCI`. `status` is one of `experimental`, `beta`, `active`, `maintenance`, `deprecated`, or `archived` (see [`standards/lifecycle.md`](standards/lifecycle.md)).
5151

5252
There is intentionally no per-tool `version` field. Tool repos auto-bump patch on every content merge, so a catalog-pinned patch version re-stales on each tool's next content PR; the catalog tracks tools by repo and homepage instead. Do not reintroduce it.
5353

@@ -67,11 +67,11 @@ Templates in `scaffold/templates/` produce: GitHub Actions workflows, README.md,
6767

6868
### docs/ (catalog site)
6969

70-
Static HTML/CSS/JS. No build step. No external CDN. The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` at deploy time. `script.js` fetches `registry.json` at runtime and falls back to an embedded copy. Never use `innerHTML`/`eval` with registry data - the safety-scan CI job blocks reintroduction.
70+
Static single page; all CSS and JS are inline in `docs/index.html` (there is no separate stylesheet or script file). No build step. No external CDN. `sync_from_registry.py` pre-renders the tool cards, filter chips, and hero stats so the page works without JavaScript; the inline script fetches `registry.json` at runtime (falling back to the embedded copy) and layers search and filtering on top. The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` and stamps the footer date at deploy time. Refresh search data with `python site-template/aggregate_search.py --clone`. Never use `innerHTML`/`eval` with registry data - the safety-scan CI job blocks reintroduction.
7171

7272
### standards/
7373

74-
17 Markdown documents defining conventions for every tool repo. Index in [`standards/README.md`](standards/README.md).
74+
Markdown documents defining conventions for every tool repo. The index in [`standards/README.md`](standards/README.md) is the authoritative list (and the catalog site renders a card per file).
7575

7676
## Cataloged Tools
7777

@@ -180,66 +180,3 @@ Open `docs/index.html` in a browser. The script falls back to embedded registry
180180
| Jinja2 >=3.1,<4.0 | Scaffold template rendering | `requirements.txt` |
181181

182182
The docs site has zero runtime dependencies. The sync script is pure stdlib.
183-
184-
# context-mode — MANDATORY routing rules
185-
186-
You have context-mode MCP tools available. These rules are NOT optional — they protect your context window from flooding. A single unrouted command can dump 56 KB into context and waste the entire session.
187-
188-
## BLOCKED commands — do NOT attempt these
189-
190-
### curl / wget — BLOCKED
191-
Any Bash command containing `curl` or `wget` is intercepted and replaced with an error message. Do NOT retry.
192-
Instead use:
193-
- `ctx_fetch_and_index(url, source)` to fetch and index web pages
194-
- `ctx_execute(language: "javascript", code: "const r = await fetch(...)")` to run HTTP calls in sandbox
195-
196-
### Inline HTTP — BLOCKED
197-
Any Bash command containing `fetch('http`, `requests.get(`, `requests.post(`, `http.get(`, or `http.request(` is intercepted and replaced with an error message. Do NOT retry with Bash.
198-
Instead use:
199-
- `ctx_execute(language, code)` to run HTTP calls in sandbox — only stdout enters context
200-
201-
### WebFetch — BLOCKED
202-
WebFetch calls are denied entirely. The URL is extracted and you are told to use `ctx_fetch_and_index` instead.
203-
Instead use:
204-
- `ctx_fetch_and_index(url, source)` then `ctx_search(queries)` to query the indexed content
205-
206-
## REDIRECTED tools — use sandbox equivalents
207-
208-
### Bash (>20 lines output)
209-
Bash is ONLY for: `git`, `mkdir`, `rm`, `mv`, `cd`, `ls`, `npm install`, `pip install`, and other short-output commands.
210-
For everything else, use:
211-
- `ctx_batch_execute(commands, queries)` — run multiple commands + search in ONE call
212-
- `ctx_execute(language: "shell", code: "...")` — run in sandbox, only stdout enters context
213-
214-
### Read (for analysis)
215-
If you are reading a file to **Edit** it → Read is correct (Edit needs content in context).
216-
If you are reading to **analyze, explore, or summarize** → use `ctx_execute_file(path, language, code)` instead. Only your printed summary enters context. The raw file content stays in the sandbox.
217-
218-
### Grep (large results)
219-
Grep results can flood context. Use `ctx_execute(language: "shell", code: "grep ...")` to run searches in sandbox. Only your printed summary enters context.
220-
221-
## Tool selection hierarchy
222-
223-
1. **GATHER**: `ctx_batch_execute(commands, queries)` — Primary tool. Runs all commands, auto-indexes output, returns search results. ONE call replaces 30+ individual calls.
224-
2. **FOLLOW-UP**: `ctx_search(queries: ["q1", "q2", ...])` — Query indexed content. Pass ALL questions as array in ONE call.
225-
3. **PROCESSING**: `ctx_execute(language, code)` | `ctx_execute_file(path, language, code)` — Sandbox execution. Only stdout enters context.
226-
4. **WEB**: `ctx_fetch_and_index(url, source)` then `ctx_search(queries)` — Fetch, chunk, index, query. Raw HTML never enters context.
227-
5. **INDEX**: `ctx_index(content, source)` — Store content in FTS5 knowledge base for later search.
228-
229-
## Subagent routing
230-
231-
When spawning subagents (Agent/Task tool), the routing block is automatically injected into their prompt. Bash-type subagents are upgraded to general-purpose so they have access to MCP tools. You do NOT need to manually instruct subagents about context-mode.
232-
233-
## Output constraints
234-
235-
- Keep responses under 500 words.
236-
- Write artifacts (code, configs, PRDs) to FILES — never return them as inline text. Return only: file path + 1-line description.
237-
- When indexing content, use descriptive source labels so others can `ctx_search(source: "label")` later.
238-
239-
## ctx commands
240-
241-
| Command | Action |
242-
|---------|--------|
243-
| `ctx stats` | Call the `ctx_stats` MCP tool and display the full output verbatim |
244-
| `ctx doctor` | Call the `ctx_doctor` MCP tool, run the returned shell command, display as checklist |
245-
| `ctx upgrade` | Call the `ctx_upgrade` MCP tool, run the returned shell command, display as checklist |

‎CONTRIBUTING.md‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Thank you for your interest in contributing. This guide covers everything you ne
2424
```
2525
Developer-Tools-Directory/
2626
registry.json # Tool catalog (source of truth)
27-
standards/ # Convention documentation (18 docs)
27+
standards/ # Convention documentation (see standards/README.md)
2828
scaffold/
2929
create-tool.py # Repo generator script
3030
templates/ # Jinja2 templates for new repos
@@ -48,15 +48,14 @@ Developer-Tools-Directory/
4848
"slug": "your-tool-repo",
4949
"description": "One-line description of the tool",
5050
"type": "cursor-plugin",
51+
"category": "developer-tooling",
5152
"homepage": "https://tmhsdigital.github.io/Your-Tool-Repo/",
5253
"skills": 0,
5354
"rules": 0,
5455
"mcpTools": 0,
5556
"extras": {},
56-
"npm": "",
5757
"topics": ["topic-1", "topic-2"],
5858
"status": "active",
59-
"version": "0.1.0",
6059
"language": "Python",
6160
"license": "CC-BY-NC-ND-4.0",
6261
"pagesType": "static",
@@ -198,9 +197,8 @@ Templates use Jinja2. Available context variables:
198197

199198
The catalog site lives in `docs/` and is vanilla HTML/CSS/JS with zero dependencies.
200199

201-
- `docs/index.html` - page structure, embedded registry fallback
202-
- `docs/style.css` - dark theme, responsive cards
203-
- `docs/script.js` - fetches registry.json, renders stats and tool cards, filtering
200+
- `docs/index.html` - the whole site: markup, inline CSS, and inline JS (search, filters, URL state)
201+
- Generated regions (tool cards, filter chips, hero stats, embedded registry and search JSON) come from `scripts/sync_from_registry.py`; do not edit them by hand
204202

205203
The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` at deploy time, so you don't need to manually copy files.
206204

‎PERFORMANCE.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Performance
22

3-
> Lighthouse audit results for all TMHSDigital developer tool sites.
3+
> Historical baseline: a Lighthouse audit from 2026-04-09 covering the five tool sites that existed then. It predates the v1.4.0 site changes and the catalog's growth to 17 tools, so treat the numbers as a reference point, not current scores. Re-run Lighthouse against the live sites before relying on them.
44
55
## Audit Date
66

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ Developer-Tools-Directory/
214214
template.html.j2 Jinja2 HTML template with configurable branding
215215
fonts/ Self-hosted Inter + JetBrains Mono woff2
216216
SETUP-PROMPT.md Copy-paste prompt for applying template to a repo
217-
standards/ Convention documentation (9 docs)
217+
standards/ Convention documentation (index in standards/README.md)
218218
registry.json Tool registry (source of truth)
219219
AGENTS.md AI agent guidance
220220
CLAUDE.md Claude Code project docs

0 commit comments

Comments
 (0)