From 80e3391773b676bee25e193cea95e100c6c60593 Mon Sep 17 00:00:00 2001 From: czlonkowski <56956555+czlonkowski@users.noreply.github.com> Date: Sat, 11 Oct 2025 20:29:06 +0200 Subject: [PATCH] chore: bump version to 2.18.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update version from 2.18.7 to 2.18.8 - Add comprehensive CHANGELOG entry for PR #308 - Include rebuilt database with modes field (100% coverage) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- CHANGELOG.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ data/nodes.db | Bin 62623744 -> 62623744 bytes package.json | 2 +- 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19bfb23..c4c3dff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,72 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.18.8] - 2025-10-11 + +### 🐛 Bug Fixes + +**PR #308: Enable Schema-Based resourceLocator Mode Validation** + +This release fixes critical validator false positives by implementing true schema-based validation for resourceLocator modes. The root cause was discovered through deep analysis: the validator was looking at the wrong path for mode definitions in n8n node schemas. + +#### Root Cause + +- **Wrong Path**: Validator checked `prop.typeOptions?.resourceLocator?.modes` ❌ +- **Correct Path**: n8n stores modes at `prop.modes` (top level of property) ✅ +- **Impact**: 0% validation coverage - all resourceLocator validation was being skipped, causing false positives + +#### Fixed + +- **Schema-Based Validation Now Active** + - **Issue #304**: Google Sheets "name" mode incorrectly rejected (false positive) + - **Coverage**: Increased from 0% to 100% (all 70 resourceLocator nodes now validated) + - **Root Cause**: Validator reading from wrong schema path + - **Fix**: Changed validation path from `prop.typeOptions?.resourceLocator?.modes` to `prop.modes` + - **Files Changed**: + - `src/services/config-validator.ts` (lines 273-310): Corrected validation path + - `src/parsers/property-extractor.ts` (line 234): Added modes field capture + - `src/services/node-specific-validators.ts` (lines 270-282): Google Sheets range/columns flexibility + - Updated 6 test files to match real n8n schema structure + +- **Database Rebuild** + - Rebuilt with modes field captured from n8n packages + - All 70 resourceLocator nodes now have mode definitions populated + - Enables true schema-driven validation (no more hardcoded mode lists) + +- **Google Sheets Enhancement** + - Now accepts EITHER `range` OR `columns` parameter for append operation + - Supports Google Sheets v4+ resourceMapper pattern + - Better error messages showing actual allowed modes from schema + +#### Testing + +- **Before Fix**: + - ❌ Valid Google Sheets "name" mode rejected (false positive) + - ❌ Schema-based validation inactive (0% coverage) + - ❌ Hardcoded mode validation only + +- **After Fix**: + - ✅ Valid "name" mode accepted + - ✅ Schema-based validation active (100% coverage - 70/70 nodes) + - ✅ Invalid modes rejected with helpful errors: `must be one of [list, url, id, name]` + - ✅ All 143 tests pass + - ✅ Verified with n8n-mcp-tester agent + +#### Impact + +- **Fixes #304**: Google Sheets "name" mode false positive eliminated +- **Related to #306**: Validator improvements +- **No Breaking Changes**: More permissive (accepts previously rejected valid modes) +- **Better UX**: Error messages show actual allowed modes from schema +- **Maintainability**: Schema-driven approach eliminates need for hardcoded mode lists +- **Code Quality**: Code review score 9.3/10 + +#### Example Error Message (After Fix) +``` +resourceLocator 'sheetName.mode' must be one of [list, url, id, name], got 'invalid' +Fix: Change mode to one of: list, url, id, name +``` + ## [2.18.6] - 2025-10-10 ### 🐛 Bug Fixes diff --git a/data/nodes.db b/data/nodes.db index 0a8425d88f952092a68ae2c1b268d158fb970cbc..99e1de6b693b3b06cf9524801598c9858fd7dea5 100644 GIT binary patch delta 3601 zcmWmDW1A2N07cn_*Mcdp_Rx=Y$dUhTFI>BRthVnmC8zOrLodl>8$it z1}meL$;xbHv9em(tn5|}E2ovq%5CMb@>=<<{8j<0pjF5!Y!$JJTE(p5Rtc-5Rmv)D zm9ffN<*f2n1*@V}$*OEsv8r0ttm;+`tEN@Us%_P=>RR=z`c?z0q1DK0Y&Ef(TFor_ zG`CtnrItxi^FtBcju>SlGfdRRTJURH0bkJZ=eXZ5!RSOcv= z)?jOhHPjkr4Yx*E!PZF2)+lSVHO30D##-a7@zw-uqBY5yY)!GITGOoQ)(mT=HOrc9 z&9UZM^Q`&S0&AhQ$XaYIv6foPtmW1UYo)cyT5YYd)>`YV_0|S!qqWJ}Y;Cc&THCDc z)(&f@waeOV?XmV+`>g%e0qdZ3$U1Btv5s2DtmD=R>!fwcI&Gb?&RV}&zgy?5^VS9H zqIJo-Y+bRgT7Ou7TGy=W)(z{Xb<4VK-LdXk_pJNY1M8vn$a-u&v7TDbtmoEW*5B4Y z*1y&Z>!tO|dTqV2-dgXh_tppNqxH%9Y<;o5THmbi)(`7H>t~2UO;9KVA_$=o24N8n z;Sm855ebnI1yK5%~$ zkqMcR1zC{|*^vV|kqfzz2YHbX`B4A`Q3!=m1VvE{#Zdw!Q3|C|24ztWo_0a$g(Fl#v1WnNlzxp>v3$#Qlv_>1WMLV=d2XsUybVe6+ zMK^Ru5A;MY^hO`_ML+b%01U(+48{-)#V`!V2n1s!j8PbkF$lp}jKg?Lz(h>KWK6+S zOv7}{z)Z}-Y|O!2%)@*vz(Op-Vl2T@EW>iFz)GybYOKLptiyV2z(#DsW^BP$Y{Pc! zz)tMKZtTHc?8AN>z(E|sVI09x9K&&(z)76KX`I1X{D$9g4(D+J7jX%faRpcL2mZu0 zT*nRE#4X&$9o)q|+{Xhv#3MY$6FkK;JjY-78~@;6yueGm!fU+2TfD=2e85M1!e@NJ zSA4^F{J?+s87f49?2kYMAvD4uEW#l?A|N6nAu^&MDxx7eVjw1BAvWS5F5)3R5+ETG zAu*C5DUu;MQXnN#AvMw@+p*HHEF6yB^8lWK>p)s1EDVpI| z|K@0cmS~06XoI$BhxX`zj_8EW=z^~3hVJNrp6G?%=!3rKhyECVff$6r7=ob~hT#~2 zV2p$@3ZpRwAsCBs7>@~9UcX*Ev_=r#Vj4$|#Z}^TM_zyn=LlngR2t*Jn|BM#ys9^xYb5+V^2BMFis8ImIfQX&;nBMs6b9nvEMG9nW)BMY)3 z8?qw@av~RUBM$k7>c6=N}?1>qYTQT9Ll2tDxwl9qYA2`8mglP zYN8fuqYmn#9_ph38ln*zqY0X#8GiL|juvQ%R%nejXp44ej}GXFPUws-=!$OWjvnZV zUg(WJ=!<^nj{z8nK^Tl77>Z#Sju8mPNEo9q8e#Th1FPtwOEJs*no}Lgw5E3t=NX`*nyqch27YL Ny+H@GFKF?k{{d#WK`;OS delta 3601 zcmWmDmx1o?Fk4-kTD=2uw_7~z}!3t!P$sD~1)*ie<&N;#hI5cvgHXftAooWF@weSV^s9R&pzamC{OOrMA*oX{~ft zdMksK(aL0Hwz61Rt!!3yD~FZS%4OxY@>qGTd{%y|fK|{cWEHlGSVgU3R&lF@RnjVD zmA1-QWvy~nd8>j|(W+!swyIcFt!h?vtAR5HHdRBd_fz{AzWHq*$SWT^F z7JZsqEv%MSE338D#%gP|v)Wr7td3SEtFzU`>S}efx?4T0o>nibx7Ek$YxT4GTLY|t z)*x%JHN+Zf4YP(@Bdn3uD9hGpYm7D43bw{svz;b=G=ogSFAxWNo&#SX-@a z)^=-$wbR;V?Y8zx6aEI%S=tdSXZrU)^+QKbxK2wdS$(~-dJy~ch-CBgZ0t+WPP^2SYNGg)<4$2)_3cN^`G@KSfM5=6ao>1&fQqPu z%BX^>sD|pOftsj=+NguNsE7J!fQD#<#%O}3Xog??o1+C)9hGPUqVib(g7=y70#yE_}1Wd#vOvV&U z#WYOE49vtV%*Gtd#XQW%0xZNLEJg^HU@4YiIaXjLR$(>PU@g{RJvLw?HeoZiU@Nv^ zJ9c0vc40U6U@!JzKMvp^4&gA4;3$saI8NXsPT@3u!|ynQvp9$IxPXhegv+>stGI^i zxPhCvh19UcX*Ev_=r#Vj4$|# zZ}*Ki#-a1*z18+ULQ_i!J7;7>fjL;Qum@d%Ic1W)k{ z&+!5;@d~f;25<2W@9_a2@d=;t1z+(E|KMMI#}E96pMk*&Vt)i82%!-MVG$1D5djeq z36T*6Q4tN%5d$$13$YOgaS;#kkpKyi2#JvdNs$c6kpd}^3aOC>X^{@;kpUTz37L@v zS&