takt 0.32.1 → 0.32.2

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 (31) hide show
  1. package/builtins/en/facets/instructions/plan.md +2 -0
  2. package/builtins/en/facets/instructions/review-frontend.md +2 -0
  3. package/builtins/en/facets/knowledge/frontend.md +46 -0
  4. package/builtins/en/facets/knowledge/react.md +90 -0
  5. package/builtins/en/facets/output-contracts/plan-frontend.md +41 -0
  6. package/builtins/en/facets/output-contracts/plan.md +8 -0
  7. package/builtins/en/facets/policies/coding.md +23 -1
  8. package/builtins/en/facets/policies/design-planning.md +52 -0
  9. package/builtins/en/facets/policies/testing.md +31 -0
  10. package/builtins/en/pieces/dual-cqrs-mini.yaml +3 -1
  11. package/builtins/en/pieces/dual-cqrs.yaml +3 -1
  12. package/builtins/en/pieces/dual-mini.yaml +3 -1
  13. package/builtins/en/pieces/dual.yaml +3 -1
  14. package/builtins/en/pieces/frontend-mini.yaml +3 -1
  15. package/builtins/en/pieces/frontend.yaml +13 -2
  16. package/builtins/ja/facets/instructions/plan.md +2 -0
  17. package/builtins/ja/facets/instructions/review-frontend.md +2 -0
  18. package/builtins/ja/facets/knowledge/frontend.md +46 -0
  19. package/builtins/ja/facets/knowledge/react.md +90 -0
  20. package/builtins/ja/facets/output-contracts/plan-frontend.md +41 -0
  21. package/builtins/ja/facets/output-contracts/plan.md +8 -0
  22. package/builtins/ja/facets/policies/coding.md +23 -1
  23. package/builtins/ja/facets/policies/design-planning.md +52 -0
  24. package/builtins/ja/facets/policies/testing.md +31 -0
  25. package/builtins/ja/pieces/dual-cqrs-mini.yaml +3 -1
  26. package/builtins/ja/pieces/dual-cqrs.yaml +3 -1
  27. package/builtins/ja/pieces/dual-mini.yaml +3 -1
  28. package/builtins/ja/pieces/dual.yaml +3 -1
  29. package/builtins/ja/pieces/frontend-mini.yaml +3 -1
  30. package/builtins/ja/pieces/frontend.yaml +13 -2
  31. package/package.json +2 -2
@@ -19,7 +19,9 @@ For small tasks, skip the design sections in the report.
19
19
  4. Determine file structure and design patterns (if needed)
20
20
  5. Decide on the implementation approach
21
21
  - Verify the implementation approach does not violate knowledge/policy constraints
22
+ - When adding or changing a user-facing feature, fix the conditions, entry points, and reachability by which users arrive at it
22
23
  6. Include the following in coder implementation guidelines:
23
24
  - Existing implementation patterns to reference (file:line). Always cite when similar processing already exists
24
25
  - Impact area of changes. Especially when adding new parameters, enumerate all call sites that need wiring
25
26
  - Anti-patterns to watch for in this specific task (if applicable)
27
+ - When adding or changing a user-facing feature, all affected reachability, callers, and launch conditions
@@ -7,6 +7,7 @@ Review the changes from a frontend development perspective.
7
7
  - Performance (re-renders, memoization)
8
8
  - Accessibility (keyboard navigation, ARIA)
9
9
  - Data fetching patterns
10
+ - Reachability wiring for user-facing features (routes, entry paths, launch conditions)
10
11
  - TypeScript type safety
11
12
 
12
13
  **Design fidelity check (when a design reference exists):**
@@ -28,5 +29,6 @@ Review {report:coder-decisions.md} to understand the recorded design decisions.
28
29
 
29
30
  1. Review the change diff and detect issues based on the frontend development criteria above
30
31
  - Cross-check changes against REJECT criteria tables defined in knowledge
32
+ - When new screens or user-facing features are added, verify that entry points and caller wiring were updated as well
31
33
  2. For each detected issue, classify as blocking/non-blocking based on Policy's scope determination table and judgment rules
32
34
  3. If there is even one blocking issue, judge as REJECT
@@ -45,6 +45,40 @@ features/{feature-name}/
45
45
  └── index.ts
