com.wallstop-studios.dxmessaging 2.1.5 → 2.1.7
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/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +1 -1
- package/.cspell.json +4 -1
- package/.github/workflows/actionlint.yml +11 -1
- package/.github/workflows/csharpier-autofix.yml +34 -3
- package/.github/workflows/dotnet-tests.yml +13 -0
- package/.github/workflows/format-on-demand.yml +38 -44
- package/.github/workflows/json-format-check.yml +24 -0
- package/.github/workflows/lint-doc-links.yml +13 -0
- package/.github/workflows/markdown-json.yml +21 -4
- package/.github/workflows/markdown-link-text-check.yml +10 -0
- package/.github/workflows/markdown-link-validity.yml +10 -0
- package/.github/workflows/markdownlint.yml +7 -5
- package/.github/workflows/prettier-autofix.yml +67 -11
- package/.github/workflows/release-drafter.yml +2 -2
- package/.github/workflows/sync-wiki.yml +3 -3
- package/.github/workflows/yaml-format-lint.yml +26 -0
- package/.llm/context.md +113 -3
- package/.llm/skills/documentation/changelog-management.md +38 -0
- package/.llm/skills/documentation/documentation-style-guide.md +18 -0
- package/.llm/skills/documentation/documentation-update-workflow.md +2 -0
- package/.llm/skills/documentation/documentation-updates.md +2 -0
- package/.llm/skills/documentation/markdown-compatibility.md +476 -0
- package/.llm/skills/documentation/mermaid-theming.md +326 -0
- package/.llm/skills/documentation/mkdocs-navigation.md +290 -0
- package/.llm/skills/github-actions/git-renormalize-patterns.md +231 -0
- package/.llm/skills/github-actions/workflow-consistency.md +346 -0
- package/.llm/skills/index.md +53 -27
- package/.llm/skills/scripting/javascript-code-quality.md +417 -0
- package/.llm/skills/scripting/regex-documentation.md +461 -0
- package/.llm/skills/scripting/shell-best-practices.md +55 -4
- package/.llm/skills/scripting/validation-patterns.md +418 -0
- package/.llm/skills/specification.md +4 -1
- package/.llm/skills/testing/test-code-quality.md +243 -0
- package/.llm/skills/testing/test-production-code.md +348 -0
- package/CHANGELOG.md +24 -0
- package/README.md +113 -24
- package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef +1 -6
- package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef +1 -1
- package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef +1 -1
- package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef +1 -1
- package/coverage/clover.xml +216 -3
- package/coverage/clover.xml.meta +7 -7
- package/coverage/coverage-final.json +2 -1
- package/coverage/coverage-final.json.meta +7 -7
- package/coverage/lcov-report/base.css.meta +1 -1
- package/coverage/lcov-report/block-navigation.js.meta +1 -1
- package/coverage/lcov-report/favicon.png.meta +1 -1
- package/coverage/lcov-report/index.html +25 -10
- package/coverage/lcov-report/index.html.meta +7 -7
- package/coverage/lcov-report/prettify.css.meta +1 -1
- package/coverage/lcov-report/prettify.js.meta +1 -1
- package/coverage/lcov-report/sort-arrow-sprite.png.meta +1 -1
- package/coverage/lcov-report/sorter.js.meta +1 -1
- package/coverage/lcov-report/transform-docs-to-wiki.js.html +1 -1
- package/coverage/lcov-report/transform-docs-to-wiki.js.html.meta +7 -7
- package/coverage/lcov-report/vendor.meta +1 -1
- package/coverage/lcov-report.meta +8 -8
- package/coverage/lcov.info +365 -0
- package/coverage/lcov.info.meta +7 -7
- package/docs/architecture/design-and-architecture.md +0 -1
- package/docs/concepts/index.md +37 -0
- package/docs/concepts/index.md.meta +7 -0
- package/docs/concepts/interceptors-and-ordering.md +0 -2
- package/docs/concepts/mental-model.md +390 -0
- package/docs/concepts/mental-model.md.meta +7 -0
- package/docs/concepts/message-types.md +0 -1
- package/docs/getting-started/getting-started.md +1 -0
- package/docs/getting-started/index.md +6 -5
- package/docs/getting-started/overview.md +1 -0
- package/docs/getting-started/quick-start.md +2 -1
- package/docs/getting-started/visual-guide.md +4 -10
- package/docs/hooks.py +10 -1
- package/docs/images/DxMessaging-banner.svg +1 -1
- package/docs/index.md +7 -7
- package/docs/javascripts/mermaid-config.js +44 -4
- package/docs/reference/helpers.md +130 -154
- package/docs/reference/quick-reference.md +5 -1
- package/docs/reference/reference.md +124 -130
- package/mkdocs.yml +2 -0
- package/package.json +7 -2
- package/scripts/__tests__/generate-skills-index.test.js +397 -0
- package/scripts/__tests__/generate-skills-index.test.js.meta +7 -0
- package/scripts/__tests__/mermaid-config.test.js +467 -0
- package/scripts/__tests__/mermaid-config.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-optional-fields.test.js +1474 -0
- package/scripts/__tests__/validate-skills-optional-fields.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-required-fields.test.js +188 -0
- package/scripts/__tests__/validate-skills-required-fields.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-tags.test.js +353 -0
- package/scripts/__tests__/validate-skills-tags.test.js.meta +7 -0
- package/scripts/__tests__/validate-workflows.test.js +188 -0
- package/scripts/__tests__/validate-workflows.test.js.meta +7 -0
- package/scripts/generate-skills-index.js +88 -3
- package/scripts/validate-skills.js +230 -30
- package/scripts/validate-workflows.js +272 -0
- package/scripts/validate-workflows.js.meta +7 -0
- package/scripts/wiki/generate-wiki-sidebar.js.meta +1 -8
- package/scripts/wiki/transform-docs-to-wiki.js.meta +1 -1
- package/site/404.html +1 -1
- package/site/advanced/emit-shorthands/index.html +2 -2
- package/site/advanced/message-bus-providers/index.html +2 -2
- package/site/advanced/registration-builders/index.html +2 -2
- package/site/advanced/runtime-configuration/index.html +2 -2
- package/site/advanced/string-messages/index.html +2 -2
- package/site/advanced.meta +1 -1
- package/site/architecture/comparisons/index.html +2 -2
- package/site/architecture/design-and-architecture/index.html +2 -2
- package/site/architecture/performance/index.html +1 -1
- package/site/architecture.meta +1 -1
- package/site/concepts/index.html +1 -0
- package/site/concepts/index.html.meta +7 -0
- package/site/concepts/interceptors-and-ordering/index.html +4 -4
- package/site/concepts/listening-patterns/index.html +2 -2
- package/site/concepts/mental-model/index.html +146 -0
- package/site/concepts/mental-model/index.html.meta +7 -0
- package/site/concepts/mental-model.meta +8 -0
- package/site/concepts/message-types/index.html +2 -2
- package/site/concepts/targeting-and-context/index.html +2 -2
- package/site/concepts.meta +1 -1
- package/site/examples/end-to-end/index.html +2 -2
- package/site/examples/end-to-end-scene-transitions/index.html +2 -2
- package/site/examples.meta +1 -1
- package/site/getting-started/getting-started/index.html +3 -3
- package/site/getting-started/index.html +4 -4
- package/site/getting-started/install/index.html +3 -3
- package/site/getting-started/overview/index.html +2 -2
- package/site/getting-started/quick-start/index.html +2 -2
- package/site/getting-started/visual-guide/index.html +11 -11
- package/site/getting-started.meta +1 -1
- package/site/guides/advanced/index.html +2 -2
- package/site/guides/diagnostics/index.html +2 -2
- package/site/guides/migration-guide/index.html +2 -2
- package/site/guides/patterns/index.html +2 -2
- package/site/guides/testing/index.html +2 -2
- package/site/guides/unity-integration/index.html +2 -2
- package/site/guides.meta +1 -1
- package/site/hooks.py.meta +1 -1
- package/site/images/DxMessaging-banner.svg +119 -0
- package/site/images/DxMessaging-banner.svg.meta +7 -0
- package/site/images.meta +8 -0
- package/site/index.html +2 -2
- package/site/integrations/index.html +2 -2
- package/site/integrations/reflex/index.html +2 -2
- package/site/integrations/vcontainer/index.html +2 -2
- package/site/integrations/zenject/index.html +2 -2
- package/site/integrations.meta +1 -1
- package/site/javascripts/csharp-highlight.js.meta +7 -7
- package/site/javascripts/mermaid-config.js +4 -1
- package/site/javascripts/mermaid-config.js.meta +1 -1
- package/site/javascripts.meta +1 -1
- package/site/reference/compatibility/index.html +1 -1
- package/site/reference/faq/index.html +1 -1
- package/site/reference/glossary/index.html +2 -2
- package/site/reference/helpers/index.html +15 -15
- package/site/reference/quick-reference/index.html +3 -3
- package/site/reference/reference/index.html +37 -37
- package/site/reference/troubleshooting/index.html +1 -1
- package/site/reference.meta +1 -1
- package/site/search/search_index.json +1 -1
- package/site/sitemap.xml +46 -38
- package/site/sitemap.xml.gz +0 -0
- package/site/stylesheets/extra.css.meta +1 -1
- package/site/stylesheets.meta +1 -1
package/.llm/skills/index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Skills Index
|
|
2
2
|
|
|
3
|
-
> **Auto-generated** on 2026-01-
|
|
3
|
+
> **Auto-generated** on 2026-01-30. Do not edit manually.
|
|
4
4
|
> Run `node scripts/generate-skills-index.js` to regenerate.
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -9,19 +9,20 @@
|
|
|
9
9
|
|
|
10
10
|
| Metric | Value |
|
|
11
11
|
| ------------ | ----- |
|
|
12
|
-
| Total Skills |
|
|
13
|
-
| Categories |
|
|
14
|
-
| Unique Tags |
|
|
12
|
+
| Total Skills | 86 |
|
|
13
|
+
| Categories | 6 |
|
|
14
|
+
| Unique Tags | 162 |
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
18
|
## Table of Contents
|
|
19
19
|
|
|
20
|
-
- [Documentation](#documentation) (
|
|
20
|
+
- [Documentation](#documentation) (15)
|
|
21
|
+
- [GitHub Actions](#github-actions) (2)
|
|
21
22
|
- [Performance](#performance) (24)
|
|
22
|
-
- [Scripting](#scripting) (
|
|
23
|
+
- [Scripting](#scripting) (6)
|
|
23
24
|
- [Solid](#solid) (13)
|
|
24
|
-
- [Testing](#testing) (
|
|
25
|
+
- [Testing](#testing) (26)
|
|
25
26
|
- [Tag Cloud](#tag-cloud)
|
|
26
27
|
- [All Skills by Complexity](#all-skills-by-complexity)
|
|
27
28
|
|
|
@@ -29,20 +30,30 @@
|
|
|
29
30
|
|
|
30
31
|
## Documentation
|
|
31
32
|
|
|
32
|
-
| Skill | Lines | Complexity
|
|
33
|
-
| ------------------------------------------------------------------------------------------- | ------ |
|
|
34
|
-
| [Changelog Entry Writing and Anti-Patterns](./documentation/changelog-entry-writing.md) | ✅ 278 | 🟢 Basic
|
|
35
|
-
| [Changelog Management](./documentation/changelog-management.md) |
|
|
36
|
-
| [Changelog Release Workflow](./documentation/changelog-release-workflow.md) | ✅ 250 | 🟢 Basic
|
|
37
|
-
| [Documentation Code Samples](./documentation/documentation-code-samples.md) | ✅ 263 | 🟢 Basic
|
|
38
|
-
| [Documentation Style Guide](./documentation/documentation-style-guide.md) |
|
|
39
|
-
| [Documentation Update Workflow](./documentation/documentation-update-workflow.md) | 📝
|
|
40
|
-
| [Documentation Updates and Maintenance](./documentation/documentation-updates.md) | 📝
|
|
41
|
-
| [External URL Fragment Validation](./documentation/external-url-fragment-validation.md) | 📝 182 | 🟢 Basic
|
|
42
|
-
| [GitHub Actions Version Consistency](./documentation/github-actions-version-consistency.md) | ✅ 204 | 🟢 Basic
|
|
43
|
-
| [Link Quality and External URL Management](./documentation/link-quality-guidelines.md) | ✅ 268 | 🟢 Basic
|
|
44
|
-
| [
|
|
45
|
-
| [
|
|
33
|
+
| Skill | Lines | Complexity | Status | Performance | Tags |
|
|
34
|
+
| ------------------------------------------------------------------------------------------- | ------ | --------------- | --------- | ----------- | ----------------------------------------- |
|
|
35
|
+
| [Changelog Entry Writing and Anti-Patterns](./documentation/changelog-entry-writing.md) | ✅ 278 | 🟢 Basic | ✅ Stable | ○○○○○ | changelog, release-notes, writing |
|
|
36
|
+
| [Changelog Management](./documentation/changelog-management.md) | ✅ 229 | 🟢 Basic | ✅ Stable | ○○○○○ | changelog, documentation, versioning |
|
|
37
|
+
| [Changelog Release Workflow](./documentation/changelog-release-workflow.md) | ✅ 250 | 🟢 Basic | ✅ Stable | ○○○○○ | changelog, release-workflow, versioning |
|
|
38
|
+
| [Documentation Code Samples](./documentation/documentation-code-samples.md) | ✅ 263 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, code-samples, examples |
|
|
39
|
+
| [Documentation Style Guide](./documentation/documentation-style-guide.md) | ✅ 204 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, style, writing |
|
|
40
|
+
| [Documentation Update Workflow](./documentation/documentation-update-workflow.md) | 📝 149 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, workflow, checklist |
|
|
41
|
+
| [Documentation Updates and Maintenance](./documentation/documentation-updates.md) | 📝 149 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, code-comments, xml-docs |
|
|
42
|
+
| [External URL Fragment Validation](./documentation/external-url-fragment-validation.md) | 📝 182 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, links, urls |
|
|
43
|
+
| [GitHub Actions Version Consistency](./documentation/github-actions-version-consistency.md) | ✅ 204 | 🟢 Basic | ✅ Stable | ○○○○○ | github-actions, ci-cd, version-management |
|
|
44
|
+
| [Link Quality and External URL Management](./documentation/link-quality-guidelines.md) | ✅ 268 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, links, urls |
|
|
45
|
+
| [Markdown Compatibility Guidelines](./documentation/markdown-compatibility.md) | ⚠️ 477 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, markdown, compatibility |
|
|
46
|
+
| [Mermaid Diagram Theming](./documentation/mermaid-theming.md) | ✅ 327 | 🟡 Intermediate | ✅ Stable | ○○○○○ | documentation, mermaid, theming |
|
|
47
|
+
| [MkDocs Navigation Management](./documentation/mkdocs-navigation.md) | ✅ 291 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, mkdocs, navigation |
|
|
48
|
+
| [Skill File Sizing Guidelines](./documentation/skill-file-sizing.md) | ✅ 261 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, skills, file-organization |
|
|
49
|
+
| [XML Documentation Standards](./documentation/documentation-xml-docs.md) | 📝 191 | 🟢 Basic | ✅ Stable | ○○○○○ | documentation, xml-docs, api-reference |
|
|
50
|
+
|
|
51
|
+
## GitHub Actions
|
|
52
|
+
|
|
53
|
+
| Skill | Lines | Complexity | Status | Performance | Tags |
|
|
54
|
+
| ---------------------------------------------------------------------------------- | ------ | --------------- | --------- | ----------- | ------------------------------- |
|
|
55
|
+
| [Git Renormalize Pattern Validation](./github-actions/git-renormalize-patterns.md) | ✅ 232 | 🟡 Intermediate | ✅ Stable | ●○○○○ | github-actions, git, ci-cd |
|
|
56
|
+
| [GitHub Actions Workflow Consistency](./github-actions/workflow-consistency.md) | ✅ 347 | 🟡 Intermediate | ✅ Stable | ●●○○○ | github-actions, ci-cd, workflow |
|
|
46
57
|
|
|
47
58
|
## Performance
|
|
48
59
|
|
|
@@ -75,11 +86,14 @@
|
|
|
75
86
|
|
|
76
87
|
## Scripting
|
|
77
88
|
|
|
78
|
-
| Skill
|
|
79
|
-
|
|
|
80
|
-
| [Cross-Platform Script Compatibility](./scripting/cross-platform-compatibility.md)
|
|
81
|
-
| [
|
|
82
|
-
| [
|
|
89
|
+
| Skill | Lines | Complexity | Status | Performance | Tags |
|
|
90
|
+
| ------------------------------------------------------------------------------------------ | ------ | --------------- | --------- | ----------- | ----------------------------------------- |
|
|
91
|
+
| [Cross-Platform Script Compatibility](./scripting/cross-platform-compatibility.md) | ✅ 225 | 🟡 Intermediate | ✅ Stable | ○○○○○ | cross-platform, case-sensitivity, testing |
|
|
92
|
+
| [JavaScript Code Quality Practices](./scripting/javascript-code-quality.md) | ⚠️ 418 | 🟡 Intermediate | ✅ Stable | ○○○○○ | javascript, code-quality, linting |
|
|
93
|
+
| [PowerShell Scripting Best Practices](./scripting/powershell-best-practices.md) | ⚠️ 387 | 🟡 Intermediate | ✅ Stable | ○○○○○ | powershell, scripting, regex |
|
|
94
|
+
| [Regex Pattern Documentation](./scripting/regex-documentation.md) | ⚠️ 462 | 🟡 Intermediate | ✅ Stable | ○○○○○ | regex, documentation, scripting |
|
|
95
|
+
| [Shell Scripting Best Practices](./scripting/shell-best-practices.md) | ⚠️ 387 | 🟡 Intermediate | ✅ Stable | ○○○○○ | shell, bash, scripting |
|
|
96
|
+
| [Validation Patterns and Duplicate Warning Prevention](./scripting/validation-patterns.md) | ⚠️ 419 | 🟡 Intermediate | ✅ Stable | ○○○○○ | validation, javascript, error-handling |
|
|
83
97
|
|
|
84
98
|
## Solid
|
|
85
99
|
|
|
@@ -117,6 +131,7 @@
|
|
|
117
131
|
| [Test Base Class with Automatic Resource Cleanup](./testing/test-base-class-cleanup.md) | ✅ 324 | 🟡 Intermediate | ✅ Stable | ●○○○○ | testing, cleanup, lifecycle |
|
|
118
132
|
| [Test Categories for Selective Execution](./testing/test-categories.md) | ✅ 288 | 🟢 Basic | ✅ Stable | ●●●○○ | testing, organization, categories |
|
|
119
133
|
| [Test Category Execution](./testing/test-categories-execution.md) | 📝 143 | 🟢 Basic | ✅ Stable | ○○○○○ | testing, organization, categories |
|
|
134
|
+
| [Test Code Quality and Accuracy](./testing/test-code-quality.md) | ✅ 244 | 🟡 Intermediate | ✅ Stable | ●●○○○ | testing, documentation, linting |
|
|
120
135
|
| [Test Coverage Scenario Categories](./testing/test-coverage-scenario-categories.md) | ✅ 224 | 🟡 Intermediate | ✅ Stable | ○○○○○ | testing, coverage, edge-cases |
|
|
121
136
|
| [Test Diagnostics and Investigation Patterns](./testing/test-diagnostics.md) | ✅ 248 | 🟡 Intermediate | ✅ Stable | ●○○○○ | testing, diagnostics, debugging |
|
|
122
137
|
| [Test Diagnostics Patterns](./testing/test-diagnostics-patterns.md) | 📝 190 | 🟡 Intermediate | ✅ Stable | ●○○○○ | testing, diagnostics, logging |
|
|
@@ -126,13 +141,14 @@
|
|
|
126
141
|
| [Test Failure Root Causes and Anti-Patterns](./testing/test-failure-investigation-root-causes.md) | 📝 187 | 🟡 Intermediate | ✅ Stable | ○○○○○ | testing, root-cause-analysis, anti-patterns |
|
|
127
142
|
| [Test Invalid Skill](./testing/test-invalid-skill.md) | 📝 27 | 🔴 Expert | ✅ Stable | ●●●○○ | |
|
|
128
143
|
| [Test Organization and Assertions](./testing/test-coverage-organization-assertions.md) | 📝 172 | 🟢 Basic | ✅ Stable | ○○○○○ | testing, assertions, naming |
|
|
144
|
+
| [Test Production Code Directly](./testing/test-production-code.md) | ✅ 349 | 🟡 Intermediate | ✅ Stable | ○○○○○ | testing, anti-patterns, code-quality |
|
|
129
145
|
| [Unity Test Considerations and Anti-Patterns](./testing/test-coverage-unity-anti-patterns.md) | ✅ 233 | 🟢 Basic | ✅ Stable | ○○○○○ | testing, unity, anti-patterns |
|
|
130
146
|
|
|
131
147
|
---
|
|
132
148
|
|
|
133
149
|
## Tag Cloud
|
|
134
150
|
|
|
135
|
-
`testing`×
|
|
151
|
+
`testing`×30 `documentation`×16 `performance`×15 `unity`×13 `ci-cd`×10 `patterns`×10 `solid`×10 `memory`×9 `pooling`×9 `allocation`×8 `nunit`×8 `zero-alloc`×7 `javascript`×6 `anti-patterns`×5 `collections`×5 `data-driven`×5 `debugging`×5 `linting`×5 `singleton`×5 `struct`×5 `builder`×4 `coverage`×4 `dictionary`×4 `fixtures`×4 `github-actions`×4 `markdown`×4 `versioning`×4 `api-design`×3 `caching`×3 `changelog`×3 `code-quality`×3 `defensive`×3 `diagnostics`×3 `equality`×3 `error-handling`×3 `extensions`×3 `fluent-api`×3 `inspector`×3 `investigation`×3 `keep-a-changelog`×3 `logging`×3 `messaging`×3 `mkdocs`×3 `organization`×3 `parameterized`×3 `powershell`×3 `quality`×3 `reference-counting`×3 `scripting`×3 `serialization`×3 `try-pattern`×3 `api-reference`×2 `arrays`×2 `benchmark`×2 `best-practices`×2 `case-sensitivity`×2 `categories`×2 `ci`×2 `cleanup`×2 `code-comments`×2 `code-samples`×2 `data-structures`×2 `edge-cases`×2 `eviction`×2 `examples`×2 `git`×2 `hashcode`×2 `hot-path`×2 `iequatable`×2 `inlining`×2 `jest`×2 `lfu`×2 `lifecycle`×2 `links`×2 `linux`×2 `lru`×2 `maintainability`×2 `maintenance`×2 `optimization`×2 `regex`×2 `release-notes`×2 `root-cause-analysis`×2 `urls`×2 `user-communication`×2 `validation`×2 `workflow`×2 `workflows`×2 `writing`×2 `xml-docs`×2 `yaml`×2 `accessibility`×1 `accuracy`×1 `architecture`×1 `arraypool`×1 `assertions`×1 `automation`×1 `bash`×1 `boxing`×1 `buffers`×1 `checklist`×1 `clarity`×1 `comments`×1 `compatibility`×1 `configuration`×1 `consistency`×1 `coroutines`×1 `cross-platform`×1 `diagrams`×1 `disposable`×1 `dry`×1 `duplicate-warnings`×1 `encoding`×1 `enum-validation`×1 `eslint`×1 `file-organization`×1 `fisher-yates`×1 `flaky-tests`×1 `fragments`×1 `garbage-collection`×1 `generic`×1 `gitattributes`×1 `here-strings`×1 `implementation`×1 `line-endings`×1 `llm-context`×1 `macos`×1 `mermaid`×1 `methodimpl`×1 `naming`×1 `navigation`×1 `negative-tests`×1 `optional-fields`×1 `parsing`×1 `portability`×1 `pre-commit`×1 `procedure`×1 `raii`×1 `release-workflow`×1 `scriptable-object`×1 `scripts`×1 `security`×1 `semantic-versioning`×1 `shared-state`×1 `shell`×1 `shuffle`×1 `site-structure`×1 `skills`×1 `stringbuilder`×1 `strings`×1 `style`×1 `sync-notes`×1 `test-cases`×1 `testability`×1 `theming`×1 `thread-safety`×1 `truthiness`×1 `type-coercion`×1 `type-specialization`×1 `version-management`×1 `windows`×1 `yield`×1 `zero-flaky`×1
|
|
136
152
|
|
|
137
153
|
---
|
|
138
154
|
|
|
@@ -151,6 +167,8 @@
|
|
|
151
167
|
- [External URL Fragment Validation](./documentation/external-url-fragment-validation.md) _(documentation)_
|
|
152
168
|
- [GitHub Actions Version Consistency](./documentation/github-actions-version-consistency.md) _(documentation)_
|
|
153
169
|
- [Link Quality and External URL Management](./documentation/link-quality-guidelines.md) _(documentation)_
|
|
170
|
+
- [Markdown Compatibility Guidelines](./documentation/markdown-compatibility.md) _(documentation)_
|
|
171
|
+
- [MkDocs Navigation Management](./documentation/mkdocs-navigation.md) _(documentation)_
|
|
154
172
|
- [Skill File Sizing Guidelines](./documentation/skill-file-sizing.md) _(documentation)_
|
|
155
173
|
- [StringBuilder Pooling for Zero-Allocation String Building](./performance/stringbuilder-pooling.md) _(performance)_
|
|
156
174
|
- [Test Categories for Selective Execution](./testing/test-categories.md) _(testing)_
|
|
@@ -185,9 +203,13 @@
|
|
|
185
203
|
- [Fluent Builder Templates and Factories](./solid/fluent-builder-pattern-templates.md) _(solid)_
|
|
186
204
|
- [Fluent Builder Usage Examples](./solid/fluent-builder-pattern-usage-examples.md) _(solid)_
|
|
187
205
|
- [Git and Parser Robustness in CI/CD](./testing/git-workflow-robustness.md) _(testing)_
|
|
206
|
+
- [Git Renormalize Pattern Validation](./github-actions/git-renormalize-patterns.md) _(github-actions)_
|
|
207
|
+
- [GitHub Actions Workflow Consistency](./github-actions/workflow-consistency.md) _(github-actions)_
|
|
188
208
|
- [IEquatable Implementation for Value Types](./solid/iequatable-implementation.md) _(solid)_
|
|
189
209
|
- [IEquatable Implementation Variants](./solid/iequatable-implementation-variants.md) _(solid)_
|
|
190
210
|
- [IEquatable Usage Examples](./solid/iequatable-implementation-usage.md) _(solid)_
|
|
211
|
+
- [JavaScript Code Quality Practices](./scripting/javascript-code-quality.md) _(scripting)_
|
|
212
|
+
- [Mermaid Diagram Theming](./documentation/mermaid-theming.md) _(documentation)_
|
|
191
213
|
- [Object Pooling Anti-Patterns](./performance/object-pooling-anti-patterns.md) _(performance)_
|
|
192
214
|
- [Object Pooling for Zero-Allocation Messaging](./performance/object-pooling.md) _(performance)_
|
|
193
215
|
- [Object Pooling Usage Examples](./performance/object-pooling-usage-examples.md) _(performance)_
|
|
@@ -195,6 +217,7 @@
|
|
|
195
217
|
- [PowerShell Scripting Best Practices](./scripting/powershell-best-practices.md) _(scripting)_
|
|
196
218
|
- [Readonly Struct Cached Hash Performance Notes](./performance/readonly-struct-cached-hash-performance-notes.md) _(performance)_
|
|
197
219
|
- [Readonly Struct with Cached Hash for Dictionary Keys](./performance/readonly-struct-cached-hash.md) _(performance)_
|
|
220
|
+
- [Regex Pattern Documentation](./scripting/regex-documentation.md) _(scripting)_
|
|
198
221
|
- [Runtime Singleton Pattern](./performance/singleton-runtime.md) _(performance)_
|
|
199
222
|
- [RuntimeSingleton and ScriptableObject Singleton Patterns](./performance/singleton-patterns.md) _(performance)_
|
|
200
223
|
- [Script Test Coverage Requirements](./testing/script-test-coverage.md) _(testing)_
|
|
@@ -206,6 +229,7 @@
|
|
|
206
229
|
- [Singleton Usage Examples](./performance/singleton-usage-examples.md) _(performance)_
|
|
207
230
|
- [Test Base Class Cleanup Usage](./testing/test-base-class-cleanup-usage.md) _(testing)_
|
|
208
231
|
- [Test Base Class with Automatic Resource Cleanup](./testing/test-base-class-cleanup.md) _(testing)_
|
|
232
|
+
- [Test Code Quality and Accuracy](./testing/test-code-quality.md) _(testing)_
|
|
209
233
|
- [Test Coverage Scenario Categories](./testing/test-coverage-scenario-categories.md) _(testing)_
|
|
210
234
|
- [Test Diagnostics and Investigation Patterns](./testing/test-diagnostics.md) _(testing)_
|
|
211
235
|
- [Test Diagnostics Patterns](./testing/test-diagnostics-patterns.md) _(testing)_
|
|
@@ -213,6 +237,8 @@
|
|
|
213
237
|
- [Test Failure Investigation and Zero-Flaky Policy](./testing/test-failure-investigation.md) _(testing)_
|
|
214
238
|
- [Test Failure Investigation Procedure](./testing/test-failure-investigation-procedure.md) _(testing)_
|
|
215
239
|
- [Test Failure Root Causes and Anti-Patterns](./testing/test-failure-investigation-root-causes.md) _(testing)_
|
|
240
|
+
- [Test Production Code Directly](./testing/test-production-code.md) _(testing)_
|
|
241
|
+
- [Validation Patterns and Duplicate Warning Prevention](./scripting/validation-patterns.md) _(scripting)_
|
|
216
242
|
|
|
217
243
|
### 🟠 Advanced
|
|
218
244
|
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "JavaScript Code Quality Practices"
|
|
3
|
+
id: "javascript-code-quality"
|
|
4
|
+
category: "scripting"
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
created: "2026-01-30"
|
|
7
|
+
updated: "2026-01-30"
|
|
8
|
+
|
|
9
|
+
source:
|
|
10
|
+
repository: "wallstop/DxMessaging"
|
|
11
|
+
files:
|
|
12
|
+
- path: "scripts/"
|
|
13
|
+
- path: "scripts/__tests__/"
|
|
14
|
+
url: "https://github.com/wallstop/DxMessaging"
|
|
15
|
+
|
|
16
|
+
tags:
|
|
17
|
+
- "javascript"
|
|
18
|
+
- "code-quality"
|
|
19
|
+
- "linting"
|
|
20
|
+
- "testing"
|
|
21
|
+
- "jest"
|
|
22
|
+
- "eslint"
|
|
23
|
+
- "documentation"
|
|
24
|
+
- "sync-notes"
|
|
25
|
+
|
|
26
|
+
complexity:
|
|
27
|
+
level: "intermediate"
|
|
28
|
+
reasoning: "Requires understanding of linting tools, test organization, and code documentation"
|
|
29
|
+
|
|
30
|
+
impact:
|
|
31
|
+
performance:
|
|
32
|
+
rating: "none"
|
|
33
|
+
details: "Code quality patterns only; no runtime performance impact"
|
|
34
|
+
maintainability:
|
|
35
|
+
rating: "high"
|
|
36
|
+
details: "Proper code organization and documentation prevents confusion and bugs"
|
|
37
|
+
testability:
|
|
38
|
+
rating: "high"
|
|
39
|
+
details: "Well-organized tests are easier to maintain and extend"
|
|
40
|
+
|
|
41
|
+
prerequisites:
|
|
42
|
+
- "JavaScript fundamentals"
|
|
43
|
+
- "Jest testing framework familiarity"
|
|
44
|
+
- "Understanding of linting concepts"
|
|
45
|
+
|
|
46
|
+
dependencies:
|
|
47
|
+
packages:
|
|
48
|
+
- "jest"
|
|
49
|
+
skills:
|
|
50
|
+
- "script-test-coverage"
|
|
51
|
+
- "cross-platform-compatibility"
|
|
52
|
+
|
|
53
|
+
applies_to:
|
|
54
|
+
languages:
|
|
55
|
+
- "JavaScript"
|
|
56
|
+
frameworks:
|
|
57
|
+
- "Jest"
|
|
58
|
+
- "Node.js"
|
|
59
|
+
versions:
|
|
60
|
+
node: ">=18.0"
|
|
61
|
+
jest: ">=29.0"
|
|
62
|
+
|
|
63
|
+
aliases:
|
|
64
|
+
- "JS code quality"
|
|
65
|
+
- "JavaScript best practices"
|
|
66
|
+
- "Test organization"
|
|
67
|
+
|
|
68
|
+
related:
|
|
69
|
+
- "script-test-coverage"
|
|
70
|
+
- "cross-platform-compatibility"
|
|
71
|
+
- "comprehensive-test-coverage"
|
|
72
|
+
- "validation-patterns"
|
|
73
|
+
|
|
74
|
+
status: "stable"
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
# JavaScript Code Quality Practices
|
|
78
|
+
|
|
79
|
+
> **One-line summary**: Ensure JavaScript code has accurate documentation, properly placed
|
|
80
|
+
> directives, correctly categorized tests, and bidirectional synchronization notes.
|
|
81
|
+
|
|
82
|
+
## Overview
|
|
83
|
+
|
|
84
|
+
JavaScript code quality extends beyond just "working code." This skill covers common pitfalls in
|
|
85
|
+
documentation accuracy, linter directive placement, test organization, and synchronization between
|
|
86
|
+
related code. Following these practices prevents confusion, reduces bugs, and improves codebase
|
|
87
|
+
maintainability.
|
|
88
|
+
|
|
89
|
+
## Solution
|
|
90
|
+
|
|
91
|
+
1. **Keep JSDoc accurate** - function descriptions, parameter types, and return values must match
|
|
92
|
+
implementation
|
|
93
|
+
1. **Keep module exports documented** - `@exports` tags must list actual exports with correct types
|
|
94
|
+
and values
|
|
95
|
+
1. **Place linter directives immediately before suppressed code** - `eslint-disable-next-line`
|
|
96
|
+
only affects the next line
|
|
97
|
+
1. **Only use linter directives if the linter is configured** - don't add ESLint comments to
|
|
98
|
+
projects that don't use ESLint
|
|
99
|
+
1. **Use accurate `describe` block names** - test categories must reflect actual test content
|
|
100
|
+
1. **Match user-facing messages to actual UI terminology** - column names, labels, and terms must
|
|
101
|
+
be consistent
|
|
102
|
+
1. **Add bidirectional SYNC notes** - when code A references code B, code B must reference code A
|
|
103
|
+
1. **Test user-facing message content** - verify messages contain correct terminology
|
|
104
|
+
|
|
105
|
+
## Linter Directive Placement
|
|
106
|
+
|
|
107
|
+
### Problem
|
|
108
|
+
|
|
109
|
+
Linter disable directives (ESLint, JSHint, etc.) must be placed immediately before the line they
|
|
110
|
+
suppress. Placing them earlier in the file has no effect and creates confusion.
|
|
111
|
+
|
|
112
|
+
### Anti-Pattern
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
// BAD: Directive is too far from the code it's meant to suppress
|
|
116
|
+
// eslint-disable-next-line no-unused-vars
|
|
117
|
+
const SOME_CONSTANT = "value";
|
|
118
|
+
|
|
119
|
+
// Many lines of other code here...
|
|
120
|
+
|
|
121
|
+
function unusedFunction() {
|
|
122
|
+
// This function is NOT suppressed - the directive was consumed by SOME_CONSTANT
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Correct Pattern
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
// GOOD: Directive immediately precedes the suppressed code
|
|
130
|
+
const SOME_CONSTANT = "value";
|
|
131
|
+
|
|
132
|
+
// Many lines of other code here...
|
|
133
|
+
|
|
134
|
+
// eslint-disable-next-line no-unused-vars
|
|
135
|
+
function unusedFunction() {
|
|
136
|
+
// This function IS suppressed
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### When to Avoid Directives Entirely
|
|
141
|
+
|
|
142
|
+
Before adding a linter directive, verify:
|
|
143
|
+
|
|
144
|
+
1. **Is the linter actually configured?** Adding ESLint directives to a project that doesn't use
|
|
145
|
+
ESLint is misleading and creates maintenance burden.
|
|
146
|
+
1. **Can the underlying issue be fixed?** Unused variables should usually be removed, not
|
|
147
|
+
suppressed.
|
|
148
|
+
1. **Is the suppression documented?** If you must suppress, add a comment explaining why.
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
// GOOD: If ESLint is not used in the project, don't add ESLint directives
|
|
152
|
+
// Just remove or use the code properly instead of suppressing warnings
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## JSDoc Accuracy
|
|
156
|
+
|
|
157
|
+
### Problem
|
|
158
|
+
|
|
159
|
+
JSDoc comments that don't match implementation create dangerous misunderstandings. Tests written
|
|
160
|
+
against inaccurate JSDoc verify incorrect behavior.
|
|
161
|
+
|
|
162
|
+
### Anti-Pattern: Misleading Function Description
|
|
163
|
+
|
|
164
|
+
```javascript
|
|
165
|
+
// BAD: JSDoc says "excludes arrays" but implementation accepts them
|
|
166
|
+
/**
|
|
167
|
+
* Validates that value is a non-null object (excludes arrays).
|
|
168
|
+
* @param {*} value - Value to check
|
|
169
|
+
* @returns {boolean} True if value is a non-null object
|
|
170
|
+
*/
|
|
171
|
+
function isValidObject(value) {
|
|
172
|
+
// Implementation actually accepts arrays!
|
|
173
|
+
return value !== null && typeof value === "object";
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Correct Pattern: Documentation Matches Implementation
|
|
178
|
+
|
|
179
|
+
```javascript
|
|
180
|
+
// GOOD: JSDoc accurately describes behavior
|
|
181
|
+
/**
|
|
182
|
+
* Validates that value is a non-null object (arrays are objects in JavaScript).
|
|
183
|
+
* @param {*} value - Value to check
|
|
184
|
+
* @returns {boolean} True if value is non-null and typeof is 'object'
|
|
185
|
+
*/
|
|
186
|
+
function isValidObject(value) {
|
|
187
|
+
return value !== null && typeof value === "object";
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// OR: Update implementation to match documented intent
|
|
191
|
+
/**
|
|
192
|
+
* Validates that value is a non-null, non-array object.
|
|
193
|
+
* @param {*} value - Value to check
|
|
194
|
+
* @returns {boolean} True if value is a non-null, non-array object
|
|
195
|
+
*/
|
|
196
|
+
function isValidObject(value) {
|
|
197
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Module Export Documentation
|
|
202
|
+
|
|
203
|
+
When using `@exports` tags to document module exports, keep them synchronized with actual exports:
|
|
204
|
+
|
|
205
|
+
```javascript
|
|
206
|
+
// BAD: @exports lists wrong values or missing exports
|
|
207
|
+
/**
|
|
208
|
+
* @exports {Array<string>} VALID_LEVELS - Valid values: 'low', 'high'
|
|
209
|
+
*/
|
|
210
|
+
module.exports = {
|
|
211
|
+
VALID_LEVELS, // Actual values: ['basic', 'intermediate', 'advanced']
|
|
212
|
+
helperFunction // Not documented!
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// GOOD: @exports matches actual export values
|
|
216
|
+
/**
|
|
217
|
+
* @exports {Array<string>} VALID_LEVELS - Valid values: 'basic', 'intermediate', 'advanced'
|
|
218
|
+
* @exports {Function} helperFunction - Validates input and returns errors
|
|
219
|
+
*/
|
|
220
|
+
module.exports = {
|
|
221
|
+
VALID_LEVELS,
|
|
222
|
+
helperFunction
|
|
223
|
+
};
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Verification Checklist
|
|
227
|
+
|
|
228
|
+
1. **Read the implementation** - Don't just copy JSDoc from similar functions
|
|
229
|
+
1. **Test edge cases mentioned in JSDoc** - If it says "excludes arrays", test with arrays
|
|
230
|
+
1. **Update JSDoc when changing implementation** - Don't leave stale documentation
|
|
231
|
+
1. **Avoid vague descriptions** - "Validates value" doesn't tell readers what validation occurs
|
|
232
|
+
|
|
233
|
+
## Test Documentation Accuracy
|
|
234
|
+
|
|
235
|
+
### Problem
|
|
236
|
+
|
|
237
|
+
Test file headers, `describe` block names, and comments must accurately describe what the tests
|
|
238
|
+
actually verify. Inaccurate documentation causes confusion and hides the test's true purpose.
|
|
239
|
+
|
|
240
|
+
### Anti-Pattern: Incorrect Value Categorization
|
|
241
|
+
|
|
242
|
+
```javascript
|
|
243
|
+
// BAD: Header says "falsy/undefined" but tests actually check "undefined/null"
|
|
244
|
+
/**
|
|
245
|
+
* @fileoverview Tests for frontmatter validation - falsy and undefined values.
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
describe("Falsy/Undefined Value Handling", () => {
|
|
249
|
+
// But the tests below actually check undefined/null (missing values),
|
|
250
|
+
// not other falsy values like empty string, 0, or false
|
|
251
|
+
test("should warn when value is undefined", () => {
|
|
252
|
+
validate({ field: undefined });
|
|
253
|
+
});
|
|
254
|
+
test("should warn when value is null", () => {
|
|
255
|
+
validate({ field: null });
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Correct Pattern: Precise Documentation
|
|
261
|
+
|
|
262
|
+
```javascript
|
|
263
|
+
// GOOD: Documentation accurately describes what is tested
|
|
264
|
+
/**
|
|
265
|
+
* @fileoverview Tests for frontmatter validation - undefined and null values.
|
|
266
|
+
*/
|
|
267
|
+
|
|
268
|
+
describe("Undefined/Null Value Handling", () => {
|
|
269
|
+
test("should warn when value is undefined", () => {
|
|
270
|
+
validate({ field: undefined });
|
|
271
|
+
});
|
|
272
|
+
test("should warn when value is null", () => {
|
|
273
|
+
validate({ field: null });
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
// Separate describe block for falsy wrong-type values
|
|
278
|
+
describe("Wrong Type Value Handling", () => {
|
|
279
|
+
test("should warn when value is empty string (wrong type)", () => {
|
|
280
|
+
validate({ field: "" });
|
|
281
|
+
});
|
|
282
|
+
test("should warn when value is zero (wrong type)", () => {
|
|
283
|
+
validate({ field: 0 });
|
|
284
|
+
});
|
|
285
|
+
test("should warn when value is false (wrong type)", () => {
|
|
286
|
+
validate({ field: false });
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### JavaScript Truthiness Reference
|
|
292
|
+
|
|
293
|
+
When documenting tests, use accurate terminology:
|
|
294
|
+
|
|
295
|
+
| Value | Truthy/Falsy | Correct Term for Missing Check |
|
|
296
|
+
| ----------- | ------------ | ------------------------------ |
|
|
297
|
+
| `undefined` | Falsy | "missing" or "undefined" |
|
|
298
|
+
| `null` | Falsy | "missing" or "null" |
|
|
299
|
+
| `""` | Falsy | "wrong type" (not "missing") |
|
|
300
|
+
| `0` | Falsy | "wrong type" (not "missing") |
|
|
301
|
+
| `false` | Falsy | "wrong type" (not "missing") |
|
|
302
|
+
| `[]` | **Truthy** | "empty array" (not falsy!) |
|
|
303
|
+
| `{}` | **Truthy** | "empty object" (not falsy!) |
|
|
304
|
+
|
|
305
|
+
## User-Facing Message Consistency
|
|
306
|
+
|
|
307
|
+
### Problem
|
|
308
|
+
|
|
309
|
+
Warning messages, error messages, and other user-facing text must match the actual UI, column
|
|
310
|
+
names, or output they reference. Inconsistent naming causes confusion.
|
|
311
|
+
|
|
312
|
+
### Anti-Pattern
|
|
313
|
+
|
|
314
|
+
```javascript
|
|
315
|
+
// BAD: Message says "Difficulty column" but the actual table header is "Complexity"
|
|
316
|
+
console.warn(`Warning: ${file} has missing Difficulty column value`);
|
|
317
|
+
|
|
318
|
+
// The actual table in the output/UI:
|
|
319
|
+
// | Title | Complexity | Performance |
|
|
320
|
+
// |-------|------------|-------------|
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Correct Pattern
|
|
324
|
+
|
|
325
|
+
```javascript
|
|
326
|
+
// GOOD: Message matches actual column name
|
|
327
|
+
console.warn(`Warning: ${file} has missing Complexity column value`);
|
|
328
|
+
|
|
329
|
+
// Matches the actual table:
|
|
330
|
+
// | Title | Complexity | Performance |
|
|
331
|
+
// |-------|------------|-------------|
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Test Coverage for Messages
|
|
335
|
+
|
|
336
|
+
When code produces user-facing messages, tests should verify the message content:
|
|
337
|
+
|
|
338
|
+
```javascript
|
|
339
|
+
// GOOD: Test verifies message matches actual column names
|
|
340
|
+
describe("Warning Messages", () => {
|
|
341
|
+
test("should use correct column name in warning", () => {
|
|
342
|
+
const result = validate(invalidData);
|
|
343
|
+
|
|
344
|
+
// Verify the warning uses the actual column name from the UI
|
|
345
|
+
expect(result.warnings[0]).toContain("Complexity");
|
|
346
|
+
expect(result.warnings[0]).not.toContain("Difficulty"); // Old incorrect name
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Bidirectional SYNC Notes
|
|
352
|
+
|
|
353
|
+
### Problem
|
|
354
|
+
|
|
355
|
+
SYNC notes that only exist in one location are easily missed. When code A references code B, code B
|
|
356
|
+
should also reference code A.
|
|
357
|
+
|
|
358
|
+
### Anti-Pattern: One-Way SYNC
|
|
359
|
+
|
|
360
|
+
```javascript
|
|
361
|
+
// File: validate-skills.js
|
|
362
|
+
// SYNC: Keep column names in sync with format-table.js formatHeader()
|
|
363
|
+
const COLUMNS = ["Complexity", "Performance"];
|
|
364
|
+
|
|
365
|
+
// File: format-table.js
|
|
366
|
+
// No SYNC note here - easy to forget to update validate-skills.js
|
|
367
|
+
function formatHeader() {
|
|
368
|
+
return ["Complexity", "Performance"];
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Correct Pattern: Bidirectional SYNC
|
|
373
|
+
|
|
374
|
+
```javascript
|
|
375
|
+
// File: validate-skills.js
|
|
376
|
+
// SYNC: Keep column names in sync with format-table.js formatHeader()
|
|
377
|
+
const COLUMNS = ["Complexity", "Performance"];
|
|
378
|
+
|
|
379
|
+
// File: format-table.js
|
|
380
|
+
// SYNC: Keep column names in sync with validate-skills.js COLUMNS
|
|
381
|
+
function formatHeader() {
|
|
382
|
+
return ["Complexity", "Performance"];
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### SYNC Note Checklist
|
|
387
|
+
|
|
388
|
+
When adding a SYNC note:
|
|
389
|
+
|
|
390
|
+
1. **Add notes in BOTH locations** - never just one direction
|
|
391
|
+
1. **Reference by function/variable name** - not line numbers
|
|
392
|
+
1. **Verify the referenced code exists** - don't reference non-existent functions
|
|
393
|
+
1. **Update tests** - if synced values are used in tests, add SYNC notes there too
|
|
394
|
+
1. **Cross-environment code** - browser/Node.js boundaries require SYNC notes since modules cannot
|
|
395
|
+
be shared; the test file replicates logic and the SYNC notes ensure they stay aligned
|
|
396
|
+
|
|
397
|
+
## Common Mistakes Checklist
|
|
398
|
+
|
|
399
|
+
Before committing JavaScript code, verify:
|
|
400
|
+
|
|
401
|
+
- [ ] JSDoc function descriptions match implementation behavior
|
|
402
|
+
- [ ] JSDoc `@param` and `@returns` types are accurate
|
|
403
|
+
- [ ] Module `@exports` documentation lists actual exports with correct values
|
|
404
|
+
- [ ] Linter directives are immediately before the suppressed line
|
|
405
|
+
- [ ] Linter directives are only used if the linter is actually configured
|
|
406
|
+
- [ ] Test `describe` blocks accurately categorize the tests they contain
|
|
407
|
+
- [ ] File headers accurately describe file contents
|
|
408
|
+
- [ ] Comments about JavaScript behavior are factually correct
|
|
409
|
+
- [ ] User-facing messages match actual UI/output terminology
|
|
410
|
+
- [ ] SYNC notes exist in both directions between related code
|
|
411
|
+
- [ ] Tests verify user-facing message content
|
|
412
|
+
|
|
413
|
+
## See Also
|
|
414
|
+
|
|
415
|
+
- [Script Test Coverage](../testing/script-test-coverage.md) - Test file structure and naming
|
|
416
|
+
- [Cross-Platform Compatibility](cross-platform-compatibility.md) - Platform-specific considerations
|
|
417
|
+
- [Comprehensive Test Coverage](../testing/comprehensive-test-coverage.md) - Test coverage requirements
|