Skip to content

Commit 71b1313

Browse files
Harden CommandTree testing, summaries, execution, and SEO (#19)
## TLDR Adds fail-fast CommandTree test execution while broadening command execution, AI summary, coverage, and website SEO hardening across the branch. ## Details ### What Was Added - New AI summary orchestration and state modules: `src/summaryOrchestration.ts` and `src/state.ts`. - Automatic Copilot model resolution for background summary generation, with explicit interactive selection preserved for user commands. - New tree actions for copying relative/full task paths and making files executable from task context menus. - Drag support for command-tree task rows using `text/uri-list`, plain text paths, and CommandTree command IDs. - Dockerfile task discovery and Docker Compose commands that run with an explicit `-f` file path. - Pure helper modules for DB lock artifact cleanup, markdown description parsing, task helpers, and task parameter formatting. - E2E/unit coverage for activation non-blocking behavior, AI model selection, copy path, make executable, Docker execution, script drag, sort order, summary tooltips, undefined-argument no-ops, markdown parsing, task helpers, and DB lock recovery. - Website audit skill, Codex skill symlinks, sitemap override, taxonomy SEO handling, and expanded website SEO tests. ### What Was Changed/Deleted - `make test` now runs fail-fast by using Mocha `--bail` for unit tests and `vscode-test --bail` for VS Code-hosted tests, while excluding `@exclude-ci` auth-gated tests from the main test target. - `test-exclude-ci` is now an alias for `test`, keeping existing workflows on the same fail-fast path. - VS Code-hosted tests now include E2E, provider, and unit output under the coverage run. - Extension activation no longer blocks on initial discovery; discovery and automatic summaries run in the background after activation. - AI summaries now choose a concrete model automatically for background runs instead of opening a picker, while manual model selection still prompts and persists the user's choice. - Command tree sorting now keeps folders before files, sorts labels case-insensitively, and keeps private make/mise tasks muted and sorted after public tasks without inserting divider rows. - Make target discovery keeps target line numbers for navigation and removes phony/help priority handling from task ordering. - Task execution delegates parameter formatting to a production helper instead of private duplicated test logic. - DB lifecycle state moved into centralized app state, with lock artifact operations moved into a testable pure helper. - Markdown description extraction moved into a parser helper with direct unit coverage. - Website metadata, sitemap output, taxonomy page indexing, mobile text wrapping, and docs/blog wording were adjusted for SEO and crawl hygiene. - Dependency lockfiles, package overrides, ESLint config, PR template, agent instructions, and coverage thresholds were updated. ### Spec/Doc Changes - Updated `Agents.md`, `Claude.md`, and `.github/PULL_REQUEST_TEMPLATE.md`. - Added `.claude/skills/website-audit/SKILL.md` and `.codex/skills/*` links for local skill access. - Updated AI summaries docs/blog copy and mise task blog copy. - Added sitemap/taxonomy behavior in the website Eleventy config. ### Breaking Changes No extension runtime breaking changes. The intentional workflow change is that `make test` is now fail-fast and excludes `@exclude-ci` tests by default; auth-gated Copilot tests remain outside the default CI path. ## How Do The Automated Tests Prove It Works? `make ci` passed in this session after the branch changes: - Lint passed through ESLint and cspell. - TypeScript compile passed. - Unit tests passed with `118 passing`. - VS Code-hosted tests passed with `372 passing`. - Coverage completed at `93.11%` statements/lines, `88.33%` branches, and `94.87%` functions, then ratcheted `coverage-thresholds.json`. Specific tests added or updated in the diff prove the main behaviors: `automatic selection picks a concrete model without prompting`, `activate() returns while initial discovery is still in flight`, copy-path E2E tests, Docker execution E2E tests, make-executable E2E tests, script drag E2E tests, sort-order E2E tests, summary tooltip E2E tests, undefined-argument no-op E2E tests, markdown description unit tests, task helper unit tests, and DB lock recovery unit tests.
1 parent 49125c4 commit 71b1313

77 files changed

Lines changed: 3725 additions & 1968 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/skills/upgrade-packages/SKILL.md

Lines changed: 61 additions & 218 deletions
Large diffs are not rendered by default.
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
---
2+
name: website-audit
3+
description: Audits a website for SEO, AI search performance, structured data, mobile usability, broken links, and social media cards. Fixes issues found. Use when the user mentions "audit website", "SEO", "fix search ranking", "AI search", "structured data", "social media cards", or "website performance".
4+
---
5+
<!-- agent-pmo:424c8f8 -->
6+
7+
# Website Audit
8+
9+
Performs a comprehensive website audit and fixes issues affecting search visibility and AI discoverability.
10+
11+
Copy this checklist and track your progress:
12+
13+
```
14+
Audit Progress:
15+
- [ ] Step 1: Read guidelines
16+
- [ ] Step 2: Audit AI search readiness
17+
- [ ] Step 3: Audit SEO and keywords
18+
- [ ] Step 4: Audit crawling and indexing
19+
- [ ] Step 5: Audit broken links and canonicalization
20+
- [ ] Step 6: Audit mobile usability
21+
- [ ] Step 7: Audit structured data
22+
- [ ] Step 8: Audit social media cards
23+
- [ ] Step 9: Audit For Unsubstantiated Claims
24+
- [ ] Step 10: Audit Design Compliance
25+
- [ ] Step 11: Test with Playwright
26+
- [ ] Step 12: Report findings
27+
```
28+
29+
- Check the outputted HTML/CSS/JavaScript AFTER the website is generated by the static content generator.
30+
- Don't just check the static content before the website is generated.
31+
- Fix issues at the core where the static content templates are stored - not in the outputted HTML (e.g. _site)
32+
- Never manually edit the generated website content directly
33+
- ENSURE THE FOOTER HAS A copyright link to nimblesite.co
34+
35+
## Step 1 — Read guidelines
36+
37+
Fetch and read each of these before auditing. These are the authoritative references for every step that follows.
38+
39+
- [Google's guidance on using generative AI content](https://developers.google.com/search/docs/fundamentals/using-gen-ai-content)
40+
- [Top ways to ensure content performs well in Google's AI experiences](https://developers.google.com/search/blog/2025/05/succeeding-in-ai-search)
41+
- [SEO Starter Guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)
42+
43+
If the repo has a business plan doc, take it into account
44+
45+
Identify the website source files in the repo. Determine the framework (static site generator, Next.js, Hugo, etc.) so you know where to find templates, metadata, and content.
46+
47+
## Step 2 — Audit AI search readiness
48+
49+
Apply the guidance from the AI search article. Check:
50+
51+
1. **Content quality** — Is content original, expert-level, and comprehensive? Flag thin or duplicated pages.
52+
2. **Clear structure** — Do pages use descriptive headings, lists, and concise answers to likely questions?
53+
3. **Entity clarity** — Are key terms, products, and concepts defined clearly so AI can extract them?
54+
4. **Freshness signals** — Are dates, update timestamps, and authorship present?
55+
56+
Fix issues directly in the source files. For each fix, note what changed and why.
57+
58+
## Step 3 — Audit SEO and keywords
59+
60+
1. Search [Google Trends](https://trends.google.com/home) for trending keywords related to the website's content.
61+
2. Review each page's `<title>`, `<meta name="description">`, and `<h1>` tags.
62+
3. Check for keyword opportunities — can trending terms be naturally inserted into headings, descriptions, or body content?
63+
4. Verify each page has a unique, descriptive title (50-60 chars) and meta description (150-160 chars).
64+
5. Check image `alt` attributes describe the image content and include relevant keywords where natural.
65+
66+
Apply the [SEO Starter Guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide) principles. Fix issues directly.
67+
68+
## Step 4 — Audit crawling and indexing
69+
70+
Reference: [Overview of crawling and indexing topics](https://developers.google.com/search/docs/crawling-indexing)
71+
72+
1. **robots.txt** — Locate and review it. Verify it doesn't block important pages. Reference: [robots.txt spec](https://developers.google.com/search/docs/crawling-indexing/robots-txt)
73+
2. **Sitemap** — Locate the sitemap (or sitemap index). Verify all important pages are listed and no dead URLs are included. Reference: [Sitemap guidelines](https://developers.google.com/search/docs/crawling-indexing/sitemaps/large-sitemaps)
74+
3. **Meta robots tags** — Check for unintended `noindex` or `nofollow` directives on pages that should be indexed.
75+
76+
Note: robots.txt and sitemaps are often auto-generated. If so, check the generator config rather than the output file.
77+
78+
## Step 5 — Audit broken links and canonicalization
79+
80+
Reference: [What is canonicalization](https://developers.google.com/search/docs/crawling-indexing/canonicalization)
81+
82+
1. Check all internal links resolve to valid pages (no 404s).
83+
2. Verify `<link rel="canonical">` tags are present and point to the correct URL.
84+
3. Check for duplicate content accessible via multiple URLs (with/without trailing slash, www vs non-www).
85+
4. Verify redirects use 301 (permanent) not 302 (temporary) where appropriate.
86+
87+
## Step 6 — Audit mobile usability
88+
89+
Reference: [Mobile-first indexing best practices](https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing)
90+
91+
1. Verify the `<meta name="viewport">` tag is present and correctly configured.
92+
2. Check that content is identical between mobile and desktop (mobile-first indexing requires this).
93+
3. Verify touch targets are adequately sized (min 48x48px).
94+
4. Check font sizes are readable without zooming (min 16px body text).
95+
96+
## Step 7 — Audit structured data
97+
98+
Reference: [Structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)
99+
100+
1. Check for existing JSON-LD `<script type="application/ld+json">` blocks.
101+
2. Verify the structured data matches the page content (no misleading markup).
102+
3. Add missing structured data where appropriate:
103+
- **Organization/Person** on the homepage
104+
- **Article/BlogPosting** on blog posts (with author, datePublished, dateModified)
105+
- **BreadcrumbList** for navigation
106+
- **FAQ** for pages with question/answer content
107+
4. Validate JSON-LD syntax is correct.
108+
109+
## Step 8 — Audit social media cards
110+
111+
Reference: [Implementing Social Media Preview Cards](https://documentation.platformos.com/use-cases/implementing-social-media-preview-cards)
112+
113+
Check every page template includes:
114+
115+
**Open Graph (Facebook/LinkedIn):**
116+
- `og:title`, `og:description`, `og:image`, `og:url`, `og:type`
117+
118+
**Twitter Card:**
119+
- `twitter:card`, `twitter:title`, `twitter:description`, `twitter:image`
120+
121+
Verify `og:image` dimensions are at least 1200x630px. Fix missing or incomplete tags.
122+
123+
## Step 9 - Audit For Unsubstantiated Claims
124+
125+
Ensure that all claims are backed up with a link to a reputable source. As an example, this claim isn't valid as content unless it links to an authority that found this through research
126+
127+
> Research shows teams with strong DevEx perform 4-5x better across speed, quality, and engagement
128+
129+
Search for the authoritative URL and add a link to the URL. If it is not available, change the claim to something that can be substatiated.
130+
131+
## Step 10 — Audit Design Compliance
132+
133+
Read the design system docs and view the design screens in the designsystem folder.
134+
135+
## Step 11 — Test with Playwright
136+
137+
Build and run the website locally using `make website-run` (or the project's equivalent dev server command).
138+
139+
**Desktop tests (1280x720):**
140+
141+
1. Navigate to the homepage — take a screenshot.
142+
2. Navigate to each major section — verify pages load without errors.
143+
3. Check the browser console for JavaScript errors.
144+
4. Verify all navigation links work.
145+
146+
**Mobile tests (375x667, iPhone SE):**
147+
148+
1. Resize the browser to mobile dimensions.
149+
2. Navigate to the homepage — take a screenshot.
150+
3. Verify the layout is responsive (no horizontal overflow, readable text).
151+
4. Test navigation menu (hamburger menu if applicable).
152+
153+
If any page fails to load or has console errors, fix the issue and retest.
154+
155+
## Step 12 — Report findings
156+
157+
Summarize the audit results:
158+
159+
```
160+
## Website Audit Report
161+
162+
### Fixed
163+
- [List each issue fixed with file and line reference]
164+
165+
### Warnings (manual review needed)
166+
- [Issues that need human judgment]
167+
168+
### Passed
169+
- [Areas that passed audit with no issues]
170+
171+
### Screenshots
172+
- [Reference Playwright screenshots taken]
173+
```
174+
175+
## Rules
176+
177+
- **Fix issues directly** — don't just report them. Only flag issues as warnings when they require human judgment (e.g., content tone, keyword selection).
178+
- **One step at a time** — complete each step before moving to the next.
179+
- **Preserve existing content** — improve structure and metadata without rewriting the author's voice.
180+
- **No keyword stuffing** — keywords must read naturally in context.
181+
- **Respect the framework** — edit templates/configs, not generated output files.

.codex/skills/ci-prep

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.claude/skills/ci-prep

.codex/skills/code-dedup

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.claude/skills/code-dedup

.codex/skills/fix-bug

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.claude/skills/fix-bug

.codex/skills/spec-check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.claude/skills/spec-check

.codex/skills/submit-pr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.claude/skills/submit-pr

.codex/skills/upgrade-packages

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.claude/skills/upgrade-packages

.codex/skills/website-audit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.claude/skills/website-audit

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
# TLDR;
1+
<!-- agent-pmo:f481f8d -->
2+
## TLDR
3+
<!-- One sentence: what does this PR do? -->
24

5+
## Details
6+
<!-- New functionality, new files, new dependencies. What changed? -->
37

4-
# Details
5-
6-
7-
# How do the tests prove the change works
8-
8+
## How Do The Automated Tests Prove It Works?
9+
<!-- Name specific tests or describe what the test output demonstrates. -->
10+
<!-- "Tests pass" is not acceptable. Be specific. -->

0 commit comments

Comments
 (0)