specweave 0.17.6 â 0.17.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +365 -9
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +9 -4
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +82 -12
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts +2 -2
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +69 -10
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
- package/dist/src/cli/commands/detect-project.d.ts +9 -0
- package/dist/src/cli/commands/detect-project.d.ts.map +1 -0
- package/dist/src/cli/commands/detect-project.js +85 -0
- package/dist/src/cli/commands/detect-project.js.map +1 -0
- package/dist/src/cli/commands/detect-specs.d.ts +9 -0
- package/dist/src/cli/commands/detect-specs.d.ts.map +1 -0
- package/dist/src/cli/commands/detect-specs.js +73 -0
- package/dist/src/cli/commands/detect-specs.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +8 -15
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/core/living-docs/content-classifier.d.ts +83 -0
- package/dist/src/core/living-docs/content-classifier.d.ts.map +1 -0
- package/dist/src/core/living-docs/content-classifier.js +393 -0
- package/dist/src/core/living-docs/content-classifier.js.map +1 -0
- package/dist/src/core/living-docs/content-distributor.d.ts +126 -0
- package/dist/src/core/living-docs/content-distributor.d.ts.map +1 -0
- package/dist/src/core/living-docs/content-distributor.js +339 -0
- package/dist/src/core/living-docs/content-distributor.js.map +1 -0
- package/dist/src/core/living-docs/content-parser.d.ts +140 -0
- package/dist/src/core/living-docs/content-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/content-parser.js +316 -0
- package/dist/src/core/living-docs/content-parser.js.map +1 -0
- package/dist/src/core/living-docs/cross-linker.d.ts +126 -0
- package/dist/src/core/living-docs/cross-linker.d.ts.map +1 -0
- package/dist/src/core/living-docs/cross-linker.js +374 -0
- package/dist/src/core/living-docs/cross-linker.js.map +1 -0
- package/dist/src/core/living-docs/index.d.ts +89 -0
- package/dist/src/core/living-docs/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/index.js +169 -0
- package/dist/src/core/living-docs/index.js.map +1 -0
- package/dist/src/core/living-docs/project-detector.d.ts +103 -0
- package/dist/src/core/living-docs/project-detector.d.ts.map +1 -0
- package/dist/src/core/living-docs/project-detector.js +314 -0
- package/dist/src/core/living-docs/project-detector.js.map +1 -0
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.js +51 -22
- package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts +2 -0
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +126 -62
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/spec-content-sync.d.ts +6 -0
- package/dist/src/core/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/spec-content-sync.js +25 -7
- package/dist/src/core/spec-content-sync.js.map +1 -1
- package/dist/src/core/spec-detector.d.ts +54 -0
- package/dist/src/core/spec-detector.d.ts.map +1 -0
- package/dist/src/core/spec-detector.js +197 -0
- package/dist/src/core/spec-detector.js.map +1 -0
- package/dist/src/core/spec-identifier-detector.d.ts +49 -0
- package/dist/src/core/spec-identifier-detector.d.ts.map +1 -0
- package/dist/src/core/spec-identifier-detector.js +198 -0
- package/dist/src/core/spec-identifier-detector.js.map +1 -0
- package/dist/src/core/types/spec-identifier.d.ts +67 -0
- package/dist/src/core/types/spec-identifier.d.ts.map +1 -0
- package/dist/src/core/types/spec-identifier.js +23 -0
- package/dist/src/core/types/spec-identifier.js.map +1 -0
- package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/config-generator.js +11 -0
- package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
- package/package.json +2 -1
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/lib/hooks/sync-living-docs.js +61 -5
- package/plugins/specweave/lib/hooks/sync-living-docs.ts +102 -13
- package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-docs-preview/commands/preview.md +11 -11
- package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-github/hooks/post-task-completion.sh +59 -30
- package/plugins/specweave-github/lib/github-spec-content-sync.js +55 -6
- package/plugins/specweave-github/lib/github-spec-content-sync.ts +84 -12
- package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -4
- package/plugins/specweave-release/.claude-plugin/plugin.json +3 -15
- package/src/templates/AGENTS.md.template +297 -0
- package/dist/locales/de/.gitkeep +0 -0
- package/dist/locales/de/cli.json +0 -108
- package/dist/locales/en/cli.json +0 -287
- package/dist/locales/en/errors.json +0 -7
- package/dist/locales/en/templates.json +0 -6
- package/dist/locales/es/.gitkeep +0 -0
- package/dist/locales/es/cli.json +0 -41
- package/dist/locales/fr/.gitkeep +0 -0
- package/dist/locales/fr/cli.json +0 -108
- package/dist/locales/ja/.gitkeep +0 -0
- package/dist/locales/ja/cli.json +0 -108
- package/dist/locales/ko/.gitkeep +0 -0
- package/dist/locales/ko/cli.json +0 -108
- package/dist/locales/pt/.gitkeep +0 -0
- package/dist/locales/pt/cli.json +0 -108
- package/dist/locales/ru/.gitkeep +0 -0
- package/dist/locales/ru/cli.json +0 -269
- package/dist/locales/zh/.gitkeep +0 -0
- package/dist/locales/zh/cli.json +0 -108
- package/plugins/specweave/plugin.json +0 -22
- package/plugins/specweave-ado/plugin.json +0 -20
- package/plugins/specweave-github/plugin.json +0 -19
- package/plugins/specweave-jira/plugin.json +0 -20
package/CLAUDE.md
CHANGED
|
@@ -736,6 +736,26 @@ my-project/
|
|
|
736
736
|
|
|
737
737
|
**Solution**: Create a **parent folder** with ONE root-level `.specweave/`
|
|
738
738
|
|
|
739
|
+
SpecWeave supports **THREE approaches** for multi-repo projects:
|
|
740
|
+
|
|
741
|
+
**Option 2: Parent Repo on GitHub** (â
Recommended for teams)
|
|
742
|
+
- Parent folder is a GitHub repository
|
|
743
|
+
- Team can clone and collaborate on specs/docs
|
|
744
|
+
- Full version control for .specweave/
|
|
745
|
+
- Works with CI/CD pipelines
|
|
746
|
+
|
|
747
|
+
**Option 3: Local Parent Folder** (â
Recommended for solo developers)
|
|
748
|
+
- Parent folder stays on your machine (NOT pushed to GitHub)
|
|
749
|
+
- .specweave/ is gitignored (local only)
|
|
750
|
+
- Implementation repos still on GitHub
|
|
751
|
+
- Lighter setup, less overhead
|
|
752
|
+
|
|
753
|
+
**Option 4: Each Repo Has .specweave/** (â NOT RECOMMENDED)
|
|
754
|
+
- Each repo maintains its own .specweave/ folder
|
|
755
|
+
- Leads to fragmentation and duplication
|
|
756
|
+
- Difficult to manage cross-cutting features
|
|
757
|
+
- Only use if you absolutely must
|
|
758
|
+
|
|
739
759
|
The pattern is the same whether you have:
|
|
740
760
|
- Multiple git repos (polyrepo architecture)
|
|
741
761
|
- Microservices (separate service directories)
|
|
@@ -777,20 +797,34 @@ microservices-project/ â Create parent folder
|
|
|
777
797
|
**How to Set Up**:
|
|
778
798
|
|
|
779
799
|
```bash
|
|
780
|
-
#
|
|
800
|
+
# APPROACH 1: Parent Repo on GitHub (Option 2)
|
|
801
|
+
# Step 1: Run specweave init and select "Option 2: Multiple repos WITH parent repo (GitHub)"
|
|
781
802
|
mkdir microservices-project && cd microservices-project
|
|
782
803
|
npx specweave init .
|
|
804
|
+
# â Select: "2ī¸âŖ Multiple repos WITH parent repo (GitHub)"
|
|
805
|
+
# â Creates .specweave/ and pushes to GitHub
|
|
806
|
+
|
|
807
|
+
# Step 2: Clone implementation repos
|
|
783
808
|
git clone https://github.com/myorg/user-service.git services/user-service
|
|
784
809
|
git clone https://github.com/myorg/order-service.git services/order-service
|
|
785
810
|
|
|
786
|
-
#
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
811
|
+
# APPROACH 2: Local Parent Folder (Option 3) - NEW!
|
|
812
|
+
# Step 1: Run specweave init and select "Option 3: Local parent folder"
|
|
813
|
+
mkdir my-parent-folder && cd my-parent-folder
|
|
814
|
+
npx specweave init .
|
|
815
|
+
# â Select: "3ī¸âŖ Multiple repos WITH parent folder (LOCAL only)"
|
|
816
|
+
# â Creates .specweave/ (gitignored, local only)
|
|
817
|
+
|
|
818
|
+
# Step 2: Clone implementation repos
|
|
819
|
+
git clone https://github.com/myorg/frontend.git frontend
|
|
820
|
+
git clone https://github.com/myorg/backend.git backend
|
|
821
|
+
|
|
822
|
+
# .specweave/ stays on your machine, NOT synced to GitHub!
|
|
790
823
|
|
|
791
|
-
#
|
|
824
|
+
# APPROACH 3: Monorepo (services in same repo)
|
|
792
825
|
mkdir microservices-project && cd microservices-project
|
|
793
826
|
git init && npx specweave init .
|
|
827
|
+
# â Select: "1ī¸âŖ Single repository" OR "5ī¸âŖ Monorepo"
|
|
794
828
|
mkdir -p services/{user,order,payment}
|
|
795
829
|
|
|
796
830
|
# Work normally - SpecWeave sees all services
|
|
@@ -800,12 +834,26 @@ mkdir -p services/{user,order,payment}
|
|
|
800
834
|
```
|
|
801
835
|
|
|
802
836
|
**Benefits**:
|
|
837
|
+
|
|
838
|
+
**All approaches**:
|
|
803
839
|
- â
One `.specweave/` for entire system (no duplication)
|
|
804
840
|
- â
Each repo maintains its own git history (if using polyrepo)
|
|
805
841
|
- â
Cross-service increments are natural (e.g., checkout flow)
|
|
806
842
|
- â
System-wide architecture docs in one place
|
|
807
843
|
- â
Living docs cover all services
|
|
808
844
|
|
|
845
|
+
**Option 2 (GitHub Parent) specific**:
|
|
846
|
+
- â
Team can collaborate on specs/docs
|
|
847
|
+
- â
Full version control history for .specweave/
|
|
848
|
+
- â
Works with CI/CD pipelines
|
|
849
|
+
- â
Can enforce code reviews for specs
|
|
850
|
+
|
|
851
|
+
**Option 3 (Local Parent) specific**:
|
|
852
|
+
- â
Lighter setup (no GitHub repo for parent)
|
|
853
|
+
- â
No extra repository to manage
|
|
854
|
+
- â
Perfect for solo developers
|
|
855
|
+
- â
.specweave/ stays private on your machine
|
|
856
|
+
|
|
809
857
|
### Enforcement
|
|
810
858
|
|
|
811
859
|
**Validation in `init.ts`**:
|
|
@@ -1922,7 +1970,7 @@ npm run build && npm test
|
|
|
1922
1970
|
```
|
|
1923
1971
|
plugins/specweave/
|
|
1924
1972
|
âââ .claude-plugin/
|
|
1925
|
-
â âââ plugin.json â "hooks": "hooks/hooks.json"
|
|
1973
|
+
â âââ plugin.json â "hooks": "./hooks/hooks.json"
|
|
1926
1974
|
âââ hooks/
|
|
1927
1975
|
â âââ hooks.json â Hook configuration (references .sh files)
|
|
1928
1976
|
â âââ post-task-completion.sh â Stays here (NOT copied!)
|
|
@@ -1946,7 +1994,7 @@ plugins/specweave/
|
|
|
1946
1994
|
2. Claude Code startup:
|
|
1947
1995
|
Reads: plugins/specweave/.claude-plugin/plugin.json
|
|
1948
1996
|
â
|
|
1949
|
-
Discovers: "hooks": "hooks/hooks.json"
|
|
1997
|
+
Discovers: "hooks": "./hooks/hooks.json"
|
|
1950
1998
|
â
|
|
1951
1999
|
Loads: plugins/specweave/hooks/hooks.json
|
|
1952
2000
|
â
|
|
@@ -2144,6 +2192,180 @@ ls -1 .specweave/increments/ | grep -E '^[0-9]{4}' | wc -l
|
|
|
2144
2192
|
- â
**Compliance & auditing**: Complete audit trail of all product decisions
|
|
2145
2193
|
- â
**Living documentation**: Specs stay up-to-date without manual intervention
|
|
2146
2194
|
|
|
2195
|
+
**đ§ INTELLIGENT LIVING DOCS SYNC (v0.18.0+)**
|
|
2196
|
+
|
|
2197
|
+
**Two Sync Modes**:
|
|
2198
|
+
|
|
2199
|
+
1. **Simple Mode** (Legacy):
|
|
2200
|
+
- Copies entire `spec.md` to living docs as single file
|
|
2201
|
+
- Location: `.specweave/docs/internal/specs/spec-{id}.md`
|
|
2202
|
+
- Use when: Single project, simple workflow
|
|
2203
|
+
|
|
2204
|
+
2. **Intelligent Mode** (NEW in v0.18.0+):
|
|
2205
|
+
- Parses spec.md into sections
|
|
2206
|
+
- Classifies content (user stories, architecture, ADRs, operations, etc.)
|
|
2207
|
+
- Detects project (backend/frontend/mobile)
|
|
2208
|
+
- Distributes to appropriate folders
|
|
2209
|
+
- Generates cross-links
|
|
2210
|
+
- Adds Docusaurus frontmatter
|
|
2211
|
+
|
|
2212
|
+
**Enable Intelligent Mode** (`.specweave/config.json`):
|
|
2213
|
+
```json
|
|
2214
|
+
{
|
|
2215
|
+
"hooks": {
|
|
2216
|
+
"post_task_completion": {
|
|
2217
|
+
"sync_living_docs": true
|
|
2218
|
+
}
|
|
2219
|
+
},
|
|
2220
|
+
"livingDocs": {
|
|
2221
|
+
"intelligent": {
|
|
2222
|
+
"enabled": true,
|
|
2223
|
+
"splitByCategory": true,
|
|
2224
|
+
"generateCrossLinks": true,
|
|
2225
|
+
"preserveOriginal": true,
|
|
2226
|
+
"classificationConfidenceThreshold": 0.6,
|
|
2227
|
+
"fallbackProject": "default"
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2230
|
+
}
|
|
2231
|
+
```
|
|
2232
|
+
|
|
2233
|
+
**Result** (Intelligent Mode):
|
|
2234
|
+
```
|
|
2235
|
+
â
BEFORE (Simple Mode):
|
|
2236
|
+
.specweave/docs/internal/specs/spec-0016-authentication.md (5,000 lines, mixed content)
|
|
2237
|
+
|
|
2238
|
+
â
AFTER (Intelligent Mode):
|
|
2239
|
+
.specweave/docs/internal/
|
|
2240
|
+
âââ specs/backend/
|
|
2241
|
+
â âââ us-001-backend-api-auth.md (User Story + Docusaurus frontmatter)
|
|
2242
|
+
â âââ us-002-session-management.md (User Story + Cross-links)
|
|
2243
|
+
â âââ _archive/spec-0016-authentication.md (Original preserved)
|
|
2244
|
+
â âââ README.md (Auto-generated project index)
|
|
2245
|
+
âââ architecture/
|
|
2246
|
+
â âââ authentication-flow.md (HLD)
|
|
2247
|
+
â âââ adr/0001-oauth-vs-jwt.md (ADR)
|
|
2248
|
+
âââ operations/
|
|
2249
|
+
â âââ runbook-auth-service.md (Runbook)
|
|
2250
|
+
â âââ slo-auth-availability.md (SLO)
|
|
2251
|
+
âââ delivery/
|
|
2252
|
+
â âââ test-strategy-authentication.md (Test Strategy)
|
|
2253
|
+
âââ strategy/
|
|
2254
|
+
âââ auth-business-requirements.md (Business Requirements)
|
|
2255
|
+
```
|
|
2256
|
+
|
|
2257
|
+
**Classification System** (9 Categories):
|
|
2258
|
+
|
|
2259
|
+
| Category | Detects | Goes To |
|
|
2260
|
+
|----------|---------|---------|
|
|
2261
|
+
| **User Story** | US-XXX pattern, "As a" format, AC | `specs/{project}/` |
|
|
2262
|
+
| **NFR** | NFR-XXX pattern, metrics, SLAs | `specs/{project}/nfr/` |
|
|
2263
|
+
| **Architecture** | HLD, LLD, diagrams | `architecture/` |
|
|
2264
|
+
| **ADR** | ADR-XXX pattern, decision structure | `architecture/adr/` |
|
|
2265
|
+
| **Operations** | Runbooks, SLOs | `operations/` |
|
|
2266
|
+
| **Delivery** | Test strategy, release plans | `delivery/` |
|
|
2267
|
+
| **Strategy** | Business requirements, PRDs | `strategy/` |
|
|
2268
|
+
| **Governance** | Security, compliance | `governance/` |
|
|
2269
|
+
| **Overview** | Summaries | `specs/{project}/` |
|
|
2270
|
+
|
|
2271
|
+
**Project Detection** (Multi-Project Support):
|
|
2272
|
+
|
|
2273
|
+
Intelligent sync detects which project (backend/frontend/mobile) via:
|
|
2274
|
+
- Increment name contains project ID (e.g., `0016-backend-auth`) â +10 points
|
|
2275
|
+
- Frontmatter `project:` field â +20 points (highest)
|
|
2276
|
+
- Team name match â +5 points
|
|
2277
|
+
- Keyword match â +3 points each
|
|
2278
|
+
- Tech stack match â +2 points each
|
|
2279
|
+
|
|
2280
|
+
**Example**:
|
|
2281
|
+
```yaml
|
|
2282
|
+
---
|
|
2283
|
+
title: User Authentication
|
|
2284
|
+
project: backend # â Explicit project (100% confidence)
|
|
2285
|
+
---
|
|
2286
|
+
|
|
2287
|
+
# User Authentication
|
|
2288
|
+
|
|
2289
|
+
Quick overview: Implement OAuth for **backend services** using Node.js...
|
|
2290
|
+
# Keywords: backend, service, Node.js â detected!
|
|
2291
|
+
```
|
|
2292
|
+
|
|
2293
|
+
**Multi-Project Setup** (`.specweave/config.json`):
|
|
2294
|
+
```json
|
|
2295
|
+
{
|
|
2296
|
+
"multiProject": {
|
|
2297
|
+
"projects": {
|
|
2298
|
+
"backend": {
|
|
2299
|
+
"name": "Backend Services",
|
|
2300
|
+
"keywords": ["api", "backend", "service"],
|
|
2301
|
+
"techStack": ["Node.js", "PostgreSQL"]
|
|
2302
|
+
},
|
|
2303
|
+
"frontend": {
|
|
2304
|
+
"name": "Frontend App",
|
|
2305
|
+
"keywords": ["ui", "frontend", "react"],
|
|
2306
|
+
"techStack": ["React", "Next.js"]
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2311
|
+
```
|
|
2312
|
+
|
|
2313
|
+
**Result**: Content distributed to `specs/backend/` and `specs/frontend/` automatically!
|
|
2314
|
+
|
|
2315
|
+
**Docusaurus Frontmatter** (Auto-Generated):
|
|
2316
|
+
|
|
2317
|
+
Every distributed file gets rich frontmatter for LLM context:
|
|
2318
|
+
|
|
2319
|
+
```yaml
|
|
2320
|
+
---
|
|
2321
|
+
id: us-001-user-login
|
|
2322
|
+
title: "US-001: User Login"
|
|
2323
|
+
sidebar_label: "User Login"
|
|
2324
|
+
description: "User can log in with email and password"
|
|
2325
|
+
tags: ["user-story", "backend", "authentication"]
|
|
2326
|
+
increment: "0016-authentication"
|
|
2327
|
+
project: "backend" # â LLM knows which project
|
|
2328
|
+
category: "user-story" # â LLM knows document type
|
|
2329
|
+
last_updated: "2025-11-10"
|
|
2330
|
+
status: "planning"
|
|
2331
|
+
priority: "P1"
|
|
2332
|
+
---
|
|
2333
|
+
```
|
|
2334
|
+
|
|
2335
|
+
**Cross-Linking** (Bidirectional):
|
|
2336
|
+
|
|
2337
|
+
Intelligent sync generates "Related Documents" sections:
|
|
2338
|
+
|
|
2339
|
+
```markdown
|
|
2340
|
+
## Related Documents
|
|
2341
|
+
|
|
2342
|
+
### Implements
|
|
2343
|
+
- [Authentication Architecture](../../architecture/auth-flow.md)
|
|
2344
|
+
|
|
2345
|
+
### References
|
|
2346
|
+
- [ADR-001: OAuth vs JWT](../../architecture/adr/0001-oauth-vs-jwt.md)
|
|
2347
|
+
|
|
2348
|
+
### Defined In
|
|
2349
|
+
- [Business Requirements](../../strategy/auth-requirements.md)
|
|
2350
|
+
```
|
|
2351
|
+
|
|
2352
|
+
**Benefits of Intelligent Mode**:
|
|
2353
|
+
- â
**Better organization**: Content organized by type and project
|
|
2354
|
+
- â
**Easier navigation**: Find docs quickly (specs vs architecture vs operations)
|
|
2355
|
+
- â
**LLM-friendly**: Rich context (project, category, tags) for AI assistants
|
|
2356
|
+
- â
**Cross-linked**: Related documents automatically connected
|
|
2357
|
+
- â
**Docusaurus-ready**: Frontmatter works out-of-the-box
|
|
2358
|
+
- â
**Multi-project**: Separate docs for backend/frontend/mobile
|
|
2359
|
+
- â
**Traceability**: Footer shows source increment and last updated
|
|
2360
|
+
|
|
2361
|
+
**Performance**:
|
|
2362
|
+
- Fast: ~10-50ms to parse, classify, and distribute
|
|
2363
|
+
- Async: Runs in background (non-blocking)
|
|
2364
|
+
- Fallback: Falls back to simple mode on error
|
|
2365
|
+
|
|
2366
|
+
**User Guide**: `.specweave/docs/public/guides/intelligent-living-docs-sync.md`
|
|
2367
|
+
**Architecture**: `.specweave/docs/internal/architecture/adr/0030-intelligent-living-docs-sync.md`
|
|
2368
|
+
|
|
2147
2369
|
---
|
|
2148
2370
|
|
|
2149
2371
|
**đ§ HOOKS ARCHITECTURE CHANGES (v0.13.0)**
|
|
@@ -2623,6 +2845,135 @@ plugins/specweave-{name}/
|
|
|
2623
2845
|
|
|
2624
2846
|
**Result**: Core plugin stayed at ~12K tokens (75% smaller than v0.3.7!)
|
|
2625
2847
|
|
|
2848
|
+
### Plugin Manifest Validation Rules
|
|
2849
|
+
|
|
2850
|
+
**CRITICAL**: Claude Code enforces strict validation on plugin.json manifests. Follow these rules to avoid loading errors:
|
|
2851
|
+
|
|
2852
|
+
#### Required Format
|
|
2853
|
+
|
|
2854
|
+
```json
|
|
2855
|
+
{
|
|
2856
|
+
"name": "specweave-plugin-name",
|
|
2857
|
+
"description": "What it does and when to use it",
|
|
2858
|
+
"version": "1.0.0",
|
|
2859
|
+
"author": {
|
|
2860
|
+
"name": "Author Name",
|
|
2861
|
+
"url": "https://example.com"
|
|
2862
|
+
},
|
|
2863
|
+
"repository": "https://github.com/owner/repo",
|
|
2864
|
+
"homepage": "https://example.com",
|
|
2865
|
+
"license": "MIT",
|
|
2866
|
+
"keywords": ["keyword1", "keyword2"],
|
|
2867
|
+
"hooks": "./hooks/hooks.json"
|
|
2868
|
+
}
|
|
2869
|
+
```
|
|
2870
|
+
|
|
2871
|
+
#### Validation Rules
|
|
2872
|
+
|
|
2873
|
+
| Field | Type | Rules | Example |
|
|
2874
|
+
|-------|------|-------|---------|
|
|
2875
|
+
| **name** | string | Required, lowercase, hyphens only | `"specweave-github"` |
|
|
2876
|
+
| **description** | string | Required, max 1024 chars | `"GitHub integration..."` |
|
|
2877
|
+
| **version** | string | Required, semver format | `"1.0.0"` |
|
|
2878
|
+
| **author** | object | Required, with name field | `{"name": "Team"}` |
|
|
2879
|
+
| **repository** | string | Must be string, NOT object | `"https://github.com/..."` â
|
|
|
2880
|
+
| **hooks** | string | Must start with "./" | `"./hooks/hooks.json"` â
|
|
|
2881
|
+
| **keywords** | array | Optional, array of strings | `["github", "sync"]` |
|
|
2882
|
+
| **homepage** | string | Optional, URL | `"https://spec-weave.com"` |
|
|
2883
|
+
| **license** | string | Optional, SPDX identifier | `"MIT"` |
|
|
2884
|
+
|
|
2885
|
+
#### Common Validation Errors
|
|
2886
|
+
|
|
2887
|
+
**â hooks: Invalid input: must start with "./"**
|
|
2888
|
+
```json
|
|
2889
|
+
// WRONG
|
|
2890
|
+
"hooks": "hooks/hooks.json"
|
|
2891
|
+
|
|
2892
|
+
// CORRECT
|
|
2893
|
+
"hooks": "./hooks/hooks.json"
|
|
2894
|
+
```
|
|
2895
|
+
|
|
2896
|
+
**â repository: Expected string, received object**
|
|
2897
|
+
```json
|
|
2898
|
+
// WRONG
|
|
2899
|
+
"repository": {
|
|
2900
|
+
"type": "git",
|
|
2901
|
+
"url": "https://github.com/..."
|
|
2902
|
+
}
|
|
2903
|
+
|
|
2904
|
+
// CORRECT
|
|
2905
|
+
"repository": "https://github.com/..."
|
|
2906
|
+
```
|
|
2907
|
+
|
|
2908
|
+
**â Unrecognized key(s): 'engines', 'dependencies'**
|
|
2909
|
+
```json
|
|
2910
|
+
// WRONG - These are NPM fields, not Claude plugin fields
|
|
2911
|
+
"engines": {"node": ">=18.0.0"},
|
|
2912
|
+
"dependencies": {"specweave": ">=0.14.0"}
|
|
2913
|
+
|
|
2914
|
+
// CORRECT - Omit these fields entirely
|
|
2915
|
+
// Claude plugins don't support dependency declaration
|
|
2916
|
+
```
|
|
2917
|
+
|
|
2918
|
+
**â skills/agents/commands: Invalid input**
|
|
2919
|
+
```json
|
|
2920
|
+
// WRONG - Directory references not supported in plugin.json
|
|
2921
|
+
"skills": "skills",
|
|
2922
|
+
"agents": "agents",
|
|
2923
|
+
"commands": "commands"
|
|
2924
|
+
|
|
2925
|
+
// CORRECT - Omit these fields entirely
|
|
2926
|
+
// Claude Code auto-discovers skills/, agents/, commands/ by convention
|
|
2927
|
+
```
|
|
2928
|
+
|
|
2929
|
+
#### Auto-Discovery vs Explicit Declaration
|
|
2930
|
+
|
|
2931
|
+
**Claude Code auto-discovers components by directory convention**:
|
|
2932
|
+
- `skills/` directory â auto-discovered (no plugin.json field needed)
|
|
2933
|
+
- `agents/` directory â auto-discovered (no plugin.json field needed)
|
|
2934
|
+
- `commands/` directory â auto-discovered (no plugin.json field needed)
|
|
2935
|
+
- `hooks/hooks.json` â MUST be declared in plugin.json with "./hooks/hooks.json"
|
|
2936
|
+
|
|
2937
|
+
**Example: Working plugin.json**
|
|
2938
|
+
```json
|
|
2939
|
+
{
|
|
2940
|
+
"name": "specweave-github",
|
|
2941
|
+
"description": "GitHub integration",
|
|
2942
|
+
"version": "1.0.0",
|
|
2943
|
+
"author": {"name": "SpecWeave Team"},
|
|
2944
|
+
"repository": "https://github.com/anton-abyzov/specweave",
|
|
2945
|
+
"license": "MIT",
|
|
2946
|
+
"keywords": ["github", "sync"],
|
|
2947
|
+
"hooks": "./hooks/hooks.json"
|
|
2948
|
+
}
|
|
2949
|
+
```
|
|
2950
|
+
|
|
2951
|
+
**Directory structure** (auto-discovered):
|
|
2952
|
+
```
|
|
2953
|
+
plugins/specweave-github/
|
|
2954
|
+
âââ .claude-plugin/
|
|
2955
|
+
â âââ plugin.json â Declares hooks only
|
|
2956
|
+
âââ skills/ â Auto-discovered
|
|
2957
|
+
â âââ github-sync/
|
|
2958
|
+
âââ agents/ â Auto-discovered
|
|
2959
|
+
â âââ github-manager/
|
|
2960
|
+
âââ commands/ â Auto-discovered
|
|
2961
|
+
â âââ github-sync.md
|
|
2962
|
+
âââ hooks/
|
|
2963
|
+
âââ hooks.json â Referenced in plugin.json
|
|
2964
|
+
âââ post-task-completion.sh
|
|
2965
|
+
```
|
|
2966
|
+
|
|
2967
|
+
#### Quick Validation Checklist
|
|
2968
|
+
|
|
2969
|
+
Before committing a new plugin:
|
|
2970
|
+
- [ ] All paths start with "./" (hooks, any explicit file references)
|
|
2971
|
+
- [ ] repository is a string, not an object
|
|
2972
|
+
- [ ] No NPM-specific fields (engines, dependencies)
|
|
2973
|
+
- [ ] No directory references in plugin.json (skills, agents, commands)
|
|
2974
|
+
- [ ] Valid JSON syntax (use `jq . < plugin.json` to validate)
|
|
2975
|
+
- [ ] Test with: `/plugin marketplace add ./.claude-plugin && /plugin install plugin-name`
|
|
2976
|
+
|
|
2626
2977
|
### Adding a New Plugin (Contributors)
|
|
2627
2978
|
|
|
2628
2979
|
**Create New Plugin**:
|
|
@@ -2636,7 +2987,12 @@ cat > plugins/specweave-myplugin/.claude-plugin/plugin.json << 'EOF'
|
|
|
2636
2987
|
"name": "specweave-myplugin",
|
|
2637
2988
|
"description": "What it does and when to use it",
|
|
2638
2989
|
"version": "1.0.0",
|
|
2639
|
-
"author": {"name": "Your Name"}
|
|
2990
|
+
"author": {"name": "Your Name"},
|
|
2991
|
+
"repository": "https://github.com/anton-abyzov/specweave",
|
|
2992
|
+
"homepage": "https://spec-weave.com",
|
|
2993
|
+
"license": "MIT",
|
|
2994
|
+
"keywords": ["specweave", "plugin"],
|
|
2995
|
+
"hooks": "./hooks/hooks.json"
|
|
2640
2996
|
}
|
|
2641
2997
|
EOF
|
|
2642
2998
|
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Automatically syncs living documentation after task completion.
|
|
6
6
|
*
|
|
7
|
+
* Supports two modes:
|
|
8
|
+
* 1. Simple mode: Copy spec.md to living docs (legacy)
|
|
9
|
+
* 2. Intelligent mode: Parse, classify, and distribute content (v0.18.0+)
|
|
10
|
+
*
|
|
7
11
|
* Usage:
|
|
8
12
|
* node dist/hooks/lib/sync-living-docs.js <incrementId>
|
|
9
13
|
*
|
|
@@ -12,12 +16,13 @@
|
|
|
12
16
|
*
|
|
13
17
|
* What it does:
|
|
14
18
|
* 1. Checks if sync_living_docs enabled in config
|
|
15
|
-
* 2. Detects
|
|
16
|
-
* 3.
|
|
17
|
-
* 4.
|
|
19
|
+
* 2. Detects sync mode (simple or intelligent)
|
|
20
|
+
* 3. Runs appropriate sync strategy
|
|
21
|
+
* 4. Syncs to external tools (GitHub/Jira/ADO)
|
|
22
|
+
* 5. Logs sync actions
|
|
18
23
|
*
|
|
19
24
|
* @author SpecWeave Team
|
|
20
|
-
* @version
|
|
25
|
+
* @version 2.0.0
|
|
21
26
|
*/
|
|
22
27
|
/**
|
|
23
28
|
* Main function - sync living docs for given increment
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-living-docs.d.ts","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"sync-living-docs.d.ts","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAwBH;;GAEG;AACH,iBAAe,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DhE;AAiND,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Automatically syncs living documentation after task completion.
|
|
6
6
|
*
|
|
7
|
+
* Supports two modes:
|
|
8
|
+
* 1. Simple mode: Copy spec.md to living docs (legacy)
|
|
9
|
+
* 2. Intelligent mode: Parse, classify, and distribute content (v0.18.0+)
|
|
10
|
+
*
|
|
7
11
|
* Usage:
|
|
8
12
|
* node dist/hooks/lib/sync-living-docs.js <incrementId>
|
|
9
13
|
*
|
|
@@ -12,12 +16,13 @@
|
|
|
12
16
|
*
|
|
13
17
|
* What it does:
|
|
14
18
|
* 1. Checks if sync_living_docs enabled in config
|
|
15
|
-
* 2. Detects
|
|
16
|
-
* 3.
|
|
17
|
-
* 4.
|
|
19
|
+
* 2. Detects sync mode (simple or intelligent)
|
|
20
|
+
* 3. Runs appropriate sync strategy
|
|
21
|
+
* 4. Syncs to external tools (GitHub/Jira/ADO)
|
|
22
|
+
* 5. Logs sync actions
|
|
18
23
|
*
|
|
19
24
|
* @author SpecWeave Team
|
|
20
|
-
* @version
|
|
25
|
+
* @version 2.0.0
|
|
21
26
|
*/
|
|
22
27
|
import fs from 'fs-extra';
|
|
23
28
|
import path from 'path';
|
|
@@ -42,16 +47,28 @@ async function syncLivingDocs(incrementId) {
|
|
|
42
47
|
return;
|
|
43
48
|
}
|
|
44
49
|
console.log('â
Living docs sync enabled');
|
|
45
|
-
// 3.
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
// 3. Determine sync mode (simple or intelligent)
|
|
51
|
+
const intelligentEnabled = config.livingDocs?.intelligent?.enabled ?? false;
|
|
52
|
+
let specCopied = false;
|
|
53
|
+
let changedDocs = [];
|
|
54
|
+
if (intelligentEnabled) {
|
|
55
|
+
// Intelligent mode: Parse, classify, and distribute
|
|
56
|
+
console.log('đ§ Using intelligent sync mode (v0.18.0+)');
|
|
57
|
+
const result = await intelligentSyncLivingDocs(incrementId, config);
|
|
58
|
+
specCopied = result.success;
|
|
59
|
+
changedDocs = result.changedFiles;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Simple mode: Copy spec to living docs (legacy)
|
|
63
|
+
console.log('đ Using simple sync mode (legacy)');
|
|
64
|
+
specCopied = await copyIncrementSpecToLivingDocs(incrementId);
|
|
65
|
+
changedDocs = detectChangedDocs();
|
|
66
|
+
}
|
|
49
67
|
if (changedDocs.length === 0 && !specCopied) {
|
|
50
|
-
console.log('âšī¸ No living docs changed
|
|
68
|
+
console.log('âšī¸ No living docs changed');
|
|
51
69
|
return;
|
|
52
70
|
}
|
|
53
|
-
console.log(`đ
|
|
54
|
-
changedDocs.forEach((doc) => console.log(` - ${doc}`));
|
|
71
|
+
console.log(`đ Changed/created ${changedDocs.length} file(s)`);
|
|
55
72
|
// 4. Sync to GitHub if configured
|
|
56
73
|
await syncToGitHub(incrementId, changedDocs);
|
|
57
74
|
console.log('â
Living docs sync complete\n');
|
|
@@ -62,7 +79,60 @@ async function syncLivingDocs(incrementId) {
|
|
|
62
79
|
}
|
|
63
80
|
}
|
|
64
81
|
/**
|
|
65
|
-
*
|
|
82
|
+
* Intelligent sync using the new architecture (v0.18.0+)
|
|
83
|
+
*/
|
|
84
|
+
async function intelligentSyncLivingDocs(incrementId, config) {
|
|
85
|
+
try {
|
|
86
|
+
// Dynamic import to avoid circular dependencies
|
|
87
|
+
const { syncIncrement } = await import('../../../../src/core/living-docs/index.js');
|
|
88
|
+
console.log(' đ Parsing and classifying spec sections...');
|
|
89
|
+
const result = await syncIncrement(incrementId, {
|
|
90
|
+
verbose: false, // We'll log our own summary
|
|
91
|
+
dryRun: false,
|
|
92
|
+
parser: {
|
|
93
|
+
preserveCodeBlocks: true,
|
|
94
|
+
preserveLinks: true,
|
|
95
|
+
preserveImages: true,
|
|
96
|
+
},
|
|
97
|
+
distributor: {
|
|
98
|
+
generateFrontmatter: true,
|
|
99
|
+
preserveOriginal: config.livingDocs?.intelligent?.preserveOriginal ?? true,
|
|
100
|
+
},
|
|
101
|
+
linker: {
|
|
102
|
+
generateBacklinks: config.livingDocs?.intelligent?.generateCrossLinks ?? true,
|
|
103
|
+
updateExisting: true,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
// Log summary
|
|
107
|
+
console.log(` â
Intelligent sync complete:`);
|
|
108
|
+
console.log(` Project: ${result.project.name} (${(result.project.confidence * 100).toFixed(0)}% confidence)`);
|
|
109
|
+
console.log(` Files created: ${result.distribution.summary.filesCreated}`);
|
|
110
|
+
console.log(` Files updated: ${result.distribution.summary.filesUpdated}`);
|
|
111
|
+
console.log(` Cross-links: ${result.links.length}`);
|
|
112
|
+
console.log(` Duration: ${result.duration}ms`);
|
|
113
|
+
// Collect changed file paths
|
|
114
|
+
const changedFiles = [
|
|
115
|
+
...result.distribution.created.map((f) => f.path),
|
|
116
|
+
...result.distribution.updated.map((f) => f.path),
|
|
117
|
+
];
|
|
118
|
+
return {
|
|
119
|
+
success: result.success,
|
|
120
|
+
changedFiles,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(` â Intelligent sync failed: ${error}`);
|
|
125
|
+
console.error(' Falling back to simple sync mode...');
|
|
126
|
+
// Fallback to simple mode
|
|
127
|
+
const copied = await copyIncrementSpecToLivingDocs(incrementId);
|
|
128
|
+
return {
|
|
129
|
+
success: copied,
|
|
130
|
+
changedFiles: copied ? [path.join(process.cwd(), '.specweave', 'docs', 'internal', 'specs', `spec-${incrementId}.md`)] : [],
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Copy increment spec to living docs (legacy/simple mode)
|
|
66
136
|
* Returns true if spec was copied, false if skipped
|
|
67
137
|
*/
|
|
68
138
|
async function copyIncrementSpecToLivingDocs(incrementId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-living-docs.js","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"sync-living-docs.js","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
import { ContentSyncResult } from '../../../src/core/spec-content-sync.js';
|
|
12
12
|
export interface GitHubContentSyncOptions {
|
|
13
13
|
specPath: string;
|
|
14
|
-
owner
|
|
15
|
-
repo
|
|
14
|
+
owner?: string;
|
|
15
|
+
repo?: string;
|
|
16
16
|
dryRun?: boolean;
|
|
17
17
|
verbose?: boolean;
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-spec-content-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAQL,iBAAiB,EAClB,MAAM,wCAAwC,CAAC;AAIhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"github-spec-content-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAQL,iBAAiB,EAClB,MAAM,wCAAwC,CAAC;AAIhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4CD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AA6KD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF"}
|