jattac.libs.web.zest-button 1.2.9 → 1.4.0
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/dist/ZestButton.d.ts +19 -2
- package/dist/ZestDropdownMenu.d.ts +16 -0
- package/dist/ZestDropdownMenuItem.d.ts +9 -0
- package/dist/index.cjs.js +163 -8
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +19 -2
- package/dist/index.esm.js +143 -9
- package/dist/index.esm.js.map +1 -1
- package/docs/e2e/critical-paths.md +75 -0
- package/docs/features/zest-button-dropdown-options/BRS.md +213 -0
- package/docs/guidelines/AI_ARCHITECTURE.md +455 -0
- package/docs/guidelines/AI_BRS.md +435 -0
- package/docs/guidelines/AI_CODE_REVIEW.md +198 -0
- package/docs/guidelines/AI_E2E_TESTING.md +227 -0
- package/docs/guidelines/AI_GIT_WORKFLOW.md +595 -0
- package/docs/guidelines/AI_KNOWLEDGE.md +213 -0
- package/docs/guidelines/AI_PITFALLS.md +245 -0
- package/docs/guidelines/AI_STYLE_GUIDE.md +162 -0
- package/docs/guidelines/AI_TESTING.md +275 -0
- package/docs/guidelines/AI_TEST_CONFIGURATION.md +529 -0
- package/docs/guidelines/AI_WORKFLOW.md +442 -0
- package/docs/guidelines/AI_WORKFLOW_TRIGGERS.md +222 -0
- package/docs/guidelines/ai-knowledge.md +154 -0
- package/docs/guidelines/decision-log.md +149 -0
- package/package.json +78 -69
- package/dist/ZestContext.d.ts +0 -9
- package/dist/ZestProvider.d.ts +0 -8
- package/dist/semanticTypeDefaults.d.ts +0 -4
- package/docs/api.md +0 -140
- package/docs/breaking-changes.md +0 -143
- package/docs/configuration.md +0 -214
- package/docs/development.md +0 -93
- package/docs/examples.md +0 -227
- package/docs/features.md +0 -126
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# AI Knowledge Graph
|
|
2
|
+
|
|
3
|
+
Purpose:
|
|
4
|
+
|
|
5
|
+
Maintain a continuously evolving architectural memory of this repository.
|
|
6
|
+
|
|
7
|
+
This document is not documentation for humans.
|
|
8
|
+
|
|
9
|
+
It is persistent memory for future AI agents.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
Every completed task MUST update this file if new knowledge is discovered.
|
|
14
|
+
|
|
15
|
+
This MUST happen BEFORE implementation and AGAIN after implementation.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Format
|
|
20
|
+
|
|
21
|
+
Every component entry MUST follow this format:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
## [ComponentName]
|
|
25
|
+
|
|
26
|
+
### Purpose
|
|
27
|
+
|
|
28
|
+
[One sentence describing what this component does]
|
|
29
|
+
|
|
30
|
+
### Location
|
|
31
|
+
|
|
32
|
+
[File path]
|
|
33
|
+
|
|
34
|
+
### Callers
|
|
35
|
+
|
|
36
|
+
[List of components that call this component]
|
|
37
|
+
|
|
38
|
+
### Callees
|
|
39
|
+
|
|
40
|
+
[List of components that this component calls]
|
|
41
|
+
|
|
42
|
+
### Dependencies
|
|
43
|
+
|
|
44
|
+
[List of external dependencies]
|
|
45
|
+
|
|
46
|
+
### Publishes
|
|
47
|
+
|
|
48
|
+
[List of events published]
|
|
49
|
+
|
|
50
|
+
### Consumes
|
|
51
|
+
|
|
52
|
+
[List of events consumed]
|
|
53
|
+
|
|
54
|
+
### Configuration
|
|
55
|
+
|
|
56
|
+
[Configuration sources and settings]
|
|
57
|
+
|
|
58
|
+
### Database
|
|
59
|
+
|
|
60
|
+
[Tables, queries, connections]
|
|
61
|
+
|
|
62
|
+
### Known Invariants
|
|
63
|
+
|
|
64
|
+
[Business rules that MUST NOT change]
|
|
65
|
+
|
|
66
|
+
### Known Pitfalls
|
|
67
|
+
|
|
68
|
+
[Things that are easy to break]
|
|
69
|
+
|
|
70
|
+
### Thread Safety
|
|
71
|
+
|
|
72
|
+
[Concurrency considerations]
|
|
73
|
+
|
|
74
|
+
### Transaction Boundaries
|
|
75
|
+
|
|
76
|
+
[Transaction scope and isolation]
|
|
77
|
+
|
|
78
|
+
### Security Assumptions
|
|
79
|
+
|
|
80
|
+
[Authentication, authorization assumptions]
|
|
81
|
+
|
|
82
|
+
### Performance Characteristics
|
|
83
|
+
|
|
84
|
+
[Known performance traits]
|
|
85
|
+
|
|
86
|
+
### Test Coverage
|
|
87
|
+
|
|
88
|
+
[What is tested, what is not]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
# Entry Rules
|
|
94
|
+
|
|
95
|
+
Every component discovered during implementation MUST be added.
|
|
96
|
+
|
|
97
|
+
Every component modified during implementation MUST be updated.
|
|
98
|
+
|
|
99
|
+
Never remove information unless proven obsolete.
|
|
100
|
+
|
|
101
|
+
Prefer appending.
|
|
102
|
+
|
|
103
|
+
Repository knowledge compounds over time.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
# Example
|
|
108
|
+
|
|
109
|
+
## PaymentService
|
|
110
|
+
|
|
111
|
+
### Purpose
|
|
112
|
+
|
|
113
|
+
Creates payment records.
|
|
114
|
+
|
|
115
|
+
### Location
|
|
116
|
+
|
|
117
|
+
src/Services/PaymentService.cs
|
|
118
|
+
|
|
119
|
+
### Callers
|
|
120
|
+
|
|
121
|
+
OrderController
|
|
122
|
+
|
|
123
|
+
InvoiceService
|
|
124
|
+
|
|
125
|
+
### Callees
|
|
126
|
+
|
|
127
|
+
PaymentRepository
|
|
128
|
+
|
|
129
|
+
EventBus
|
|
130
|
+
|
|
131
|
+
EmailService
|
|
132
|
+
|
|
133
|
+
### Dependencies
|
|
134
|
+
|
|
135
|
+
Newtonsoft.Json
|
|
136
|
+
|
|
137
|
+
Stripe SDK
|
|
138
|
+
|
|
139
|
+
### Publishes
|
|
140
|
+
|
|
141
|
+
PaymentCreated
|
|
142
|
+
|
|
143
|
+
PaymentFailed
|
|
144
|
+
|
|
145
|
+
### Consumes
|
|
146
|
+
|
|
147
|
+
OrderPlaced
|
|
148
|
+
|
|
149
|
+
RefundRequested
|
|
150
|
+
|
|
151
|
+
### Configuration
|
|
152
|
+
|
|
153
|
+
PaymentSettings:MaxRetries (appsettings.json)
|
|
154
|
+
|
|
155
|
+
PaymentSettings:StripeKey (secrets)
|
|
156
|
+
|
|
157
|
+
### Database
|
|
158
|
+
|
|
159
|
+
Payments table
|
|
160
|
+
|
|
161
|
+
PaymentAuditLog table
|
|
162
|
+
|
|
163
|
+
### Known Invariants
|
|
164
|
+
|
|
165
|
+
Payment amount is immutable after settlement.
|
|
166
|
+
|
|
167
|
+
Payment status transitions are one-way: Pending → Settled or Pending → Failed.
|
|
168
|
+
|
|
169
|
+
### Known Pitfall
|
|
170
|
+
|
|
171
|
+
Registration occurs through reflection. Do not remove the Register method.
|
|
172
|
+
|
|
173
|
+
### Thread Safety
|
|
174
|
+
|
|
175
|
+
Payment processing is serialized per payment ID.
|
|
176
|
+
|
|
177
|
+
### Transaction Boundaries
|
|
178
|
+
|
|
179
|
+
Payment creation and event publishing are in separate transactions.
|
|
180
|
+
|
|
181
|
+
### Security Assumptions
|
|
182
|
+
|
|
183
|
+
Stripe key must never appear in logs.
|
|
184
|
+
|
|
185
|
+
### Performance Characteristics
|
|
186
|
+
|
|
187
|
+
Payment creation is synchronous. Event handlers are asynchronous.
|
|
188
|
+
|
|
189
|
+
### Test Coverage
|
|
190
|
+
|
|
191
|
+
Unit tests for PaymentService.
|
|
192
|
+
Integration tests for PaymentRepository.
|
|
193
|
+
No tests for EmailService (mocked).
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
# Cross-References
|
|
198
|
+
|
|
199
|
+
When a component is modified, check all components that reference it.
|
|
200
|
+
|
|
201
|
+
Update their entries if the modification affects their behaviour.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
# Maintenance
|
|
206
|
+
|
|
207
|
+
Never delete entries unless the component has been removed from the codebase.
|
|
208
|
+
|
|
209
|
+
Never delete known invariants unless explicitly instructed.
|
|
210
|
+
|
|
211
|
+
Never delete known pitfalls unless they have been resolved.
|
|
212
|
+
|
|
213
|
+
When in doubt, append rather than modify.
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Common AI Failure Modes
|
|
2
|
+
|
|
3
|
+
Never do the following.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Understanding Failures
|
|
8
|
+
|
|
9
|
+
Delete code because it appears unused.
|
|
10
|
+
|
|
11
|
+
Assume an event has no consumers.
|
|
12
|
+
|
|
13
|
+
Assume tests are complete.
|
|
14
|
+
|
|
15
|
+
Assume absence of references means safe removal.
|
|
16
|
+
|
|
17
|
+
Assume you understand code you have not read.
|
|
18
|
+
|
|
19
|
+
Assume you understand a call chain you have not fully traced.
|
|
20
|
+
|
|
21
|
+
Assume you know all consumers of a method.
|
|
22
|
+
|
|
23
|
+
Assume you know all callers of a method.
|
|
24
|
+
|
|
25
|
+
Assume existing behaviour is incorrect without evidence.
|
|
26
|
+
|
|
27
|
+
Guess business intent.
|
|
28
|
+
|
|
29
|
+
Claim certainty without evidence.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
# Modification Failures
|
|
34
|
+
|
|
35
|
+
Rewrite working code to match personal preference.
|
|
36
|
+
|
|
37
|
+
Replace architecture while implementing features.
|
|
38
|
+
|
|
39
|
+
Modify unrelated files.
|
|
40
|
+
|
|
41
|
+
Change formatting of unrelated code.
|
|
42
|
+
|
|
43
|
+
Rename APIs without instruction.
|
|
44
|
+
|
|
45
|
+
Rename symbols without instruction.
|
|
46
|
+
|
|
47
|
+
Reorder methods without instruction.
|
|
48
|
+
|
|
49
|
+
Reorder imports without instruction.
|
|
50
|
+
|
|
51
|
+
Move files without instruction.
|
|
52
|
+
|
|
53
|
+
Modernise code without instruction.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
# Addition Failures
|
|
58
|
+
|
|
59
|
+
Add code you think is needed but was not requested.
|
|
60
|
+
|
|
61
|
+
Add comments you think are helpful but were not requested.
|
|
62
|
+
|
|
63
|
+
Add logging you think is useful but was not requested.
|
|
64
|
+
|
|
65
|
+
Add error handling you think is necessary but was not requested.
|
|
66
|
+
|
|
67
|
+
Add null checks or defensive code you think is prudent but was not requested.
|
|
68
|
+
|
|
69
|
+
Add TODO comments about code you think needs improvement.
|
|
70
|
+
|
|
71
|
+
Add comments about code that needs refactoring.
|
|
72
|
+
|
|
73
|
+
Add try-catch blocks "just in case."
|
|
74
|
+
|
|
75
|
+
Add blanket exception handling.
|
|
76
|
+
|
|
77
|
+
Add null-forgiving operators to silence warnings.
|
|
78
|
+
|
|
79
|
+
Add #pragma disable to silence warnings.
|
|
80
|
+
|
|
81
|
+
Add SuppressMessage attributes.
|
|
82
|
+
|
|
83
|
+
Add Obsolete attributes.
|
|
84
|
+
|
|
85
|
+
Add InternalsVisibleTo for test projects.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
# Dependency Failures
|
|
90
|
+
|
|
91
|
+
Upgrade package versions to "fix" or "improve."
|
|
92
|
+
|
|
93
|
+
Add packages you think are needed.
|
|
94
|
+
|
|
95
|
+
Remove packages you think are unused.
|
|
96
|
+
|
|
97
|
+
Change SDK versions.
|
|
98
|
+
|
|
99
|
+
Change tool versions.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
# Configuration Failures
|
|
104
|
+
|
|
105
|
+
Modify build or CI configuration to "improve" it.
|
|
106
|
+
|
|
107
|
+
Modify database schema or migrations to "fix" something.
|
|
108
|
+
|
|
109
|
+
Modify configuration files to "improve" defaults.
|
|
110
|
+
|
|
111
|
+
Modify environment variables.
|
|
112
|
+
|
|
113
|
+
Modify secrets or secret references.
|
|
114
|
+
|
|
115
|
+
Modify Docker files or container configurations.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
# Testing Failures
|
|
120
|
+
|
|
121
|
+
Claim tests pass without showing output.
|
|
122
|
+
|
|
123
|
+
Claim build succeeds without showing output.
|
|
124
|
+
|
|
125
|
+
Skip tests.
|
|
126
|
+
|
|
127
|
+
Disable tests.
|
|
128
|
+
|
|
129
|
+
Mark tests as ignored.
|
|
130
|
+
|
|
131
|
+
Modify tests to make them pass.
|
|
132
|
+
|
|
133
|
+
Change test expectations to match broken behaviour.
|
|
134
|
+
|
|
135
|
+
Add tests that do not assert specific values.
|
|
136
|
+
|
|
137
|
+
Add tests that only verify "does not throw."
|
|
138
|
+
|
|
139
|
+
Add tests that depend on execution order.
|
|
140
|
+
|
|
141
|
+
Add tests that depend on external state.
|
|
142
|
+
|
|
143
|
+
Add tests that do not clean up after themselves.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
# Code Quality Failures
|
|
148
|
+
|
|
149
|
+
Change method signatures to "improve" them.
|
|
150
|
+
|
|
151
|
+
Change return types to be "more correct."
|
|
152
|
+
|
|
153
|
+
Change access modifiers to make things testable.
|
|
154
|
+
|
|
155
|
+
Make private things public for testing.
|
|
156
|
+
|
|
157
|
+
Add async/await where it was not present.
|
|
158
|
+
|
|
159
|
+
Change synchronous code to asynchronous.
|
|
160
|
+
|
|
161
|
+
Add ConfigureAwait(false) everywhere.
|
|
162
|
+
|
|
163
|
+
Add methods that do not belong in the current class.
|
|
164
|
+
|
|
165
|
+
Add classes that do not belong in the current module.
|
|
166
|
+
|
|
167
|
+
Add abstractions without clear need.
|
|
168
|
+
|
|
169
|
+
Add interfaces without clear need.
|
|
170
|
+
|
|
171
|
+
Add base classes without clear need.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
# Process Failures
|
|
176
|
+
|
|
177
|
+
Proceed with implementation when you have not fully read the code you are modifying.
|
|
178
|
+
|
|
179
|
+
Proceeding with incomplete understanding of the call chain.
|
|
180
|
+
|
|
181
|
+
Proceeding when you have unresolved questions.
|
|
182
|
+
|
|
183
|
+
Modify files that are not directly required by the task.
|
|
184
|
+
|
|
185
|
+
Refactoring code during feature work or bug fixes.
|
|
186
|
+
|
|
187
|
+
Reordering code for "clarity" during feature work.
|
|
188
|
+
|
|
189
|
+
Reformatting code during feature work.
|
|
190
|
+
|
|
191
|
+
Renaming things during feature work.
|
|
192
|
+
|
|
193
|
+
Squashing errors silently.
|
|
194
|
+
|
|
195
|
+
Swallowing exceptions.
|
|
196
|
+
|
|
197
|
+
Ignoring failing tests.
|
|
198
|
+
|
|
199
|
+
Skipping blast radius analysis.
|
|
200
|
+
|
|
201
|
+
Forgetting to update ai-knowledge.md.
|
|
202
|
+
|
|
203
|
+
Forgetting to update decision-log.md.
|
|
204
|
+
|
|
205
|
+
Forgetting to produce a change manifest.
|
|
206
|
+
|
|
207
|
+
Forgetting to report test output.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
# Communication Failures
|
|
212
|
+
|
|
213
|
+
Report completion without showing test output.
|
|
214
|
+
|
|
215
|
+
Report completion without producing a change manifest.
|
|
216
|
+
|
|
217
|
+
Report completion without performing self review.
|
|
218
|
+
|
|
219
|
+
Report completion with unresolved uncertainties.
|
|
220
|
+
|
|
221
|
+
Report completion with FAIL items in the self review.
|
|
222
|
+
|
|
223
|
+
Claim success without evidence.
|
|
224
|
+
|
|
225
|
+
Understate risks.
|
|
226
|
+
|
|
227
|
+
Hide unknowns.
|
|
228
|
+
|
|
229
|
+
Overstate confidence.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
# Always
|
|
234
|
+
|
|
235
|
+
Always prefer explicit reasoning over assumptions.
|
|
236
|
+
|
|
237
|
+
Always preserve behaviour over elegance.
|
|
238
|
+
|
|
239
|
+
Always explain WHY each change was made.
|
|
240
|
+
|
|
241
|
+
Always trace changes to specific user requirements.
|
|
242
|
+
|
|
243
|
+
Always read before you write.
|
|
244
|
+
|
|
245
|
+
Always stop when uncertain.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# AI Style Guide
|
|
2
|
+
|
|
3
|
+
Never introduce a second pattern when one already exists.
|
|
4
|
+
|
|
5
|
+
Prefer existing abstractions.
|
|
6
|
+
|
|
7
|
+
Respect existing project structure.
|
|
8
|
+
|
|
9
|
+
Do not rename symbols without instruction.
|
|
10
|
+
|
|
11
|
+
Keep methods cohesive.
|
|
12
|
+
|
|
13
|
+
Avoid speculative abstractions.
|
|
14
|
+
|
|
15
|
+
One responsibility per class.
|
|
16
|
+
|
|
17
|
+
Do not optimise prematurely.
|
|
18
|
+
|
|
19
|
+
Use explicit names over clever names.
|
|
20
|
+
|
|
21
|
+
Prefer readability over brevity.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Naming
|
|
26
|
+
|
|
27
|
+
Use the same naming conventions as existing code.
|
|
28
|
+
|
|
29
|
+
Do not introduce new naming patterns.
|
|
30
|
+
|
|
31
|
+
Match the capitalisation style of existing code (camelCase, PascalCase, snake_case).
|
|
32
|
+
|
|
33
|
+
Match the abbreviation style of existing code.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
# File Structure
|
|
38
|
+
|
|
39
|
+
Place new files in the same directories as similar existing files.
|
|
40
|
+
|
|
41
|
+
Do not create new directory structures.
|
|
42
|
+
|
|
43
|
+
Do not reorganise files.
|
|
44
|
+
|
|
45
|
+
Do not move files.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
# Method Length
|
|
50
|
+
|
|
51
|
+
If a method exceeds ~30 lines, consider whether it should be split.
|
|
52
|
+
|
|
53
|
+
But only if the existing codebase demonstrates that pattern.
|
|
54
|
+
|
|
55
|
+
Do not split methods that are shorter than surrounding code.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
# Class Length
|
|
60
|
+
|
|
61
|
+
If a class exceeds ~300 lines, consider whether it should be split.
|
|
62
|
+
|
|
63
|
+
But only if the existing codebase demonstrates that pattern.
|
|
64
|
+
|
|
65
|
+
Do not split classes that are smaller than surrounding code.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
# Parameters
|
|
70
|
+
|
|
71
|
+
If a method has more than 4 parameters, consider whether a parameter object is appropriate.
|
|
72
|
+
|
|
73
|
+
But only if the existing codebase demonstrates that pattern.
|
|
74
|
+
|
|
75
|
+
Do not introduce parameter objects for methods that have fewer parameters than surrounding code.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
# Error Handling
|
|
80
|
+
|
|
81
|
+
Use the same error handling patterns as existing code.
|
|
82
|
+
|
|
83
|
+
Do not introduce new patterns.
|
|
84
|
+
|
|
85
|
+
Do not add error handling that does not exist in surrounding code.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
# Logging
|
|
90
|
+
|
|
91
|
+
Use the same logging patterns as existing code.
|
|
92
|
+
|
|
93
|
+
Do not introduce new patterns.
|
|
94
|
+
|
|
95
|
+
Do not add logging that does not exist in surrounding code.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
# Configuration
|
|
100
|
+
|
|
101
|
+
Use the same configuration patterns as existing code.
|
|
102
|
+
|
|
103
|
+
Do not introduce new patterns.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
# Comments
|
|
108
|
+
|
|
109
|
+
Use the same comment style as existing code.
|
|
110
|
+
|
|
111
|
+
Do not introduce new styles.
|
|
112
|
+
|
|
113
|
+
Do not add comments unless explicitly requested.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
# Formatting
|
|
118
|
+
|
|
119
|
+
Match the formatting of surrounding code exactly.
|
|
120
|
+
|
|
121
|
+
Do not reformat unrelated code.
|
|
122
|
+
|
|
123
|
+
Do not change whitespace in unrelated code.
|
|
124
|
+
|
|
125
|
+
Do not change line breaks in unrelated code.
|
|
126
|
+
|
|
127
|
+
Do not change indentation in unrelated code.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
# Imports
|
|
132
|
+
|
|
133
|
+
Use the same import style as existing code.
|
|
134
|
+
|
|
135
|
+
Do not reorder imports.
|
|
136
|
+
|
|
137
|
+
Do not add imports unless explicitly required by the change.
|
|
138
|
+
|
|
139
|
+
Do not remove imports unless the removed import is no longer used.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
# Access Modifiers
|
|
144
|
+
|
|
145
|
+
Use the same access modifier patterns as existing code.
|
|
146
|
+
|
|
147
|
+
Do not change access modifiers unless explicitly required.
|
|
148
|
+
|
|
149
|
+
Do not make private things public for testing.
|
|
150
|
+
|
|
151
|
+
Do not make things internal for convenience.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
# Project-Specific Style — Lattice Admin Web
|
|
156
|
+
|
|
157
|
+
## Copy rules
|
|
158
|
+
|
|
159
|
+
- All page titles, subtitles, labels, and helper text must be written for business users and operations staff
|
|
160
|
+
- Never use technical terms like "table-driven", "SQL INSERT", "endpoint", "schema", or backend implementation details in any user-facing string
|
|
161
|
+
- Subtitle of `PageContainer` should describe what the page does and why it matters to the user, not how it works internally
|
|
162
|
+
- Instruction panels in forms should explain field purpose in plain business language
|