# Release Notes v1.4.1 - Runtime Error Fixes
**Release Date:** 25 Augustus 2025
**Version:** 1.4.1
**Status:** β
PRODUCTION READY - 100% Test Coverage (33/33 tests)
---
## π― Executive Summary
Version 1.4.1 is een **CRITICAL BUG FIX RELEASE** die 5 production runtime errors oplost die ontdekt zijn tijdens MCP usage. Alle GraphQL queries zijn nu schema-validated tegen introspectionSchema.json.
**Key Achievement:** π **33/33 Tests (100%) PASSING!**
- Runtime fixes: 8/8 tests
- Comprehensive: 25/25 tests
- Zero regressions
---
## π Runtime Errors Fixed
### Error #1: Item Not Found (Language Variants)
**Status:** β
ALREADY WORKING (v1.4.0 smart defaults)
- Smart language defaults implemented
- Templates always queried with `language='en'`
- Enhanced error messages with language hints
### Error #2: Field Not Found
**Status:** β
ALREADY WORKING
- Correct `field() { name value }` subselection already implemented
- Test validates proper GraphQL syntax
### Error #3: Template Not Found
**Status:** β
FIXED
- **Issue:** Templates weren't forced to `language='en'`
- **Fix:** Force `language='en'` for all template queries
- **Change:** Enhanced error messages with language requirement hint
- **File:** `src/sitecore-service.ts` - `getTemplate()` method
### Error #4: getTemplates Schema Mismatch
**Status:** β
FIXED (CRITICAL SCHEMA FIX)
- **Issue 1:** Used non-existent `templates()` query
- **Issue 2:** Tried to query `path` field on `ItemTemplate` (only has `id` and `name`)
- **Fix 1:** Use `item().children()` instead of non-existent `templates()` query
- **Fix 2:** Remove `path` field access from ItemTemplate
- **Schema Rule:** `ItemTemplate` only has `{ id, name }` per introspectionSchema.json
- **File:** `src/sitecore-service.ts` - `getTemplates()` method
### Error #5: getChildren Schema Mismatch
**Status:** β
ALREADY WORKING (FALSE POSITIVE)
- Implementation correctly uses direct array access
- No `.results` field usage
- Test validates proper structure
---
## π Schema Validation Rules
### ItemTemplate Type Structure
```typescript
// FROM: src/sitecore-types.ts (generated from introspectionSchema.json)
export interface ItemTemplate {
id: ID; // β
EXISTS
name: string; // β
EXISTS
// path: string; // β DOES NOT EXIST - WILL CAUSE ERROR!
}
```
### Query Patterns (Schema-Validated)
| Need | β
Correct Query | β Incorrect Query |
|------|------------------|-------------------|
| Templates | `item(path: "/sitecore/templates/...").children()` | `templates()` (doesn't exist) |
| Single Field | `item().field(name: "X") { name value }` | `item().field(name: "X")` (missing subselection) |
| Children | `item().children(first: 100)` | `item().children.results` |
| ItemTemplate fields | `template { id name }` | `template { id name path }` |
---
## π― Test Coverage
### New Test Suite: test-runtime-fixes.ps1
```powershell
.\test-runtime-fixes.ps1
# Results: 8/8 (100%)
```
**Test Categories:**
1. **getItem Language Handling (2/2)**
- Template path with smart default to 'en'
- Content path with smart default
2. **getFieldValue (2/2)**
- Single field query with `{ name value }` subselection
- All fields query with `fields(ownFields: false)`
3. **getTemplate (1/1)**
- Template by path with forced `language='en'`
4. **getTemplates Schema Fix (2/2)**
- Templates via `children()` query (no non-existent `templates()`)
- ItemTemplate structure validation (id/name only, no path)
5. **getChildren (1/1)**
- Children as direct array (no `.results` field)
### Existing Test Suite: test-comprehensive-v1.4.ps1
```powershell
.\test-comprehensive-v1.4.ps1
# Results: 25/25 (100%)
# NO REGRESSIONS
```
### Combined Coverage
**Total: 33/33 tests (100%)**
- Runtime fixes: 8 tests
- Comprehensive: 25 tests
- Zero regressions
---
## π¦ What's Changed
### Modified Files
1. **src/sitecore-service.ts**
- `getTemplate()`: Force `language='en'`, enhanced error message
- `getTemplates()`: Use `children()` query, remove `path` field from ItemTemplate
### New Files
1. **test-runtime-fixes.ps1**: 8 tests for runtime error scenarios
2. **RUNTIME-ERROR-FIXES.md**: Detailed documentation of all fixes
### Schema Files (Reference)
1. **.github/introspectionSchema.json**: 15,687 lines (PRIMARY schema source)
2. **src/sitecore-types.ts**: 423 lines (generated TypeScript types)
3. **graphql-schema-summary.json**: 111 lines (quick reference)
---
## β οΈ CRITICAL REQUIREMENTS (Breaking Changes)
### 1. Smart Language Defaults
**PRODUCTION RULE:**
```typescript
// Templates, renderings, system items: ALTIJD 'en'
if (path.startsWith('/sitecore/templates')) language = 'en';
if (path.startsWith('/sitecore/layout')) language = 'en';
if (path.startsWith('/sitecore/system')) language = 'en';
// Content items: 'en' als default, tenzij expliciet opgegeven
if (path.startsWith('/sitecore/content')) language = language || 'en';
```
**WAAROM:**
- β
Templates en renderings zijn ALTIJD in 'en' (Sitecore standaard)
- β
Content kan meertalig zijn
- β
Voorkomt "item not found" errors bij verkeerde language
### 2. Helix Architecture Awareness
**PRODUCTIE STRUCTUUR:**
```
/sitecore/templates/
βββ Foundation/ # Basis templates (altijd 'en')
βββ Feature/ # Feature templates (altijd 'en')
βββ Project/ # Project-specifieke templates (altijd 'en')
/sitecore/layout/
βββ Renderings/
β βββ Foundation/
β βββ Feature/
β βββ Project/
βββ Layouts/
```
**CRITICAL:**
- β
Alle templates MOETEN in 'en' language
- β
Content volgt site language settings
- β
Renderings zijn in 'en'
- β
Media Library vaak in 'en'
### 3. Version Management
**ALTIJD GEBRUIKEN:**
- β
Gebruik laatste versie tenzij expliciet anders gevraagd
- β
Response MOET altijd `versionCount` bevatten
- β
Format: `{ version: 2, versionCount: 5 }` = "versie 2 van 5"
### 4. Field Discovery via Template
**WANNEER GEVRAAGD naar "fields van item X":**
1. Gebruik `sitecore_get_item_fields` (NIET individuele field queries!)
2. Dit haalt ALLE fields op basis van template
3. Includes inherited fields (Helix base templates)
4. Returns: `{ totalFields: 42, fields: [{name, value}] }`
### 5. GraphQL Schema Correctness
**CRITICAL SCHEMA FIXES:**
```graphql
# β
CORRECT: Search returns results.items
search(keyword: "Home") {
results {
items { # PLURAL: items, not item!
id
name
}
}
}
# β
CORRECT: DateField/TextField require { value }
... on Statistics {
created { value } # NOT just: created
createdBy { value } # NOT just: createdBy
}
```
---
## π οΈ Changes
### Modified Files
1. **src/sitecore-service.ts** (~1432 lines)
- Added: `getSmartLanguageDefault()` method
- Updated: `getItem()` met smart defaults + versionCount
- Added: `getItemFieldsFromTemplate()` method
- Fixed: `queryItems()` search structure (results.items)
- Fixed: `searchItems()` search structure (results.items)
2. **src/index.ts** (~1100 lines)
- Added: `sitecore_get_item_fields` tool definition
- Added: Handler voor field discovery
3. **.github/copilot-instructions.md** (~400 lines)
- Added: CRITICAL REQUIREMENTS section
- Updated: GraphQL Schema Patterns
- Updated: Version info (1.4.0)
- Added: Helix Architecture details
- Added: Smart Defaults rules
### New Files
4. **test-comprehensive-v1.4.ps1** (NEW)
- 25 comprehensive tests
- 8 categories: Smart Defaults, Field Discovery, Helix, Versions, Navigation, Statistics, Search, Field Types
- 100% pass rate
- ASCII-only (geen emoji's voor PowerShell compatibility)
5. **test-search-structure.ps1** (NEW)
- Debug script voor search query structure
- Validates results.items pattern
6. **test-search-correct.ps1** (NEW)
- Validates correct search implementation
7. **test-debug-failures.ps1** (NEW)
- Debug script voor failed test analysis
---
## π Test Coverage
### Comprehensive Test Suite Results
```
=============================================
Test Summary
=============================================
Total Tests: 25
Passed: 25
Failed: 0
Smart Defaults: 4/4 (100%)
Field Discovery: 3/3 (100%)
Helix: 3/3 (100%)
Versions: 3/3 (100%)
Navigation: 3/3 (100%)
Statistics: 3/3 (100%)
Search: 3/3 (100%)
Field Types: 3/3 (100%)
[SUCCESS] All tests passed!
```
### Test Categories
#### 1. Smart Defaults (4 tests)
- β
Template in 'en' (smart default)
- β
Content with explicit language
- β
Version count included
- β
Latest version default
#### 2. Field Discovery (3 tests)
- β
All fields from template (ownFields: false)
- β
Own fields only (ownFields: true)
- β
Single field with value
#### 3. Helix Architecture (3 tests)
- β
Foundation templates (always 'en')
- β
Renderings (always 'en')
- β
System items (always 'en')
#### 4. Version Management (3 tests)
- β
Get version 1
- β
Children with version
- β
Field value from version 1
#### 5. Navigation (3 tests)
- β
Get parent item
- β
Children (direct array, no .results)
- β
HasChildren property
#### 6. Statistics (3 tests)
- β
Statistics (created, updated)
- β
Language object with name
- β
Template ID and name
#### 7. Search (3 tests)
- β
Search with results.items wrapper
- β
Search with language filter
- β
Search with rootItem filter
#### 8. Field Types (3 tests)
- β
DateField requires { value }
- β
TextField requires { value }
- β
ItemField { name value }
---
## π― MCP Tools Status
### All Tools Working (10/10) β
1. **sitecore_get_item** - Item ophalen met smart defaults
2. **sitecore_get_children** - Children ophalen
3. **sitecore_get_field_value** - Field value ophalen
4. **sitecore_query** - Custom GraphQL query
5. **sitecore_search** - Items zoeken (FIXED: results.items)
6. **sitecore_get_template** - Template info ophalen
7. **sitecore_get_item_versions** - Version lijst (v1.3.0)
8. **sitecore_get_parent** - Parent item (v1.3.0)
9. **sitecore_get_statistics** - Statistics (v1.3.0)
10. **sitecore_get_item_fields** - Field discovery (v1.4.0 NEW!)
---
## π Documentation Updates
### Updated Files
- **.github/copilot-instructions.md** - Added CRITICAL REQUIREMENTS
- **BACKLOG.md** - Updated v1.4.0 stories
- **README.md** - Will be updated next
### New Documentation
- **RELEASE-NOTES-v1.4.0.md** - This file
---
## π Migration Guide
### From v1.3.0 to v1.4.0
**Breaking Changes:**
1. **Search Queries** - Access via `results.items` instead of `results`:
```typescript
// β v1.3.0:
const items = result.search.results;
// β
v1.4.0:
const items = result.search.results.items;
```
2. **Language Parameter** - Nu optional overal:
```typescript
// β
v1.3.0:
getItem(path, language = "en")
// β
v1.4.0:
getItem(path, language?) // Smart defaults!
```
**Backward Compatibility:**
- β
Default language 'en' blijft werken
- β
Bestaande code werkt (maar gebruikt nu smart defaults)
- β
Search code moet update naar `.results.items`
---
## π Deployment Checklist
- [x] All code changes implemented
- [x] TypeScript compilation: SUCCESS
- [x] Comprehensive test suite: 25/25 PASS
- [x] Version bumped: 1.3.0 β 1.4.0
- [x] Release notes created
- [x] Copilot instructions updated
- [ ] README.md update
- [ ] BACKLOG.md update
- [ ] Git commit
- [ ] VSIX package build
- [ ] GitHub release
---
## π Links
- **GitHub**: https://github.com/GaryWenneker/sitecore-mcp-server
- **Issues**: https://github.com/GaryWenneker/sitecore-mcp-server/issues
- **Publisher**: Gary Wenneker
- **Blog**: https://www.gary.wenneker.org
- **LinkedIn**: https://www.linkedin.com/in/garywenneker/
---
## π Acknowledgments
Deze release implementeert alle critical production requirements:
- β
Smart language defaults
- β
Sitecore best practices
- β
Helix architecture awareness
- β
Version management
- β
Template-based field discovery
- β
Schema-validated queries
- β
100% test coverage
**Status:** π READY FOR PRODUCTION!