mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-11 14:52:55 +01:00
9.3 KiB
9.3 KiB
Breaking Changes Impact Matrix
This document assesses the impact of dependency updates on OpenNoodl functionality.
Impact Assessment Scale
| Level | Description | Risk Mitigation |
|---|---|---|
| 🟢 Low | Minor changes, unlikely to cause issues | Normal testing |
| 🟡 Medium | Some code changes needed | Targeted testing of affected areas |
| 🔴 High | Significant refactoring required | Comprehensive testing, rollback plan |
| ⚫ Critical | May break production functionality | Extensive testing, staged rollout |
Changes Already Applied (Previous Developer)
These changes are already in the codebase from branches 12 and 13:
React 17 → 19 Migration
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| ReactDOM.render() → createRoot() | 🔴 High | ✅ Done | Previous dev updated all calls |
| Concurrent rendering behavior | 🟡 Medium | ⚠️ Needs Testing | May affect timing-sensitive code |
| Strict mode changes | 🟡 Medium | ⚠️ Needs Testing | Double-renders in dev mode |
| useEffect cleanup timing | 🟡 Medium | ⚠️ Needs Testing | Cleanup now synchronous |
| Automatic batching | 🟢 Low | ✅ Done | Generally beneficial |
| Suspense changes | 🟡 Medium | ⚠️ Needs Testing | If using Suspense anywhere |
Affected Files:
packages/noodl-editor/src/editor/index.tspackages/noodl-editor/src/editor/src/router.tsxpackages/noodl-editor/src/editor/src/views/commentlayer.tspackages/noodl-editor/src/editor/src/views/nodegrapheditor.ts- Various popup/dialog components
react-instantsearch-hooks-web → react-instantsearch
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| Package rename | 🟢 Low | ✅ Done | Import path changed |
| API compatibility | 🟢 Low | ⚠️ Needs Testing | Mostly compatible |
| Hook availability | 🟢 Low | ⚠️ Needs Testing | Verify all used hooks exist |
Affected Files:
packages/noodl-editor/src/editor/src/views/HelpCenter/HelpCenter.tsx
Algoliasearch 4.x → 5.x
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| Client initialization | 🟡 Medium | ⚠️ Check | API may have changed |
| Search parameters | 🟢 Low | ⚠️ Check | Mostly compatible |
| Response format | 🟡 Medium | ⚠️ Check | May have minor changes |
Pending Changes (TASK-001)
Storybook 6.x → 9.x (Configuration Fix)
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| CLI commands | 🔴 High | 🔲 TODO | start-storybook → storybook dev |
| Configuration format | 🔴 High | 🔲 Check | main.js format changed |
| Addon compatibility | 🟡 Medium | 🔲 Check | Some addons may need updates |
| Story format | 🟢 Low | 🔲 Check | CSF 3 format supported |
Configuration Changes Required:
Old .storybook/main.js:
module.exports = {
stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
addons: ['@storybook/addon-essentials'],
};
New .storybook/main.js (Storybook 9):
export default {
stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
addons: ['@storybook/addon-essentials'],
framework: {
name: '@storybook/react-webpack5',
options: {},
},
};
copy-webpack-plugin 4.x → 12.x
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| Configuration API | 🔴 High | 🔲 TODO | Array → patterns object |
| Glob patterns | 🟡 Medium | 🔲 Check | Some patterns may differ |
| Options format | 🔴 High | 🔲 TODO | Many options renamed |
Migration Example:
// Before (v4)
new CopyWebpackPlugin([
{ from: 'static', to: 'static' },
{ from: 'index.html', to: 'index.html' }
])
// After (v12)
new CopyWebpackPlugin({
patterns: [
{ from: 'static', to: 'static' },
{ from: 'index.html', to: 'index.html' }
]
})
clean-webpack-plugin 1.x → 4.x
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| Constructor signature | 🔴 High | 🔲 TODO | No longer takes paths |
| Default behavior | 🟡 Medium | 🔲 Check | Auto-cleans output.path |
| Options | 🟡 Medium | 🔲 Check | Different options available |
Migration Example:
// Before (v1)
new CleanWebpackPlugin(['dist', 'build'])
// After (v4)
new CleanWebpackPlugin() // Automatically cleans output.path
// Or with options:
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: ['**/*', '!static-files*'],
})
webpack-dev-server 3.x → 4.x
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| Configuration location | 🔴 High | 🔲 TODO | Changes in config structure |
| Hot reload | 🟢 Low | 🔲 Check | Improved in v4 |
| Proxy config | 🟡 Medium | 🔲 Check | Minor changes |
Key Configuration Changes:
// Before (v3)
devServer: {
contentBase: './dist',
hot: true,
inline: true
}
// After (v4)
devServer: {
static: './dist',
hot: true,
// inline removed (always true in v4)
}
Jest 28 → 29
| Aspect | Impact | Status | Notes |
|---|---|---|---|
| Mock hoisting | 🟡 Medium | 🔲 Check | Stricter hoisting behavior |
| Snapshot format | 🟢 Low | 🔲 Check | Minor formatting changes |
| jsdom version | 🟢 Low | 🔲 Check | Updated internal jsdom |
Future Considerations (Not in TASK-001)
Electron 31 → 39
| Aspect | Impact | Risk | Notes |
|---|---|---|---|
| Chromium version | 🟡 Medium | Security | Many Chromium updates |
| Node.js version | 🟡 Medium | Compatibility | May affect native modules |
| Remote module | 🔴 High | Breaking | @electron/remote changes |
| Security policies | 🔴 High | Testing | CSP and other policies |
| Native APIs | 🔴 High | Testing | Some APIs deprecated |
Recommendation: Plan incremental upgrade path (31 → 33 → 35 → 39)
Express 4 → 5
| Aspect | Impact | Risk | Notes |
|---|---|---|---|
| Async error handling | 🔴 High | Breaking | Errors now propagate |
| Path route matching | 🟡 Medium | Breaking | Stricter path matching |
| req.query | 🟡 Medium | Check | May return different types |
| app.router | 🔴 High | Breaking | Removed |
Affected Packages:
- noodl-editor (development server)
- noodl-parse-dashboard
Dugite 1.x → 3.x
| Aspect | Impact | Risk | Notes |
|---|---|---|---|
| API changes | ⚫ Critical | Breaking | Major API overhaul |
| Git operations | ⚫ Critical | Testing | Affects all git functionality |
| Authentication | 🔴 High | Testing | May affect auth flow |
Recommendation: Extensive research required before planning upgrade
ESLint 8 → 9
| Aspect | Impact | Risk | Notes |
|---|---|---|---|
| Config format | 🔴 High | Breaking | Must use flat config |
| Plugin loading | 🔴 High | Breaking | Different loading syntax |
| Rules | 🟡 Medium | Check | Some rules moved/renamed |
Migration Required:
// Before (.eslintrc.js)
module.exports = {
extends: ['eslint:recommended'],
plugins: ['react'],
rules: { ... }
};
// After (eslint.config.js)
import react from 'eslint-plugin-react';
export default [
{ plugins: { react } },
{ rules: { ... } }
];
Package Dependency Graph
Understanding how packages depend on each other is critical for impact assessment:
noodl-editor
├── @noodl/git (git operations)
├── @noodl/platform-electron (electron APIs)
│ └── @noodl/platform-node (file system)
│ └── @noodl/platform (interfaces)
├── @noodl/noodl-parse-dashboard (admin panel)
├── react 19.0.0
├── react-dom 19.0.0
└── electron 31.3.1
noodl-viewer-react
├── @noodl/runtime (node evaluation)
├── react (peer)
└── react-dom (peer)
noodl-core-ui
├── react 19.0.0 (peer)
├── react-dom 19.0.0 (peer)
└── storybook 9.1.3 (dev)
Risk Mitigation Strategies
For High-Impact Changes
- Create feature branch for each major update
- Write regression tests before making changes
- Test incrementally - don't batch multiple breaking changes
- Document workarounds if issues are found
- Have rollback plan ready
For Testing
| Area | Test Type | Priority |
|---|---|---|
| React 19 behavior | Manual + Unit | 🔴 High |
| Build process | CI/CD | 🔴 High |
| Editor functionality | E2E | 🔴 High |
| Storybook components | Visual | 🟡 Medium |
| Git operations | Integration | 🟡 Medium |
| Help Center search | Manual | 🟢 Low |
Rollback Procedures
- Git-based:
git revertthe offending commit - Package-based: Pin to previous version in package.json
- Feature-flag-based: Add runtime flag to disable new behavior
Summary of Breaking Changes by Phase
Phase 1 (TASK-001) - Low to Medium Risk
| Change | Impact | Complexity |
|---|---|---|
| Storybook script fix | 🔴 Local | 🟢 Low |
| TypeScript alignment | 🟢 Low | 🟢 Low |
| Webpack plugins | 🟡 Medium | 🟡 Medium |
| Jest 29 | 🟢 Low | 🟢 Low |
Future Phases - High Risk
| Change | Impact | Complexity |
|---|---|---|
| Electron upgrade | ⚫ Critical | 🔴 High |
| Express 5 | 🔴 High | 🟡 Medium |
| Dugite 3 | ⚫ Critical | 🔴 High |
| ESLint 9 | 🟡 Medium | 🟡 Medium |