wry 0.5.0__tar.gz → 0.5.1.dev4__tar.gz

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.
Files changed (138) hide show
  1. wry-0.5.1.dev4/.cursorrules +193 -0
  2. {wry-0.5.0 → wry-0.5.1.dev4}/AI_KNOWLEDGE_BASE.md +28 -9
  3. {wry-0.5.0 → wry-0.5.1.dev4}/CHANGELOG.md +34 -0
  4. wry-0.5.1.dev4/CONTRIBUTING.md +652 -0
  5. {wry-0.5.0/wry.egg-info → wry-0.5.1.dev4}/PKG-INFO +9 -2
  6. {wry-0.5.0 → wry-0.5.1.dev4}/README.md +8 -1
  7. {wry-0.5.0 → wry-0.5.1.dev4}/RELEASE_PROCESS.md +46 -13
  8. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_comma_separated_lists.py +79 -0
  9. {wry-0.5.0 → wry-0.5.1.dev4}/wry/_version.py +3 -3
  10. {wry-0.5.0 → wry-0.5.1.dev4/wry.egg-info}/PKG-INFO +9 -2
  11. {wry-0.5.0 → wry-0.5.1.dev4}/wry.egg-info/SOURCES.txt +2 -0
  12. {wry-0.5.0 → wry-0.5.1.dev4}/.github/workflows/ci-cd.yml +0 -0
  13. {wry-0.5.0 → wry-0.5.1.dev4}/.gitignore +0 -0
  14. {wry-0.5.0 → wry-0.5.1.dev4}/.markdownlint.json +0 -0
  15. {wry-0.5.0 → wry-0.5.1.dev4}/.pre-commit-config.yaml +0 -0
  16. {wry-0.5.0 → wry-0.5.1.dev4}/LICENSE +0 -0
  17. {wry-0.5.0 → wry-0.5.1.dev4}/TODO.md +0 -0
  18. {wry-0.5.0 → wry-0.5.1.dev4}/check.sh +0 -0
  19. {wry-0.5.0 → wry-0.5.1.dev4}/examples/autowrymodel_comprehensive.py +0 -0
  20. {wry-0.5.0 → wry-0.5.1.dev4}/examples/config.json +0 -0
  21. {wry-0.5.0 → wry-0.5.1.dev4}/examples/multimodel_comprehensive.py +0 -0
  22. {wry-0.5.0 → wry-0.5.1.dev4}/examples/sample_config.json +0 -0
  23. {wry-0.5.0 → wry-0.5.1.dev4}/examples/wrymodel_comprehensive.py +0 -0
  24. {wry-0.5.0 → wry-0.5.1.dev4}/pyproject.toml +0 -0
  25. {wry-0.5.0 → wry-0.5.1.dev4}/scripts/README.md +0 -0
  26. {wry-0.5.0 → wry-0.5.1.dev4}/scripts/extract_release_notes.py +0 -0
  27. {wry-0.5.0 → wry-0.5.1.dev4}/scripts/test_all_versions.sh +0 -0
  28. {wry-0.5.0 → wry-0.5.1.dev4}/scripts/test_ci_locally.sh +0 -0
  29. {wry-0.5.0 → wry-0.5.1.dev4}/scripts/test_with_act.sh +0 -0
  30. {wry-0.5.0 → wry-0.5.1.dev4}/scripts/update-dependencies.sh +0 -0
  31. {wry-0.5.0 → wry-0.5.1.dev4}/setup.cfg +0 -0
  32. {wry-0.5.0 → wry-0.5.1.dev4}/tests/README.md +0 -0
  33. {wry-0.5.0 → wry-0.5.1.dev4}/tests/__init__.py +0 -0
  34. {wry-0.5.0 → wry-0.5.1.dev4}/tests/features/__init__.py +0 -0
  35. {wry-0.5.0 → wry-0.5.1.dev4}/tests/features/test_auto_model.py +0 -0
  36. {wry-0.5.0 → wry-0.5.1.dev4}/tests/features/test_inheritance.py +0 -0
  37. {wry-0.5.0 → wry-0.5.1.dev4}/tests/features/test_multi_model.py +0 -0
  38. {wry-0.5.0 → wry-0.5.1.dev4}/tests/features/test_source_precedence.py +0 -0
  39. {wry-0.5.0 → wry-0.5.1.dev4}/tests/integration/__init__.py +0 -0
  40. {wry-0.5.0 → wry-0.5.1.dev4}/tests/integration/test_click_edge_cases.py +0 -0
  41. {wry-0.5.0 → wry-0.5.1.dev4}/tests/integration/test_click_integration.py +0 -0
  42. {wry-0.5.0 → wry-0.5.1.dev4}/tests/integration/test_click_integration_extended.py +0 -0
  43. {wry-0.5.0 → wry-0.5.1.dev4}/tests/integration/test_context_handling.py +0 -0
  44. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/__init__.py +0 -0
  45. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/__init__.py +0 -0
  46. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_auto_model_annotation_inference.py +0 -0
  47. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_auto_model_edge_cases.py +0 -0
  48. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_auto_model_field_processing.py +0 -0
  49. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_auto_model_list_fields.py +0 -0
  50. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_field_annotation_handling.py +0 -0
  51. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_field_annotations.py +0 -0
  52. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/auto_model/test_type_inference.py +0 -0
  53. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/README_TESTING_STRATEGY.md +0 -0
  54. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/__init__.py +0 -0
  55. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_argument_types.py +0 -0
  56. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_bool_flag_handling.py +0 -0
  57. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_config_building.py +0 -0
  58. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_constraint_formatting.py +0 -0
  59. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_decorator_edge_cases.py +0 -0
  60. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_interval_constraints.py +0 -0
  61. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_lambda_parsing.py +0 -0
  62. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_length_constraints.py +0 -0
  63. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_parameter_generation.py +0 -0
  64. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_click_predicate_handling.py +0 -0
  65. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_closure_extraction_errors.py +0 -0
  66. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_closure_handling.py +0 -0
  67. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_constraint_behavior.py +0 -0
  68. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_constraint_edge_cases.py +0 -0
  69. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_env_vars_option.py +0 -0
  70. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_explicit_argument_help_injection.py +0 -0
  71. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_field_alias_with_click_options.py +0 -0
  72. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_format_constraint_text.py +0 -0
  73. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_json_config_loading.py +0 -0
  74. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_lambda_behavior.py +0 -0
  75. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_lambda_error_handling.py +0 -0
  76. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_predicate_source_errors.py +0 -0
  77. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_strict_mode_errors.py +0 -0
  78. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/click/test_type_handling.py +0 -0
  79. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/__init__.py +0 -0
  80. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_accessors.py +0 -0
  81. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_advanced_features.py +0 -0
  82. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_core.py +0 -0
  83. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_edge_cases.py +0 -0
  84. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_env_utils.py +0 -0
  85. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_field_constraint_extraction.py +0 -0
  86. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_field_utils.py +0 -0
  87. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_field_utils_edge_cases.py +0 -0
  88. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_sources.py +0 -0
  89. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/core/test_type_checking_blocks.py +0 -0
  90. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/__init__.py +0 -0
  91. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_accessor_caching.py +0 -0
  92. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_extract_edge_cases.py +0 -0
  93. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_extract_subset_edge_cases.py +0 -0
  94. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_click_context_handling.py +0 -0
  95. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_data_extraction.py +0 -0
  96. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_default_handling.py +0 -0
  97. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_edge_cases.py +0 -0
  98. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_environment_integration.py +0 -0
  99. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_extract_subset_edge_cases.py +0 -0
  100. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_extraction_methods.py +0 -0
  101. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_field_errors.py +0 -0
  102. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_model_object_extraction.py +0 -0
  103. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_non_dict_object_extraction.py +0 -0
  104. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/model/test_object_attribute_extraction.py +0 -0
  105. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/multi_model/__init__.py +0 -0
  106. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/multi_model/test_multi_model.py +0 -0
  107. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/multi_model/test_type_checking.py +0 -0
  108. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_argument_help_injection.py +0 -0
  109. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_auto_model_field_processing.py +0 -0
  110. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_comprehensive_imports.py +0 -0
  111. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_exclude_enum.py +0 -0
  112. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_generate_click_classmethod.py +0 -0
  113. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_help_system.py +0 -0
  114. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_init.py +0 -0
  115. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_init_edge_cases.py +0 -0
  116. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_init_version_edge_cases.py +0 -0
  117. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_model_extraction_methods.py +0 -0
  118. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_multiple_option_bug.py +0 -0
  119. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_type_checking_imports.py +0 -0
  120. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_variadic_argument_bug.py +0 -0
  121. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_version_fallback.py +0 -0
  122. {wry-0.5.0 → wry-0.5.1.dev4}/tests/unit/test_version_parsing.py +0 -0
  123. {wry-0.5.0 → wry-0.5.1.dev4}/wry/__init__.py +0 -0
  124. {wry-0.5.0 → wry-0.5.1.dev4}/wry/auto_model.py +0 -0
  125. {wry-0.5.0 → wry-0.5.1.dev4}/wry/click_integration.py +0 -0
  126. {wry-0.5.0 → wry-0.5.1.dev4}/wry/comma_separated.py +0 -0
  127. {wry-0.5.0 → wry-0.5.1.dev4}/wry/core/__init__.py +0 -0
  128. {wry-0.5.0 → wry-0.5.1.dev4}/wry/core/accessors.py +0 -0
  129. {wry-0.5.0 → wry-0.5.1.dev4}/wry/core/env_utils.py +0 -0
  130. {wry-0.5.0 → wry-0.5.1.dev4}/wry/core/field_utils.py +0 -0
  131. {wry-0.5.0 → wry-0.5.1.dev4}/wry/core/model.py +0 -0
  132. {wry-0.5.0 → wry-0.5.1.dev4}/wry/core/sources.py +0 -0
  133. {wry-0.5.0 → wry-0.5.1.dev4}/wry/help_system.py +0 -0
  134. {wry-0.5.0 → wry-0.5.1.dev4}/wry/multi_model.py +0 -0
  135. {wry-0.5.0 → wry-0.5.1.dev4}/wry/py.typed +0 -0
  136. {wry-0.5.0 → wry-0.5.1.dev4}/wry.egg-info/dependency_links.txt +0 -0
  137. {wry-0.5.0 → wry-0.5.1.dev4}/wry.egg-info/requires.txt +0 -0
  138. {wry-0.5.0 → wry-0.5.1.dev4}/wry.egg-info/top_level.txt +0 -0