46
46
  ```
47
47
 
48
+ ## Routing Wiring When Adding a Page
49
+
50
+ Do not stop at creating the page component. A new page must also be wired into an actual entry path. Decide together with the implementation how the page is reached: router, menu, temporary route, or another explicit entry point.
51
+
52
+ | Criteria | Judgment |
53
+ |----------|----------|
54
+ | A new page exists but no route is registered for it | REJECT |
55
+ | Basename-based URL and route path mapping is not verified | REJECT |
56
+ | Router wiring and page entry are decided together with the page implementation | OK |
57
+ | A temporary development route is used and its purpose/removal plan is recorded | OK |
58
+ | Routes are updated but actual entry points such as menus, buttons, links, or external callers are not checked | Warning |
59
+
60
+ ```tsx
61
+ // OK - page and route are added together
62
+ <Route path="/contreg" element={<ContainerRegisterPage />} />
63
+
64
+ // REJECT - page exists but has no reachable route
65
+ // src/pages/ContainerRegisterPage.tsx exists
66
+ // Router has no matching route
67
+ ```
68
+
69
+ Reachability is broader than router configuration. Confirm the real entry path users will follow, such as menus, transition buttons, dialog actions, links from other screens, or external callers.
70
+
71
+ ### Integrating third-party UI libraries
72
+
73
+ Third-party UI libraries such as data grids, date pickers, charts, and virtualized lists can fail at runtime even when types pass. This is especially common across major-version changes where prop names or state model shapes are no longer compatible, and shallow mocks do not expose the problem.
74
+
75
+ | Criteria | Judgment |
76
+ |----------|----------|
77
+ | Major UI library props are guessed without checking the version used by the project | REJECT |
78
+ | Tests fully mock the library and miss real mount failures | Warning |
79
+ | The real component is rendered with representative props and verified not to crash at screen level | OK |
80
+ | Prop shapes are chosen by referencing existing in-project usage patterns and the installed version | OK |
81
+
48
82
  ## State Management
49
83
 
50
84
  Child components do not modify their own state. They bubble events to parent, and parent manipulates state.
@@ -78,6 +112,7 @@ Exception (OK for child to have local state):
78
112
  | State changes from child to parent (reverse data flow) | REJECT |
79
113
  | API response stored as-is in state | Consider normalization |
80
114
  | Inappropriate useEffect dependencies | REJECT |
115
+ | Initial load tied to unstable Context/Provider function references | REJECT |
81
116
 
82
117
  State Placement Guidelines:
83
118
 
@@ -88,6 +123,17 @@ State Placement Guidelines:
88
123
  | Shared across multiple components | Context or state management library |
89
124
  | Server data cache | Data fetching library (TanStack Query, etc.) |
90
125
 
126
+ ## Initial load and refetch boundaries
127
+
128
+ Initial loading should be separated from reactive refetching. If refetching is not driven by URL, filter, paging, or explicit user action, keep it mount-only and do not tie it to unstable callback references.
129
+
130
+ | Criteria | Judgment |
131
+ |----------|----------|
132
+ | Initial load reruns because a Provider/Context callback changed identity | REJECT |
133
+ | Refetch conditions are explicit (URL, filter, paging, refresh action) | OK |
134
+ | Message display, loading toggles, or modal state cause refetching | REJECT |
135
+ | Initial load is mount-only and later refetches are triggered explicitly | OK |
136
+
91
137
  ## Data Fetching
92
138
 
93
139
  API calls are made in root (View) components and passed to children via props.
@@ -0,0 +1,90 @@
1
+ # React Knowledge
2
+
3
+ ## Effects and Re-execution
4
+
5
+ `useEffect` is a mechanism for declaring when re-execution is allowed, not a generic place to put initialization. Decide first whether a load is mount-only or should rerun on dependency changes.
6
+
7
+ | Criteria | Judgment |
8
+ |----------|----------|
9
+ | A mount-only initial load depends on recreated function references | REJECT |
10
+ | Context/Provider functions are used as effect dependencies without a clear refetch requirement | REJECT |
11
+ | Mount-only initialization is expressed with `useEffect(..., [])` and its intent is documented | OK |
12
+ | Refetching on dependency change is required by the feature and those dependencies are explicit | OK |
13
+
14
+ ```tsx
15
+ // REJECT - initial load can rerun because unstable function deps leak into the effect
16
+ const fetchList = useCallback(async () => {
17
+ await loadItems()
18
+ }, [setIsLoading, errorPage])
19
+
20
+ useEffect(() => {
21
+ fetchList()
22
+ }, [fetchList])
23
+
24
+ // OK - explicitly mount-only initial load
25
+ useEffect(() => {
26
+ void loadItemsOnMount()
27
+ // mount-only initial load
28
+ // eslint-disable-next-line react-hooks/exhaustive-deps
29
+ }, [])
30
+ ```
31
+
32
+ ## Context and Provider Values
33
+
34
+ `value={{ ... }}` in a Provider creates a new reference on each Provider render. When functions obtained from Context are placed in effect dependencies, consumers can enter unintended refetch loops.
35
+
36
+ | Criteria | Judgment |
37
+ |----------|----------|
38
+ | Context-derived functions are placed in effect dependencies without checking reference stability | REJECT |
39
+ | Mount effects rely on Provider functions whose stability is not guaranteed | REJECT |
40
+ | Context functions are used from event handlers while initial load stays mount-only | OK |
41
+ | Provider values are stabilized and refetch conditions are defined explicitly | OK |
42
+
43
+ ```tsx
44
+ // REJECT - Context functions are used directly as initial-load effect deps
45
+ const { setIsLoading, errorPage } = useAppContext()
46
+ useEffect(() => {
47
+ void loadInitialData(setIsLoading, errorPage)
48
+ }, [setIsLoading, errorPage])
49
+
50
+ // OK - initial load is mount-only, Context functions are consumed inside it
51
+ const { setIsLoading, errorPage } = useAppContext()
52
+ useEffect(() => {
53
+ void loadInitialData({ setIsLoading, errorPage })
54
+ // mount-only initial load
55
+ // eslint-disable-next-line react-hooks/exhaustive-deps
56
+ }, [])
57
+ ```
58
+
59
+ ## Initial Page Load
60
+
61
+ Treat initial page load separately from reactive refetching. Unless refetching is required by filter, URL, pagination, or explicit user action, keep the initial fetch mount-only.
62
+
63
+ | Condition | Recommendation |
64
+ |-----------|----------------|
65
+ | List is loaded once on page entry | mount-only effect |
66
+ | Refetching follows filter, pagination, or URL changes | make those states explicit dependencies |
67
+ | Loading state updates trigger refetching | REJECT |
68
+ | Message display or dialog state triggers refetching | REJECT |
69
+
70
+ ## Custom Hook Responsibility
71
+
72
+ A React custom hook should encapsulate state, effects, refs, or event translation. Pure calculations belong in function modules, not in a `use*` hook.
73
+
74
+ | Criteria | Judgment |
75
+ |----------|----------|
76
+ | A module is named `use*` but does not use React state/effect/ref | Warning |
77
+ | Pure functions are modeled as a custom hook | Warning |
78
+ | Stateful UI control lives in a custom hook and pure calculations live in functions | OK |
79
+ | A hook returns JSX | REJECT |
80
+
81
+ ## Handling exhaustive-deps
82
+
83
+ `react-hooks/exhaustive-deps` is not a rule to satisfy mechanically. If adding dependencies changes a mount-only effect into a loop, keep the effect mount-only and document why the suppression exists.
84
+
85
+ | Criteria | Judgment |
86
+ |----------|----------|
87
+ | Dependencies are added only to satisfy lint and they change runtime behavior | REJECT |
88
+ | Lint suppression is added without explanation | Warning |
89
+ | Mount-only suppression is documented with intent | OK |
90
+ | A reactive effect that should rerun is incorrectly frozen with `[]` | REJECT |
@@ -0,0 +1,41 @@
1
+ ```markdown
2
+ # Task Plan
3
+
4
+ ## Original Request
5
+ {User's request as-is}
6
+
7
+ ## Analysis
8
+
9
+ ### Objective
10
+ {What needs to be achieved}
11
+
12
+ ### Reference Material Findings (when reference material exists)
13
+ {Overview of reference implementation's approach and key differences from current implementation}
14
+
15
+ ### Design Element Decisions (when design references exist)
16
+ | Element | Keep/Change | Rationale |
17
+ |------|-------------|-----------|
18
+
19
+ ### Scope
20
+ {Impact area}
21
+
22
+ ### Approaches Considered (when design decisions exist)
23
+ | Approach | Adopted? | Rationale |
24
+ |----------|----------|-----------|
25
+
26
+ ### Implementation Approach
27
+ {How to proceed}
28
+
29
+ ## Implementation Guidelines (only when design is needed)
30
+ - {Guidelines the Coder should follow during implementation}
31
+
32
+ ## Out of Scope (only when items exist)
33
+ | Item | Reason for exclusion |
34
+ |------|---------------------|
35
+
36
+ When design references exist:
37
+ - {Excluded element name, why it is excluded, and why no substitute is taken now}
38
+
39
+ ## Open Questions (if any)
40
+ - {Unclear points or items that need confirmation}
41
+ ```
@@ -22,6 +22,14 @@
22
22
  ### Implementation Approach
23
23
  {How to proceed}
24
24
 
25
+ ### Reachability and Launch Conditions (when adding/changing user-facing features)
26
+ | Item | Content |
27
+ |------|---------|
28
+ | User entry point | {Menu/route/button/link/external caller, or explicitly say "none"} |
29
+ | Callers/wiring to update | {Files or layers that must be updated} |
30
+ | Launch conditions | {Auth, permission, URL condition, flags, etc.} |
31
+ | Remaining gaps | {Any unresolved wiring, or "none"} |
32
+
25
33
  ## Implementation Guidelines (only when design is needed)
26
34
  - {Guidelines the Coder should follow during implementation}
27
35
 
@@ -204,13 +204,35 @@ return storage.upload(file, options)
204
204
  - UI/logic exceeding 50 lines → Separate
205
205
  - Has multiple responsibilities → Separate
206
206
 
207
+ ### Reachability When Adding Features
208
+
209
+ When adding a new feature or screen, update the paths by which users reach it in the same change set. Framework-specific wiring belongs in domain knowledge.
210
+
211
+ | Criteria | Judgment |
212
+ |----------|----------|
213
+ | A new feature is implemented but callers, entry points, or navigation are not updated | REJECT |
214
+ | A user-facing feature is added without defining how users reach it | REJECT |
215
+ | Implementation and reachability updates are made in the same change set | OK |
216
+ | A temporary entry path is added and its purpose/removal condition is documented | OK |
217
+
207
218
  ### Dependency Direction
208
219
 
209
220
  - Upper layers → Lower layers (reverse direction prohibited)
210
221
  - Fetch data at the root (View/Controller) and pass it down
211
222
  - Children do not know about their parents
212
223
 
213
- ### State Management
224
+ ### Align execution triggers with actual intent
225
+
226
+ Dependencies and triggers must match the conditions under which the behavior should actually run again. Do not add triggers only to satisfy linting or implementation convenience if that changes runtime behavior.
227
+
228
+ | Criteria | Judgment |
229
+ |----------|----------|
230
+ | Dependencies or triggers are expanded only for linting/convenience and create rerun loops | REJECT |
231
+ | Initial processing reruns because of unrelated state changes or recreated callbacks | REJECT |
232
+ | Rerun conditions correspond to URL, filters, explicit refresh actions, or other intended behavior | OK |
233
+ | Initialization and later refetch triggers are designed separately | OK |
234
+
235
+ ## State Management
214
236
 
215
237
  - Confine state to where it is used
216
238
  - Children do not modify state directly (notify parents via events)
@@ -0,0 +1,52 @@
1
+ # Design Planning Policy
2
+
3
+ When a task includes design references, planning must make element inventory and scope decisions explicit.
4
+
5
+ ## Principles
6
+
7
+ | Principle | Standard |
8
+ |------|------|
9
+ | Reference-first planning | When design references exist, planning treats them as primary input |
10
+ | Element-level inventory | Differences are checked at the element level, not only at the screen level |
11
+ | Explicit change decision | Each element includes a keep/change decision with rationale |
12
+ | Scope exclusion accountability | If a design element is excluded, the reason must be stated |
13
+ | Clear implementation boundary | The boundary between in-scope and out-of-scope elements is fixed during planning |
14
+
15
+ ## Applicability
16
+
17
+ This policy applies to planning tasks whose task instructions or reference materials include design references. It does not apply when no design reference exists.
18
+
19
+ ## Decision Criteria
20
+
21
+ | Criteria | Decision |
22
+ |------|------|
23
+ | Planning proceeds without listing the main design elements | REJECT |
24
+ | There is no keep/change decision for each element | REJECT |
25
+ | Scope is narrowed with vague statements such as "list only this time" without naming elements | REJECT |
26
+ | Out-of-scope elements do not include an exclusion rationale | REJECT |
27
+ | Design interpretation is ambiguous but the rationale is recorded | OK |
28
+
29
+ ## Planning Judgment
30
+
31
+ Planning inventories the design reference without dropping elements that materially affect the UI or flow.
32
+
33
+ Inventory viewpoints:
34
+ - Check not only major sections, but also detailed flows, modals, action controls, and state displays
35
+ - Record the current implementation difference and keep/change decision for each element
36
+ - When keeping the existing implementation, cite the target file and rationale
37
+
38
+ ## Scope Decisions
39
+
40
+ If a design-referenced element is placed out of scope, planning records at least:
41
+
42
+ - the excluded element name
43
+ - the reason for exclusion
44
+ - the reason no substitute implementation is taken now
45
+
46
+ Do not split out design-referenced elements as "another task" without explicit rationale.
47
+
48
+ ## Prohibited
49
+
50
+ - **Planning with only coarse screen-level summaries** - causes missing element coverage
51
+ - **Narrowing the intent of the reference without rationale** - misaligns implementation and review
52
+ - **Omitting the explanation for out-of-scope elements** - makes later movements ambiguous
@@ -66,6 +66,37 @@ Test names describe expected behavior. Use the `should {expected behavior} when
66
66
  - Arrange-Act-Assert pattern (equivalent to Given-When-Then)
67
67
  - Avoid magic numbers and magic strings
68
68
 
69
+ ## Refetch loop regressions
70
+
71
+ When a page performs initial loading, tests must prove that the load does not rerun because of unrelated re-renders, loading toggles, or Context callback identity changes.
72
+
73
+ | Criteria | Verdict |
74
+ |----------|---------|
75
+ | Initial load bug fix has no regression test for duplicate API calls | REJECT |
76
+ | Tests only verify that loading happened once, not that it stayed stable after rerender | Warning |
77
+ | Page tests assert call count stability across rerender or state updates | OK |
78
+
79
+ ## Reachability regressions
80
+
81
+ When adding or changing user-facing features or screens, tests or equivalent verification must prove that users can still reach the feature.
82
+
83
+ | Criteria | Verdict |
84
+ |----------|---------|
85
+ | A new screen or feature is added with no verification of entry path or launch conditions | REJECT |
86
+ | Only isolated component rendering is tested, without verifying reachability from an entry point | Warning |
87
+ | The feature is verified reachable from an actual entry point such as a route, menu, button, link, or external caller | OK |
88
+
89
+ ## UI library integration regressions
90
+
91
+ When introducing or changing major third-party UI components such as data grids, date pickers, virtualized lists, or charts, tests must prove that the real component mounts without crashing.
92
+
93
+ | Criteria | Verdict |
94
+ |----------|---------|
95
+ | A major third-party UI component is added or changed without a regression test that mounts the real component | REJECT |
96
+ | Prop compatibility is checked only through shallow mocks or existence checks | Warning |
97
+ | The screen is rendered from its real entry path and the primary UI mounts without exceptions | OK |
98
+ | The primary UI component is also rendered directly with representative props | OK |
99
+
69
100
  ## Test Strategy
70
101
 
71
102
  - Prefer unit tests for logic, integration tests for boundaries
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - backend
@@ -51,7 +53,7 @@ movements:
51
53
  output_contracts:
52
54
  report:
53
55
  - name: plan.md
54
- format: plan
56
+ format: plan-frontend
55
57
  - name: implement
56
58
  edit: true
57
59
  persona: coder
@@ -37,6 +37,8 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
42
44
  - backend
@@ -60,7 +62,7 @@ movements:
60
62
  output_contracts:
61
63
  report:
62
64
  - name: plan.md
63
- format: plan
65
+ format: plan-frontend
64
66
  - name: implement
65
67
  edit: true
66
68
  persona: coder
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - backend
@@ -50,7 +52,7 @@ movements:
50
52
  output_contracts:
51
53
  report:
52
54
  - name: plan.md
53
- format: plan
55
+ format: plan-frontend
54
56
  - name: implement
55
57
  edit: true
56
58
  persona: coder
@@ -37,6 +37,8 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
42
44
  - backend
@@ -63,7 +65,7 @@ movements:
63
65
  output_contracts:
64
66
  report:
65
67
  - name: plan.md
66
- format: plan
68
+ format: plan-frontend
67
69
  - name: write_tests
68
70
  edit: true
69
71
  persona: coder
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - security
@@ -49,7 +51,7 @@ movements:
49
51
  output_contracts:
50
52
  report:
51
53
  - name: plan.md
52
- format: plan
54
+ format: plan-frontend
53
55
  - name: implement
54
56
  edit: true
55
57
  persona: coder
@@ -37,8 +37,11 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
44
+ - react
42
45
  - architecture
43
46
  provider_options:
44
47
  claude:
@@ -58,7 +61,7 @@ movements:
58
61
  output_contracts:
59
62
  report:
60
63
  - name: plan.md
61
- format: plan
64
+ format: plan-frontend
62
65
  - name: write_tests
63
66
  edit: true
64
67
  persona: coder
@@ -67,6 +70,7 @@ movements:
67
70
  - testing
68
71
  knowledge:
69
72
  - frontend
73
+ - react
70
74
  - architecture
71
75
  - unit-testing
72
76
  - e2e-testing
@@ -110,6 +114,7 @@ movements:
110
114
  session: refresh
111
115
  knowledge:
112
116
  - frontend
117
+ - react
113
118
  - security
114
119
  - architecture
115
120
  provider_options:
@@ -175,6 +180,7 @@ movements:
175
180
  session: refresh
176
181
  knowledge:
177
182
  - frontend
183
+ - react
178
184
  - security
179
185
  - architecture
180
186
  provider_options:
@@ -222,6 +228,7 @@ movements:
222
228
  knowledge:
223
229
  - architecture
224
230
  - frontend
231
+ - react
225
232
  provider_options:
226
233
  claude:
227
234
  allowed_tools:
@@ -244,7 +251,9 @@ movements:
244
251
  policy:
245
252
  - review
246
253
  - design-fidelity
247
- knowledge: frontend
254
+ knowledge:
255
+ - frontend
256
+ - react
248
257
  provider_options:
249
258
  claude:
250
259
  allowed_tools:
@@ -350,6 +359,7 @@ movements:
350
359
  - design-fidelity
351
360
  knowledge:
352
361
  - frontend
362
+ - react
353
363
  - security
354
364
  - architecture
355
365
  provider_options:
@@ -406,6 +416,7 @@ movements:
406
416
  - design-fidelity
407
417
  knowledge:
408
418
  - frontend
419
+ - react
409
420
  - security
410
421
  - architecture
411
422
  provider_options:
@@ -25,7 +25,9 @@
25
25
  5. ファイル構成・設計パターンを決定する(必要な場合)
26
26
  6. 実装アプローチを決める
27
27
  - 実装アプローチがナレッジ・ポリシーの制約に違反しないか照合する
28
+ - 利用者向け機能の追加や変更がある場合、利用者がその機能へ到達する条件・入口・起動経路を固定する
28
29
  7. Coder向けの実装ガイドラインに以下を含めること:
29
30
  - 参照すべき既存実装パターン(ファイル:行)。同種の処理が既にある場合は必ず示す
30
31
  - 変更の影響範囲。特に新しいパラメータを追加する場合、配線が必要な全箇所を列挙する
31
32
  - このタスクで特に注意すべきアンチパターン(該当するものがあれば)
33
+ - 利用者向け機能の追加や変更がある場合、到達経路・呼び出し元・起動条件に関する変更箇所
@@ -7,6 +7,7 @@
7
7
  - パフォーマンス(再レンダリング、メモ化)
8
8
  - アクセシビリティ(キーボード操作、ARIA)
9
9
  - データフェッチパターン
10
+ - 利用者が機能へ到達できる配線(route、導線、起動条件)
10
11
  - TypeScript型安全性
11
12
 
12
13
  **デザイン忠実度チェック(デザイン参照がある場合):**
@@ -28,5 +29,6 @@
28
29
 
29
30
  1. 変更差分を確認し、フロントエンド開発の観点に基づいて問題を検出する
30
31
  - ナレッジの判定基準テーブル(REJECT条件)と変更内容を照合する
32
+ - 新規の画面・機能ファイルが追加されている場合、利用者が到達する入口や呼び出し元の更新有無を確認する
31
33
  2. 検出した問題ごとに、Policyのスコープ判定表と判定ルールに基づいてブロッキング/非ブロッキングを分類する
32
34
  3. ブロッキング問題が1件でもあればREJECTと判定する
@@ -37,6 +37,40 @@ View コンポーネント(`features/*/components/*-view.tsx`)がデータ
37
37
  ルート(route) → View(データ取得・状態管理) → 子コンポーネント(表示)
38
38
  ```
39
39
 
40
+ ### 画面追加時のルーティング配線
41
+
42
+ 新しい画面を追加したら、画面コンポーネントを作るだけで終わらせず、到達経路まで配線する。Router、メニュー、導線のどこから到達するかを計画時点で固定する。
43
+
44
+ | 基準 | 判定 |
45
+ |------|------|
46
+ | 新規ページを作成したのに Router に route がない | REJECT |
47
+ | basename 配下の URL と route path の対応を確認していない | REJECT |
48
+ | 画面実装と同時に Router / 導線 / 一時導線の要否を判断している | OK |
49
+ | 開発用の一時導線を使う場合、その理由と後で除去する前提を記録している | OK |
50
+ | route を更新したが、メニュー・ボタン・リンク・外部呼び出しなど実際の入口を未確認 | 警告 |
51
+
52
+ ```tsx
53
+ // OK - 画面実装と route 配線を同時に追加
54
+ <Route path="/contreg" element={<ContainerRegisterPage />} />
55
+
56
+ // REJECT - 画面実装はあるが到達経路がない
57
+ // src/pages/ContainerRegisterPage.tsx は存在する
58
+ // Router には route がない
59
+ ```
60
+
61
+ 到達経路は Router だけではない。メニュー、一覧からの遷移ボタン、ダイアログ内の確定導線、外部画面からのリンクなど、利用者が実際にたどる入口を基準に確認する。
62
+
63
+ ### 外部UIライブラリとの統合
64
+
65
+ DataGrid、日付ピッカー、チャート、仮想リストのような外部 UI ライブラリは、型が通っても実行時に落ちることがある。特にメジャーバージョン差分では、props 名や state model の互換性を shallow なモックだけでは検出できない。
66
+
67
+ | 基準 | 判定 |
68
+ |------|------|
69
+ | 主要 UI ライブラリの props を、既存プロジェクトのバージョン確認なしに推測で渡す | REJECT |
70
+ | テストでライブラリ本体を完全にモックし、実マウント時の破綻を見逃す | 警告 |
71
+ | 代表的な props で実コンポーネントを描画し、画面レベルでクラッシュしないことを確認する | OK |
72
+ | 既存画面の利用パターンやプロジェクト依存バージョンを参照して props 形を決める | OK |
73
+
40
74
  ## コンポーネント設計
41
75
 
42
76
  1ファイルにベタ書きしない。必ずコンポーネント分割する。
@@ -146,6 +180,7 @@ const Parent = () => {
146
180
  | 子から親への状態変更(逆方向データフロー) | REJECT |
147
181
  | APIレスポンスをそのまま状態に | 正規化を検討 |
148
182
  | useEffectの依存配列が不適切 | REJECT |
183
+ | 初期取得が不安定な Context/Provider 関数参照に結び付いている | REJECT |
149
184
 
150
185
  状態配置の判断基準:
151
186
 
@@ -171,6 +206,17 @@ const Parent = () => {
171
206
  2. 既存の生成済みクライアントの使用パターンを確認
172
207
  3. 新規エンドポイントは生成パイプラインに追加し、生成されたフックを使う
173
208
 
209
+ ## 初期表示ロードと再取得境界
210
+
211
+ 初期表示ロードはリアクティブな再取得と分けて扱う。URL、フィルタ、ページング、明示的な更新操作がない限り、初回ロードは mount-only に保ち、不安定なコールバック参照に結び付けない。
212
+
213
+ | 基準 | 判定 |
214
+ |------|------|
215
+ | Provider/Context の関数参照変化で初期取得が再実行される | REJECT |
216
+ | 再取得条件が URL・フィルタ・ページング・更新操作として明示されている | OK |
217
+ | メッセージ表示、loading 切替、dialog 開閉で再取得される | REJECT |
218
+ | 初期取得は mount-only、以後の再取得は明示トリガーで行う | OK |
219
+
174
220
  ## データ取得
175
221
 
176
222
  API呼び出しはルート(View)コンポーネントで行い、子コンポーネントにはpropsで渡す。
@@ -0,0 +1,90 @@
1
+ # React知識
2
+
3
+ ## effect と再実行
4
+
5
+ `useEffect` は「いつ再実行してよいか」を明示する仕組みであり、初期化処理の置き場ではない。初期表示で1回だけ行う処理か、依存変化で再実行すべき処理かを先に決める。
6
+
7
+ | 基準 | 判定 |
8
+ |------|------|
9
+ | 初期表示の一度きりのロードなのに、再生成される関数参照を依存に置く | REJECT |
10
+ | 再取得条件が明確でないのに、Context/Provider 由来関数を依存に置く | REJECT |
11
+ | mount-only 初期化を `useEffect(..., [])` で表現し、意図をコメントで残す | OK |
12
+ | 依存変化時の再取得が仕様として必要で、その依存を明示している | OK |
13
+
14
+ ```tsx
15
+ // REJECT - 初期取得なのに不安定な関数依存を経由して再実行されうる
16
+ const fetchList = useCallback(async () => {
17
+ await loadItems()
18
+ }, [setIsLoading, errorPage])
19
+
20
+ useEffect(() => {
21
+ fetchList()
22
+ }, [fetchList])
23
+
24
+ // OK - 初期表示の一度きりロードとして固定
25
+ useEffect(() => {
26
+ void loadItemsOnMount()
27
+ // mount-only initial load
28
+ // eslint-disable-next-line react-hooks/exhaustive-deps
29
+ }, [])
30
+ ```
31
+
32
+ ## Context と Provider value
33
+
34
+ Context の `value={{ ... }}` は Provider の再描画ごとに新しい参照になる。Context から受け取った関数を `useEffect` の依存に置くと、利用側が意図せず再実行ループに入ることがある。
35
+
36
+ | 基準 | 判定 |
37
+ |------|------|
38
+ | Context 由来関数の参照安定性を確認せず、effect 依存に入れる | REJECT |
39
+ | Provider 側で value の安定性が保証されていないのに mount effect の依存に使う | REJECT |
40
+ | Context 関数はイベントハンドラから使い、初期取得は mount-only に閉じる | OK |
41
+ | Provider 側で value 安定化を行い、再取得条件も仕様で定義する | OK |
42
+
43
+ ```tsx
44
+ // REJECT - Context 関数をそのまま初期取得 effect の依存に使う
45
+ const { setIsLoading, errorPage } = useAppContext()
46
+ useEffect(() => {
47
+ void loadInitialData(setIsLoading, errorPage)
48
+ }, [setIsLoading, errorPage])
49
+
50
+ // OK - 初期取得は mount-only、Context 関数は内部で使う
51
+ const { setIsLoading, errorPage } = useAppContext()
52
+ useEffect(() => {
53
+ void loadInitialData({ setIsLoading, errorPage })
54
+ // mount-only initial load
55
+ // eslint-disable-next-line react-hooks/exhaustive-deps
56
+ }, [])
57
+ ```
58
+
59
+ ## 初期表示ロード
60
+
61
+ 初期表示ロードは「画面を開いたときに1回だけ必要な処理」か、「状態変化に応じて再実行する処理」かを区別する。後者でない限り、再取得のトリガーは明示的なユーザー操作や URL/検索条件の変化に限定する。
62
+
63
+ | 条件 | 推奨 |
64
+ |------|------|
65
+ | 初期表示で一覧を1回読むだけ | mount-only effect |
66
+ | フィルタ、ページング、URL パラメータ変更で再取得 | その状態を依存に明示 |
67
+ | loading state 更新で再取得が走る | REJECT |
68
+ | message 表示や dialog 開閉で再取得が走る | REJECT |
69
+
70
+ ## custom hook の責務
71
+
72
+ React custom hook は「React の state/effect/ref を使う状態遷移」に限定する。純粋計算だけなら custom hook ではなく関数モジュールでよい。
73
+
74
+ | 基準 | 判定 |
75
+ |------|------|
76
+ | React の state/effect を使わないのに `use*` と命名する | 警告 |
77
+ | 純関数群を custom hook として扱う | 警告 |
78
+ | stateful な UI 制御は custom hook に、純粋計算は function module に分ける | OK |
79
+ | hook が JSX を返す | REJECT |
80
+
81
+ ## exhaustive-deps の扱い
82
+
83
+ `react-hooks/exhaustive-deps` は無条件で従うものではなく、effect の意味を壊さない範囲で従う。mount-only 初期化で依存を増やすと挙動が壊れる場合は、理由を残して抑制する。
84
+
85
+ | 基準 | 判定 |
86
+ |------|------|
87
+ | ルールに従うためだけに不要な再実行依存を追加する | REJECT |
88
+ | lint 抑制を無言で入れる | 警告 |
89
+ | mount-only の理由をコメントで説明して抑制する | OK |
90
+ | 再実行が必要な effect なのに `[]` にする | REJECT |
@@ -0,0 +1,41 @@
1
+ ```markdown
2
+ # タスク計画
3
+
4
+ ## 元の要求
5
+ {ユーザーの要求をそのまま記載}
6
+
7
+ ## 分析結果
8
+
9
+ ### 目的
10
+ {達成すべきこと}
11
+
12
+ ### 参照資料の調査結果(参照資料がある場合)
13
+ {参照資料の実装アプローチの概要と、現在の実装との主要な差異}
14
+
15
+ ### デザイン要素の判定(デザイン参照がある場合)
16
+ | 要素 | 変更要/不要 | 根拠 |
17
+ |------|-------------|------|
18
+
19
+ ### スコープ
20
+ {影響範囲}
21
+
22
+ ### 検討したアプローチ(設計判断がある場合)
23
+ | アプローチ | 採否 | 理由 |
24
+ |-----------|------|------|
25
+
26
+ ### 実装アプローチ
27
+ {どう進めるか}
28
+
29
+ ## 実装ガイドライン(設計が必要な場合のみ)
30
+ - {Coderが実装時に従うべき指針}
31
+
32
+ ## スコープ外(項目がある場合のみ)
33
+ | 項目 | 除外理由 |
34
+ |------|---------|
35
+
36
+ デザイン参照がある場合:
37
+ - {除外した要素名と、除外理由・代替しない理由}
38
+
39
+ ## 確認事項(あれば)
40
+ - {不明点や確認が必要な点}
41
+ ```
@@ -22,6 +22,14 @@
22
22
  ### 実装アプローチ
23
23
  {どう進めるか}
24
24
 
25
+ ### 到達経路・起動条件(利用者向け機能の追加/変更がある場合)
26
+ | 項目 | 内容 |
27
+ |------|------|
28
+ | 利用者が到達する入口 | {メニュー/route/ボタン/リンク/外部呼び出し など。なければ「入口なし」と明記} |
29
+ | 更新が必要な呼び出し元・配線 | {更新対象のファイルや層} |
30
+ | 起動条件 | {認証、権限、URL条件、フラグなど} |
31
+ | 未対応項目 | {残っている配線があれば明記。なければ「なし」} |
32
+
25
33
  ## 実装ガイドライン(設計が必要な場合のみ)
26
34
  - {Coderが実装時に従うべき指針}
27
35
 
@@ -204,13 +204,35 @@ return storage.upload(file, options)
204
204
  - 50行超のUI/ロジック → 分離
205
205
  - 複数の責務がある → 分離
206
206
 
207
+ ### 機能追加時の到達経路
208
+
209
+ 新しい機能や画面を追加したら、実装と同じ変更セットで利用者が到達する経路も更新する。フレームワーク固有の配線方法は各ドメイン知識に従う。
210
+
211
+ | 基準 | 判定 |
212
+ |------|------|
213
+ | 新機能の実装だけ追加し、呼び出し側・導線・到達経路の更新を忘れる | REJECT |
214
+ | 利用者がどこから到達するか未定義のまま公開機能を追加する | REJECT |
215
+ | 実装追加と同じ変更セットで導線と到達経路を更新する | OK |
216
+ | 一時導線を追加した場合、その用途と除去条件を記録する | OK |
217
+
207
218
  ### 依存の方向
208
219
 
209
220
  - 上位層 → 下位層(逆方向禁止)
210
221
  - データ取得はルート(View/Controller)で行い、子に渡す
211
222
  - 子は親のことを知らない
212
223
 
213
- ### 状態管理
224
+ ### 実行条件と依存条件の一致
225
+
226
+ 依存やトリガーは、実際にその処理を再実行したい条件と一致させる。静的ルールや実装都合のためだけに依存を増やし、意図しない再実行を起こさない。
227
+
228
+ | 基準 | 判定 |
229
+ |------|------|
230
+ | lint や実装都合だけで依存やトリガーを増やし、再実行ループを生む | REJECT |
231
+ | 無関係な state 変化や callback 再生成で初期処理が再実行される | REJECT |
232
+ | 再実行条件が URL・フィルタ・明示的更新操作などの仕様に対応している | OK |
233
+ | 初期化と再取得のトリガーを分けて設計している | OK |
234
+
235
+ ## 状態管理
214
236
 
215
237
  - 状態は使う場所に閉じ込める
216
238
  - 子は状態を直接変更しない(イベントを親に通知)
@@ -0,0 +1,52 @@
1
+ # デザイン計画ポリシー
2
+
3
+ デザイン参照が指定されている計画では、要素の棚卸しとスコープ判断を曖昧にしない。
4
+
5
+ ## 原則
6
+
7
+ | 原則 | 基準 |
8
+ |------|------|
9
+ | 参照優先 | デザイン参照がある場合、計画は参照資料を一次情報として扱う |
10
+ | 要素単位の棚卸し | 画面単位ではなく要素単位で差分を確認する |
11
+ | 変更要否の明示 | 各要素について変更要/不要を根拠付きで示す |
12
+ | スコープ外の説明責任 | デザインにある要素を外す場合は除外理由を明示する |
13
+ | 実装境界の明確化 | 実装対象と非対象の境界を計画段階で固定する |
14
+
15
+ ## 適用条件
16
+
17
+ このポリシーはタスク指示書または参照資料にデザイン参照が含まれている計画に適用する。デザイン参照がない計画には適用しない。
18
+
19
+ ## 判定基準
20
+
21
+ | 基準 | 判定 |
22
+ |------|------|
23
+ | デザイン参照の主要要素を列挙せず計画している | REJECT |
24
+ | 要素ごとの変更要/不要がない | REJECT |
25
+ | 「今回は一覧のみ」など、要素名なしにスコープを狭めている | REJECT |
26
+ | スコープ外要素の除外理由がない | REJECT |
27
+ | デザイン参照の解釈が曖昧だが、判断根拠を残している | OK |
28
+
29
+ ## 計画時の判断
30
+
31
+ 計画では、デザイン参照に含まれる要素を落とさず棚卸しする。
32
+
33
+ 棚卸し時の観点:
34
+ - 主要セクションだけでなく、詳細導線、モーダル、操作要素、状態表示まで確認する
35
+ - 各要素ごとに、現行実装との差分と変更要否を記録する
36
+ - 既存実装を維持する場合も、対象ファイルと根拠を示す
37
+
38
+ ## スコープ判断
39
+
40
+ デザイン参照の要素をスコープ外にする場合は、少なくとも以下を計画に残す。
41
+
42
+ - 除外する要素名
43
+ - 除外理由
44
+ - 今回代替実装を採らない理由
45
+
46
+ デザイン参照に含まれる要素を、根拠なく「別タスク」とみなして切り離さない。
47
+
48
+ ## 禁止事項
49
+
50
+ - **画面単位の雑な要約だけで計画すること** - 要素の抜け漏れが発生する
51
+ - **根拠なしに参照資料の意図を狭めること** - 実装とレビューの前提がずれる
52
+ - **スコープ外の説明を省略すること** - 後続ムーブメントで判断不能になる
@@ -66,6 +66,37 @@ test('ユーザーが存在しない場合、NotFoundエラーを返す', async
66
66
  - Arrange-Act-Assert パターン(Given-When-Then と同義)
67
67
  - マジックナンバー・マジックストリングを避ける
68
68
 
69
+ ## 再取得ループのリグレッション
70
+
71
+ 画面の初期取得がある場合、無関係な再レンダ、loading 切替、Context callback の参照変化で API が再実行されないことをテストで担保する。
72
+
73
+ | 基準 | 判定 |
74
+ |------|------|
75
+ | 初期取得バグ修正に対し、重複 API 呼び出しの回帰テストがない | REJECT |
76
+ | 1回呼ばれたことだけを確認し、再レンダ後の安定性を見ていない | 警告 |
77
+ | rerender や state 更新後も呼び出し回数が増えないことを検証している | OK |
78
+
79
+ ## 到達経路のリグレッション
80
+
81
+ 利用者向け機能や画面を追加・変更した場合、利用者がその機能へ到達できることをテストまたは同等の検証で担保する。
82
+
83
+ | 基準 | 判定 |
84
+ |------|------|
85
+ | 新規の画面・機能を追加したのに、到達経路や起動条件の検証がない | REJECT |
86
+ | 画面ファイル単体の描画だけを見て、入口からの到達確認をしていない | 警告 |
87
+ | route、メニュー、ボタン、リンク、外部呼び出しなど実際の入口から対象機能へ到達できることを確認している | OK |
88
+
89
+ ## UIライブラリ統合のリグレッション
90
+
91
+ DataGrid、日付ピッカー、仮想リスト、チャートなど、外部 UI ライブラリの主要コンポーネントを導入・変更した場合は、実コンポーネントをマウントするテストでクラッシュしないことを担保する。
92
+
93
+ | 基準 | 判定 |
94
+ |------|------|
95
+ | 外部 UI ライブラリの主要コンポーネントを追加・変更したのに、実マウントの回帰テストがない | REJECT |
96
+ | ライブラリの props 整合性を、浅いモックや存在確認だけで済ませている | 警告 |
97
+ | route から対象画面を描画し、主要 UI が例外なくマウントされることを確認している | OK |
98
+ | 主要 UI コンポーネント単体でも、代表的な props で実 render している | OK |
99
+
69
100
  ## テスト戦略
70
101
 
71
102
  - ロジックにはユニットテスト、境界にはインテグレーションテストを優先
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - backend
@@ -51,7 +53,7 @@ movements:
51
53
  output_contracts:
52
54
  report:
53
55
  - name: plan.md
54
- format: plan
56
+ format: plan-frontend
55
57
  - name: implement
56
58
  edit: true
57
59
  persona: coder
@@ -37,6 +37,8 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
42
44
  - backend
@@ -60,7 +62,7 @@ movements:
60
62
  output_contracts:
61
63
  report:
62
64
  - name: plan.md
63
- format: plan
65
+ format: plan-frontend
64
66
  - name: implement
65
67
  edit: true
66
68
  persona: coder
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - backend
@@ -50,7 +52,7 @@ movements:
50
52
  output_contracts:
51
53
  report:
52
54
  - name: plan.md
53
- format: plan
55
+ format: plan-frontend
54
56
  - name: implement
55
57
  edit: true
56
58
  persona: coder
@@ -37,6 +37,8 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
42
44
  - backend
@@ -63,7 +65,7 @@ movements:
63
65
  output_contracts:
64
66
  report:
65
67
  - name: plan.md
66
- format: plan
68
+ format: plan-frontend
67
69
  - name: write_tests
68
70
  edit: true
69
71
  persona: coder
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - security
@@ -49,7 +51,7 @@ movements:
49
51
  output_contracts:
50
52
  report:
51
53
  - name: plan.md
52
- format: plan
54
+ format: plan-frontend
53
55
  - name: implement
54
56
  edit: true
55
57
  persona: coder
@@ -37,8 +37,11 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
44
+ - react
42
45
  - architecture
43
46
  provider_options:
44
47
  claude:
@@ -58,7 +61,7 @@ movements:
58
61
  output_contracts:
59
62
  report:
60
63
  - name: plan.md
61
- format: plan
64
+ format: plan-frontend
62
65
  - name: write_tests
63
66
  edit: true
64
67
  persona: coder
@@ -67,6 +70,7 @@ movements:
67
70
  - testing
68
71
  knowledge:
69
72
  - frontend
73
+ - react
70
74
  - architecture
71
75
  - unit-testing
72
76
  - e2e-testing
@@ -110,6 +114,7 @@ movements:
110
114
  session: refresh
111
115
  knowledge:
112
116
  - frontend
117
+ - react
113
118
  - security
114
119
  - architecture
115
120
  provider_options:
@@ -175,6 +180,7 @@ movements:
175
180
  session: refresh
176
181
  knowledge:
177
182
  - frontend
183
+ - react
178
184
  - security
179
185
  - architecture
180
186
  provider_options:
@@ -222,6 +228,7 @@ movements:
222
228
  knowledge:
223
229
  - architecture
224
230
  - frontend
231
+ - react
225
232
  provider_options:
226
233
  claude:
227
234
  allowed_tools:
@@ -244,7 +251,9 @@ movements:
244
251
  policy:
245
252
  - review
246
253
  - design-fidelity
247
- knowledge: frontend
254
+ knowledge:
255
+ - frontend
256
+ - react
248
257
  provider_options:
249
258
  claude:
250
259
  allowed_tools:
@@ -350,6 +359,7 @@ movements:
350
359
  - design-fidelity
351
360
  knowledge:
352
361
  - frontend
362
+ - react
353
363
  - security
354
364
  - architecture
355
365
  provider_options:
@@ -406,6 +416,7 @@ movements:
406
416
  - design-fidelity
407
417
  knowledge:
408
418
  - frontend
419
+ - react
409
420
  - security
410
421
  - architecture
411
422
  provider_options:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "takt",
3
- "version": "0.32.1",
3
+ "version": "0.32.2",
4
4
  "description": "TAKT: TAKT Agent Koordination Topology - AI Agent Piece Orchestration",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -63,7 +63,7 @@
63
63
  ],
64
64
  "dependencies": {
65
65
  "@anthropic-ai/claude-agent-sdk": "^0.2.71",
66
- "@openai/codex-sdk": "^0.112.0",
66
+ "@openai/codex-sdk": "^0.114.0",
67
67
  "@opencode-ai/sdk": ">=1.2.10 <1.3.0",
68
68
  "chalk": "^5.3.0",
69
69
  "commander": "^12.1.0",