@@ -0,0 +1,193 @@
1
+ # Cursor AI Rules for wry Repository
2
+
3
+ > **Note**: These rules are the AI assistant's quick reference. For comprehensive guidelines,
4
+ > examples, and detailed explanations, see `CONTRIBUTING.md`.
5
+
6
+ ## Pre-Commit Requirements
7
+
8
+ Before making any commit, AI assistants MUST:
9
+
10
+ 1. **Update Documentation** (ALWAYS update CHANGELOG.md):
11
+ - **CHANGELOG.md**: ALWAYS add entry under [Unreleased] for ANY change
12
+ - README.md if user-facing changes
13
+ - AI_KNOWLEDGE_BASE.md if architecture/API changes
14
+ - Module docstrings if relevant
15
+
16
+ 2. **Ensure Code Quality**:
17
+ - Add type annotations to all new functions
18
+ - Add docstrings to all public functions/classes
19
+ - Follow DRY principles
20
+ - Remove dead code and unused imports
21
+
22
+ 3. **Update/Add Tests**:
23
+ - Add tests for new functionality
24
+ - Update tests for changed behavior
25
+ - Ensure tests pass (run pytest)
26
+
27
+ 4. **Run Checks**:
28
+ - Ensure pre-commit hooks will pass
29
+ - Fix linter errors (ruff, mypy)
30
+ - Format code properly (ruff format)
31
+
32
+ 5. **Follow Conventional Commits**:
33
+ - Use format: `type: description`
34
+ - Types: feat, fix, docs, refactor, test, chore, build
35
+
36
+ ## Reference
37
+
38
+ **Full development guidelines**: See `CONTRIBUTING.md` for:
39
+
40
+ - Complete code organization principles
41
+ - Detailed examples of adding features
42
+ - wry-specific development patterns
43
+ - Comprehensive pre-commit checklist
44
+ - Pull request process
45
+
46
+ **Quick links**:
47
+
48
+ - Architecture & concepts: `CONTRIBUTING.md` "Core Concepts" section
49
+ - Code patterns: `CONTRIBUTING.md` "Configuration Models" section
50
+ - Testing guide: `CONTRIBUTING.md` "Testing" section
51
+ - Pre-commit checklist: `CONTRIBUTING.md` "Pre-Commit Checklist" section
52
+ - Release workflow: `RELEASE_PROCESS.md` for creating releases
53
+
54
+ ## Enforcement
55
+
56
+ The pre-commit hook automatically runs checks on commit.
57
+ All checks must pass before commit succeeds.
58
+
59
+ ## General Development Guidelines
60
+
61
+ ### Date and Time
62
+
63
+ - Use the `date` terminal command to learn the current date
64
+ - Never assume or hardcode dates in dynamic contexts
65
+
66
+ ### Python Best Practices
67
+
68
+ #### Type Annotations
69
+
70
+ - **ALWAYS** add type annotations to all functions, methods, and class attributes
71
+ - Include return types for all functions (use `-> None` for void functions)
72
+ - Use proper generic types from `typing` module
73
+ - Prefer modern Python 3.10+ syntax (e.g., `list[str]` over `List[str]`)
74
+
75
+ #### Documentation
76
+
77
+ - Add comprehensive docstrings to:
78
+ - All modules (at the top of the file)
79
+ - All classes (describing purpose, attributes, and usage)
80
+ - All public functions and methods (describing parameters, return values, and exceptions)
81
+ - Use consistent docstring format (Google style preferred)
82
+
83
+ #### Code Quality
84
+
85
+ - **DRY Principles**: Don't Repeat Yourself - extract common logic into reusable functions/classes
86
+ - **Clean Code**: Write self-documenting code with clear variable and function names
87
+ - **No Dead Code**: Remove unused variables, functions, and commented-out code unless it serves as important documentation
88
+ - **Maintainability**: Prioritize code that is easy to understand, modify, and extend
89
+
90
+ ### Linter and Type Checker Compliance
91
+
92
+ #### Fixing Issues Properly
93
+
94
+ - **ALWAYS** fix linter errors and type checker warnings properly
95
+ - **AVOID** using ignore directives like `# type: ignore`, `# noqa` as quick fixes
96
+ - **AVOID** using `cast()` unless absolutely critical for complex type scenarios
97
+ - Investigate the root cause and fix issues with proper type annotations and code structure
98
+ - If an ignore directive is truly necessary, add a detailed comment explaining why
99
+
100
+ #### Working Directory
101
+
102
+ - **ALWAYS** ensure you're in the correct directory before:
103
+ - Running commands
104
+ - Creating files
105
+ - Executing scripts
106
+ - Making git operations
107
+
108
+ ### Testing
109
+
110
+ #### Test Coverage
111
+
112
+ - **NEVER** ignore, skip, or disable test cases just to make test suites pass
113
+ - If a test fails, fix the underlying issue or update the test if requirements changed
114
+ - Add tests for all new functionality
115
+ - Update tests when changing existing behavior
116
+ - Ensure all tests **PASS** before considering work complete
117
+
118
+ #### Test Organization
119
+
120
+ - Place test code in the most logical location (follow project structure under `tests/`)
121
+ - Name test files and functions clearly to indicate what they're testing
122
+ - Use descriptive test names: `test_<function>_<scenario>_<expected_result>`
123
+
124
+ ### Documentation Management
125
+
126
+ #### Markdown Files
127
+
128
+ - **Do not create excessive markdown files** unless explicitly instructed
129
+ - If markdown files exist, add content to the appropriate existing file
130
+ - If unsure which file is appropriate, **ask the user** where content should go
131
+ - Before creating a new markdown file, consider: Did the user actually request documentation?
132
+
133
+ ### Git Best Practices
134
+
135
+ #### Committing Changes
136
+
137
+ - Attempt to commit changes after completing major features or fixes
138
+ - Use **Conventional Commits** format: `<type>: <description>`
139
+ - Examples: `feat: add comma-separated list support`, `fix: handle ClassVar in AutoWryModel`
140
+
141
+ #### Pre-Commit Hooks - CRITICAL RULE
142
+
143
+ - **NEVER** use `git commit --no-verify` or `--no-gpg-sign` to bypass pre-commit hooks
144
+ - **ONLY EXCEPTION**: When the user explicitly says it's okay
145
+ - If pre-commit hooks fail:
146
+ 1. Fix the underlying issue (don't bypass)
147
+ 2. Ask the user for guidance if you can't fix it
148
+ 3. Wait for user approval before using --no-verify
149
+ - Pre-commit hooks catch bugs, enforce quality, and save code review time
150
+ - Bypassing them should be extremely rare (emergency situations only with approval)
151
+
152
+ #### File Operations
153
+
154
+ - **Strongly prefer** using Git commands for file operations:
155
+ - Use `git rm` instead of `rm` when deleting tracked files
156
+ - Use `git mv` instead of `mv` when moving/renaming tracked files
157
+ - This ensures Git properly tracks file history instead of treating operations as delete+add
158
+ - Always pass `--yes` or appropriate non-interactive flags to avoid user prompts
159
+ - **NEVER** use `git push --force` to main/master without explicit user approval
160
+ - **NEVER** use `git reset --hard` without explicit user approval
161
+
162
+ ## wry-Specific Guidelines
163
+
164
+ ### Model Development
165
+
166
+ - All `WryModel` and `AutoWryModel` classes should use `ClassVar` for class-level configuration
167
+ - Source tracking is a core feature - ensure it works for new features
168
+ - List fields automatically get `multiple=True` unless `comma_separated_lists` is enabled
169
+ - Document behavior in both README.md and AI_KNOWLEDGE_BASE.md
170
+
171
+ ### Click Integration
172
+
173
+ - All Click parameter generation should respect Pydantic field metadata
174
+ - Help text should be clear and include constraints
175
+ - Arguments should inject help into docstrings (Click limitation workaround)
176
+
177
+ ### Testing Requirements
178
+
179
+ - Test all four configuration sources: CLI, ENV, JSON, DEFAULT
180
+ - Test source tracking for new features
181
+ - Test both standard and edge cases
182
+ - Use `CliRunner` for Click command tests
183
+
184
+ ## Summary
185
+
186
+ These rules ensure:
187
+
188
+ - High code quality and maintainability
189
+ - Proper type safety and documentation
190
+ - Comprehensive test coverage
191
+ - Clean git history
192
+ - Consistent development practices
193
+ - wry's core features (source tracking, Click integration) work correctly
@@ -1,9 +1,16 @@
1
1
  # wry - Comprehensive AI/LLM Knowledge Base
2
2
 
3
- **Last Updated**: 2025-10-04
4
- **Version**: 0.3.2+
3
+ **Last Updated**: 2025-10-14
4
+ **Version**: 0.5.0+
5
5
  **Purpose**: Complete reference for AI assistants and LLMs to understand wry without reading the entire codebase
6
6
 
7
+ **Related Documentation**:
8
+ - 📖 **`CONTRIBUTING.md`** - Comprehensive contributor guide (referenced by `.cursorrules`)
9
+ - 🤖 **`.cursorrules`** - AI assistant quick reference (references this file and CONTRIBUTING.md)
10
+ - 📘 **`README.md`** - User-facing documentation
11
+ - 📝 **`CHANGELOG.md`** - Version history and changes
12
+ - 🚀 **`RELEASE_PROCESS.md`** - Release workflow (how to convert [Unreleased] → [X.Y.Z])
13
+
7
14
  ---
8
15
 
9
16
  ## Executive Summary
@@ -19,7 +26,9 @@
19
26
 
20
27
  **Key Innovation**: Single source of truth for configuration with comprehensive source tracking.
21
28
 
22
- **Stats**: 436 tests (all passing), 92%+ coverage, supports Python 3.10-3.12, Pydantic v2.11+ compatible
29
+ **Stats**: 494 tests (all passing), 92%+ coverage, supports Python 3.10-3.12, Pydantic v2.11+ compatible
30
+
31
+ **For Contributors**: See `CONTRIBUTING.md` for development guidelines and `.cursorrules` for AI assistant rules
23
32
 
24
33
  ---
25
34
 
@@ -2814,19 +2823,29 @@ Single source of truth: Pydantic model defines everything.
2814
2823
  - ✅ Multi-source configuration (CLI/ENV/JSON/DEFAULT)
2815
2824
  - ✅ Source tracking (know where every value came from)
2816
2825
  - ✅ Type safety (Pydantic + Click)
2817
- - ✅ Comprehensive testing (407 tests, 92% coverage)
2818
- - ✅ Excellent documentation (README + AI KB + examples)
2826
+ - ✅ Comprehensive testing (494 tests, 92% coverage)
2827
+ - ✅ Excellent documentation (README + AI KB + examples + CONTRIBUTING)
2819
2828
 
2820
2829
  **For AI assistants**:
2821
2830
 
2822
- - Start with `examples/source_tracking_comprehensive.py` to understand the system
2823
- - Reference this knowledge base for details
2824
- - Check version for bug fixes (v0.2.2 critical)
2831
+ - **Follow** `.cursorrules` for quick development rules
2832
+ - **Reference** this knowledge base (AI_KNOWLEDGE_BASE.md) for technical details
2833
+ - **Check** `CONTRIBUTING.md` for complete development guidelines
2834
+ - Start with comprehensive examples to understand the system
2835
+ - Check version for bug fixes (v0.2.2 critical, v0.5.0 adds list support)
2825
2836
  - Point users to examples for patterns
2826
2837
  - Use `show_help_index()` to help users find documentation
2827
2838
 
2839
+ **For Contributors**:
2840
+
2841
+ - **Read** `CONTRIBUTING.md` for complete guidelines
2842
+ - **Follow** `.cursorrules` if using Cursor AI
2843
+ - **Reference** this knowledge base for architecture details
2844
+ - **Check** `CHANGELOG.md` for version history
2845
+ - **See** `RELEASE_PROCESS.md` for creating releases
2846
+
2828
2847
  ---
2829
2848
 
2830
- **End of Knowledge Base** - Version 0.2.3+ - Last Updated: 2025-10-01
2849
+ **End of Knowledge Base** - Version 0.5.0+ - Last Updated: 2025-10-14
2831
2850
 
2832
2851
  **Access this**: `python -m wry.help_system ai` or `from wry import print_help; print_help('ai')`
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - **Development guidelines** 📚
13
+ - Created `.cursorrules` as AI assistant's quick reference guide
14
+ - Created `CONTRIBUTING.md` as comprehensive contributor guide
15
+ - `.cursorrules` references `CONTRIBUTING.md` for detailed explanations
16
+ - Both tailored specifically for wry development patterns
17
+
18
+ ### Changed
19
+
20
+ - **Documentation cross-references** 🔗
21
+ - README.md: Added Contributing section with links to CONTRIBUTING.md, .cursorrules, AI_KNOWLEDGE_BASE.md
22
+ - AI_KNOWLEDGE_BASE.md: Updated header with related documentation links
23
+ - AI_KNOWLEDGE_BASE.md: Updated version to 0.5.0+ and test count to 494
24
+ - AI_KNOWLEDGE_BASE.md: Added separate guidance sections for AI assistants and contributors
25
+ - Creates clear documentation hierarchy and navigation
26
+
27
+ - **CHANGELOG requirements strengthened** ⚠️
28
+ - .cursorrules: Made CHANGELOG.md update mandatory and explicit (first item)
29
+ - CONTRIBUTING.md: Added prominent warning that CHANGELOG.md updates are required for every commit
30
+ - CONTRIBUTING.md: Listed all CHANGELOG sections (Added/Changed/Fixed/Deprecated/Removed/Security)
31
+ - RELEASE_PROCESS.md: Clarified [Unreleased] → versioned section workflow
32
+ - RELEASE_PROCESS.md: Documented that commits add to [Unreleased] during development
33
+ - RELEASE_PROCESS.md: Explained that release commit converts [Unreleased] to [X.Y.Z]
34
+
35
+ ### Tests
36
+
37
+ - **Additional comma-separated test** (494 total tests)
38
+ - `test_model_wide_setting_does_not_affect_non_list_fields`
39
+ - Validates that `comma_separated_lists: ClassVar[bool] = True` only affects list fields
40
+ - Non-list fields (str, int, bool) work normally
41
+ - Explicit `click.option` decorators (like `-vvv` for verbose) are not affected
42
+ - Tests real-world use case: model-wide comma-separated + verbose counting
43
+
10
44
  ## [0.5.0] - 2025-10-14
11
45
 
12
46
  ### Added