@code-migration/wow-migrator 0.2.0 → 0.2.3

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 (25) hide show
  1. package/package.json +1 -1
  2. package/skills/android-project-analyst/SKILL.md +4 -4
  3. package/skills/android-project-analyst/bind.md +2 -2
  4. package/skills/android-project-analyst/output-contract.md +104 -6
  5. package/skills/android-project-analyst/roles/presentation-resource.md +51 -13
  6. package/skills/android-project-analyst/workflow.md +5 -5
  7. package/skills/android-to-kmp-migrator/SKILL.md +14 -7
  8. package/skills/android-to-kmp-migrator/bind.md +12 -0
  9. package/skills/android-to-kmp-migrator/output-contract.md +39 -16
  10. package/skills/android-to-kmp-migrator/roles/completion-report.md +3 -2
  11. package/skills/android-to-kmp-migrator/roles/global-migration-phase.md +76 -13
  12. package/skills/android-to-kmp-migrator/roles/migration-planning-gate.md +1 -0
  13. package/skills/android-to-kmp-migrator/roles/migration-prep.md +6 -0
  14. package/skills/android-to-kmp-migrator/roles/migration-verification.md +5 -3
  15. package/skills/android-to-kmp-migrator/roles/migration-workspace-state.md +1 -1
  16. package/skills/android-to-kmp-migrator/roles/module-node-review-fix.md +1 -1
  17. package/skills/android-to-kmp-migrator/roles/target-project-assistant.md +20 -5
  18. package/skills/android-to-kmp-migrator/workflow.md +16 -4
  19. package/skills/kmp-test-validator/SKILL.md +3 -3
  20. package/skills/kmp-test-validator/bind.md +3 -2
  21. package/skills/kmp-test-validator/dependencies.yaml +15 -2
  22. package/skills/kmp-test-validator/output-contract.md +92 -8
  23. package/skills/kmp-test-validator/roles/validation-code-gate.md +53 -7
  24. package/skills/kmp-test-validator/roles/validation-workspace-state.md +7 -2
  25. package/skills/kmp-test-validator/workflow.md +3 -1
@@ -22,6 +22,7 @@ Migration starts only when analyst handoff package **`P6`** (see `android-projec
22
22
  Per legacy `module_id`, migrator may consume:
23
23
 
24
24
  - `modules/<module_id>/representation/module_representation.json`
25
+ - `modules/<module_id>/representation/module_ui_representation.md` (standalone Required Markdown UI trees)
25
26
  - `modules/<module_id>/dimension_index.json`
26
27
  - dimension JSON artifacts under `node-results/<dimension>/`
27
28
 
@@ -127,6 +128,19 @@ output_root = <output_dir or ~/.a2c_agents/migration>/android-to-kmp-migrator
127
128
  - **`incremental_build` is forbidden** in `migration-verification` during migrator runs.
128
129
  - **Full compile/build/preview/behavioral tests** are delegated to **`kmp-test-validator`** after `migration_report.*` handoff package **`V0`** is ready.
129
130
 
131
+ ### Target KMP Edit Mandate (mandatory)
132
+
133
+ - **Purpose**: `android-project-analyst` **P6** supplies Legacy Android understanding only. The migrator MUST translate that understanding into **concrete edits** in the existing KMP target at `kmp_target_project_path`.
134
+ - **Analysis alone is not migration**: planning gates, prep handoffs, TPA alignment, and representations do **not** satisfy migration without target file changes where tasks require implementation.
135
+ - **Edit-owning roles** (each MUST record paths under `kmp_target_project_path`):
136
+ - `migration-prep` → `migration_prep.json` → `changed_files[]` (optional scaffold when planning allows)
137
+ - `module-implementation` `ui` / `logic` → `module_implementation_ui.json` / `module_implementation_logic.json` → `changed_files[]`, `target_edit_summary`
138
+ - `module-node-review-fix` `fix` → `module_node_fix.json` → `changed_files[]`
139
+ - `global-migration-phase` `integrate` → `global_system_integration.json` → `integration_changed_files[]`, `entry_point_wiring[]`
140
+ - **Read-only on target**: `target-project-assistant`, `migration-planning-gate`, `migration-verification`, `global-migration-phase` `align`, `completion-report`.
141
+ - **Fail closed**: when `migration_planning_gate.json` → `planning.tasks[]` includes file-changing work for a module, package **M3** is false if both `module_implementation_ui.json` and `module_implementation_logic.json` have empty `changed_files[]` or paths resolve outside `kmp_target_project_path`.
142
+ - **Aggregation**: `migration_report.json` MUST include `target_changed_files[]` — deduplicated union of all module and global integrate target paths with `owning_role` and `migration_module_id` (or `global` for integrate).
143
+
130
144
  ---
131
145
 
132
146
  ## Write Order (Leader Schedule)
@@ -183,8 +197,9 @@ output_root = <output_dir or ~/.a2c_agents/migration>/android-to-kmp-migrator
183
197
  | `migration-planning-gate/migration_planning_gate.json` |
184
198
  | `migration-prep/migration_prep.json` |
185
199
  | `module-implementation/ui/module_implementation_ui.json`, `module-implementation/logic/module_implementation_logic.json` + approved reviews |
186
- | `migration_verification.json` with all required `check_ids` passed |
187
- | `module_completion_record.json` with `ui_restoration` and `logic_restoration` passed |
200
+ | **Target edits**: when planning tasks require file changes, both UI and logic implementation artifacts MUST have non-empty `changed_files[]` under `kmp_target_project_path` |
201
+ | `migration_verification.json` with all required `check_ids` passed (including `target_files_exist` when `changed_files` non-empty) |
202
+ | `module_completion_record.json` with `ui_restoration` and `logic_restoration` passed and `target_changed_files[]` listing module target paths |
188
203
 
189
204
  ### Package `M4` — All modules migrated
190
205
 
@@ -198,7 +213,7 @@ output_root = <output_dir or ~/.a2c_agents/migration>/android-to-kmp-migrator
198
213
  | Required paths |
199
214
  |---|
200
215
  | Package `M4` |
201
- | `global/node-results/global-migration-phase/integrate/global_system_integration.json` |
216
+ | `global/node-results/global-migration-phase/integrate/global_system_integration.json` with non-empty `integration_changed_files[]` when cross-module glue or entry-point wiring is required |
202
217
  | `global_migration_representation.json` |
203
218
 
204
219
  ### Package `M6` — Post-integration alignment passed
@@ -206,15 +221,15 @@ output_root = <output_dir or ~/.a2c_agents/migration>/android-to-kmp-migrator
206
221
  | Required paths |
207
222
  |---|
208
223
  | Package `M5` |
209
- | `global/node-results/global-migration-phase/align/post_integration_alignment.json` with `alignment_verdict: passed \| passed_with_assumptions` |
210
- | `report/alignment_report.json` |
224
+ | `global/node-results/global-migration-phase/align/post_integration_alignment.json` with `alignment_verdict: passed \| passed_with_assumptions` and `global_alignment_results.entry_points.verdict: passed \| passed_with_assumptions` |
225
+ | `report/alignment_report.json` (includes entry point alignment verdict) |
211
226
 
212
227
  ### Package `V0` — kmp-test-validator entry (downstream)
213
228
 
214
229
  | Required paths |
215
230
  |---|
216
231
  | Package `M6` |
217
- | `report/migration_report.json` |
232
+ | `report/migration_report.json` with non-empty `target_changed_files[]` when any scheduled module required implementation |
218
233
  | `global_migration_representation.json` |
219
234
  | analyst `SPEC/*` paths recorded in `run_manifest.json` |
220
235
 
@@ -249,7 +264,7 @@ Machine lookup: `migration_module_id` → `legacy_module_id`, `module_output_roo
249
264
 
250
265
  ### `target_alignment_revision.json` (Target-Project-Assistant)
251
266
 
252
- `target_project_layout`, `reusable_components[]`, `anchor_points[]` (legacy scope → target path), `revised_alignment[]`, `integration_constraints[]`, `consultation_log[]`.
267
+ `target_project_layout`, `reusable_components[]`, `anchor_points[]` (legacy scope → target path), `entry_point_anchors[]` (Legacy Android `entry_points[]` + manifest launcher → KMP app-shell path/symbol), `revised_alignment[]`, `integration_constraints[]`, `consultation_log[]`.
253
268
 
254
269
  ### `target_module_anchors.json` (per module)
255
270
 
@@ -261,8 +276,10 @@ Machine lookup: `migration_module_id` → `legacy_module_id`, `module_output_roo
261
276
  {
262
277
  "migration_module_id": "",
263
278
  "legacy_module_id": "",
279
+ "kmp_target_project_path": "",
264
280
  "completion_status": "completed | needs_rerun | blocked",
265
281
  "verification_ref": "",
282
+ "target_changed_files": [{ "path": "", "owning_role": "migration-prep | module-implementation | module-node-review-fix", "mode": "ui | logic | fix | null" }],
266
283
  "ui_restoration": { "status": "passed | failed", "gaps": [] },
267
284
  "logic_restoration": { "status": "passed | failed", "gaps": [] },
268
285
  "upstream_match": { "module_representation_path": "", "matched_claims": [], "missing_claims": [] },
@@ -273,6 +290,7 @@ Machine lookup: `migration_module_id` → `legacy_module_id`, `module_output_roo
273
290
 
274
291
  ### `migration_verification.json` — required `check_ids` (migrator only)
275
292
 
293
+ - `target_files_exist` — every path in aggregated module `changed_files[]` exists on disk under `kmp_target_project_path`
276
294
  - `source_set` — files in allowed source sets
277
295
  - `syntax_check` — Kotlin/syntax validity on changed files (static; no full project compile)
278
296
  - `api_contract` — API/model shape vs planning + analyst data contracts
@@ -284,11 +302,11 @@ Machine lookup: `migration_module_id` → `legacy_module_id`, `module_output_roo
284
302
 
285
303
  ### `global_system_integration.json`
286
304
 
287
- `kmp_target_project_path`, `target_edit_summary`, `assembly_order`, `ui_transition_edges[]`, `control_logic_handoffs[]`, `data_call_edges[]`, `shared_contracts_applied[]`, `integration_changed_files[]` (target glue paths only), evidence paths from analyst cross-module globals. Integrate mode MUST edit the target KMP project; module body changes belong in `module-implementation`.
305
+ `kmp_target_project_path`, `target_edit_summary`, `assembly_order`, `ui_transition_edges[]`, `control_logic_handoffs[]`, `data_call_edges[]`, `entry_point_wiring[]` (Android entry → KMP shell wiring with `wiring_kind` and `status`), `shared_contracts_applied[]`, `integration_changed_files[]` (target glue paths only), evidence paths from analyst cross-module globals and per-module `presentation_resource` `entry_points[]`. Integrate mode MUST edit the target KMP project and wire app-shell entry points; module body changes belong in `module-implementation`.
288
306
 
289
307
  ### `post_integration_alignment.json` (analysis only — no target edits)
290
308
 
291
- `alignment_verdict`, `module_alignment_results[]`, `global_alignment_results`, `omissions[]`, `poor_restoration[]`, `rerun_modules[]`, `comparison_evidence[]` (analyst path vs target path pairs).
309
+ `alignment_verdict`, `module_alignment_results[]`, `global_alignment_results` (including `entry_points.verdict`), `entry_point_alignment_results[]`, `omissions[]`, `poor_restoration[]`, `rerun_modules[]`, `rerun_global_integration` (true when entry point alignment fails), `comparison_evidence[]` (analyst path vs target path pairs). Entry point alignment MUST pass (`global_alignment_results.entry_points.verdict: passed | passed_with_assumptions`) for package **M6**.
292
310
 
293
311
  ### `migration_planning_gate.json`
294
312
 
@@ -304,7 +322,7 @@ UI mode and logic mode outputs under `module-implementation/ui/` and `module-imp
304
322
 
305
323
  ### `alignment_report.json`
306
324
 
307
- Human/agent-readable synthesis of align mode; routes reruns to `migration_module_id` or `global-migration-phase integrate`.
325
+ Human/agent-readable synthesis of align mode; includes `entry_point_alignment_results` summary; routes reruns to `migration_module_id` or `global-migration-phase integrate` when entry points or cross-module glue fail.
308
326
 
309
327
  ---
310
328
 
@@ -312,12 +330,14 @@ Human/agent-readable synthesis of align mode; routes reruns to `migration_module
312
330
 
313
331
  1. Verify analyst package `P6` before `MG0` completes.
314
332
  2. Dispatch `target-project-assistant` for all target-project questions; other roles MUST reference TPA artifacts instead of re-analyzing target ad hoc.
315
- 3. Write `module_completion_record.json` after each module passes `migration-verification`.
316
- 4. Run `global-migration-phase` `integrate` only after package `M4`.
317
- 5. Run `global-migration-phase` `align` only after integrate; **no code changes** in align mode.
318
- 6. Dispatch only role IDs listed in [SKILL.md](SKILL.md).
319
- 7. Set `handoff_gates` (`M0`–`M6`, `V0`) in workspace ledger and `migration_report.json`.
320
- 8. **MUST** invoke `kmp-test-validator` when `V0` is true (MG17). Do not end the migration workflow without validator dispatch or explicit validator blockers in `migration_report.json`.
333
+ 3. Ensure each module produces **target KMP edits** via `module-implementation` (and optional `migration-prep` / `module-node-review-fix` `fix`) before writing `module_completion_record.json`.
334
+ 4. Write `module_completion_record.json` after each module passes `migration-verification`; include aggregated `target_changed_files[]` for the module.
335
+ 5. Run `global-migration-phase` `integrate` only after package `M4`; integrate MUST edit target glue when assembly requires it.
336
+ 6. Run `global-migration-phase` `align` only after integrate; **no code changes** in align mode.
337
+ 7. Dispatch only role IDs listed in [SKILL.md](SKILL.md).
338
+ 8. Set `handoff_gates` (`M0`–`M6`, `V0`) in workspace ledger and `migration_report.json`.
339
+ 9. Aggregate all module and global integrate target paths into `migration_report.json` → `target_changed_files[]`.
340
+ 10. **MUST** invoke `kmp-test-validator` when `V0` is true (MG17). Do not end the migration workflow without validator dispatch or explicit validator blockers in `migration_report.json`.
321
341
 
322
342
  ## Invalid Artifact Handling
323
343
 
@@ -330,3 +350,6 @@ Human/agent-readable synthesis of align mode; routes reruns to `migration_module
330
350
  | `module_completion_record` failed | Re-enter module loop from routed node |
331
351
  | `post_integration_alignment` omissions | Rerun listed modules or `global-migration-phase integrate` |
332
352
  | Full build requested during migrator | Reject — route to `kmp-test-validator` |
353
+ | Planning complete but `changed_files[]` empty when tasks require edits | `needs_rerun` → `module-implementation` or `migration-prep` |
354
+ | `changed_files` paths outside `kmp_target_project_path` | `blocked` — reject artifact; rerun owning role |
355
+ | `target_files_exist` failed | `needs_rerun` → owning edit role |
@@ -24,11 +24,12 @@ Forbidden:
24
24
  - Do not fix implementation gaps.
25
25
  - Do not mark validation passed.
26
26
  - Do not run report mode when module/global representations are missing.
27
- - Do not run report mode when package `M6` is false (`global-migration-phase align` / `alignment_report` missing or failed).
27
+ - Do not run report mode when package `M6` is false (`global-migration-phase align` / `alignment_report` missing or failed, including `global_alignment_results.entry_points.verdict` failed).
28
28
  - Do not mark `ready_for_validation` when `handoff_gates.V0` is false.
29
29
  - Do not treat report mode success as final migration completion — Leader must still dispatch `kmp-test-validator` at MG17.
30
30
 
31
31
  Mandatory:
32
+ - Report mode MUST fail when scheduled modules required implementation but `target_changed_files[]` would be empty.
32
33
  - Validate `mode`, `migration_module_id`, module/global representation paths, workspace state, and exact `output_dir`.
33
34
  - Readiness output path is `<module_root>/node-results/completion-report/readiness` or `<global_dir>/node-results/completion-report/readiness`.
34
35
  - Report output path is `<output_root>/report`.
@@ -60,7 +61,7 @@ Shared return shape applies.
60
61
 
61
62
  - `completion_readiness.json`: machine-routable readiness artifact containing requirement coverage, migration invariants, module/global representation references when applicable, verification/review status, validation inputs readiness, rerun requests, and blockers.
62
63
  - `completion_readiness.md`: agent-readable readiness handoff containing coverage tables, invariant checks, incomplete markers, rerun routing, blockers, and whether representation/report gates may proceed.
63
- - `migration_report.json`: machine-routable final migration handoff containing migration scope, source/target paths, analyst_output_root, upstream_analyst_index, `handoff_gates` (`M0`–`M6`, `V0`), `handoff_package: V0`, module representations, global representation, `alignment_report` path, `global_system_integration` path, changed files by role, coverage summary, validation inputs for kmp-test-validator, `validation_deferred_to: kmp-test-validator`, limitations, blockers.
64
+ - `migration_report.json`: machine-routable final migration handoff containing migration scope, source/target paths, analyst_output_root, upstream_analyst_index, `handoff_gates` (`M0`–`M6`, `V0`), `handoff_package: V0`, module representations, global representation, `alignment_report` path, `global_system_integration` path, `target_changed_files[]` (deduplicated union of all module and global integrate target paths with `owning_role`), changed files by role, coverage summary, validation inputs for kmp-test-validator, `validation_deferred_to: kmp-test-validator`, limitations, blockers.
64
65
  - `migration_report.md`: agent-readable final migration report for `kmp-test-validator` and follow-up agents, preserving exact artifact paths, changed-file ownership, validation handoff context, limitations, and blockers.
65
66
  - Report mode success signals Leader to **mandatorily invoke** `kmp-test-validator` — migration is incomplete without validator dispatch.
66
67
 
@@ -2,9 +2,9 @@
2
2
 
3
3
  ## Identity
4
4
 
5
- > *"After all modules complete, I finish migration in the target KMP project — integrate cross-module wiring by editing target glue files, then audit alignment read-only."*
5
+ > *"After all modules complete, I finish migration in the target KMP project — integrate cross-module wiring by editing target glue files, align Android entry points with KMP app shell, then audit alignment read-only."*
6
6
 
7
- You are the `global-migration-phase` node subagent. Your job is **target KMP project completion** after per-module implementation: wire the migrated system together inside `kmp_target_project_path`, then verify analyst evidence against the migrated target without rewriting module bodies in align mode.
7
+ You are the `global-migration-phase` node subagent. Your job is **target KMP project completion** after per-module implementation: wire the migrated system together inside `kmp_target_project_path`, **ensure KMP entry points match Legacy Android launch and routing evidence**, then verify analyst evidence against the migrated target without rewriting module bodies in align mode.
8
8
 
9
9
  **Integrate mode edits the target KMP project.** **Align mode does not.**
10
10
 
@@ -27,12 +27,15 @@ You are the `global-migration-phase` node subagent. Your job is **target KMP pro
27
27
 
28
28
  **Integrate mode**:
29
29
  - Target KMP glue files edited/created to wire `ui_transition_edges`, `control_logic_handoffs`, `data_call_edges` from analyst cross-module globals and per-module migration representations.
30
- - `global_system_integration.json` / `.md` with `kmp_target_project_path`, `integration_changed_files`, `target_edit_summary`, wired edges, shared contracts applied, evidence paths, blockers.
30
+ - **Entry point wiring complete**: KMP app shell, launcher/root navigation, startup graph, deep-link handlers, and platform entry wrappers match Legacy Android entry evidence from analyst `presentation_resource` `entry_points[]`, manifest launcher intent, and TPA `entry_point_anchors[]`.
31
+ - `global_system_integration.json` / `.md` with `kmp_target_project_path`, `integration_changed_files`, `target_edit_summary`, wired edges, `entry_point_wiring[]`, shared contracts applied, evidence paths, blockers.
31
32
  - `integration_changed_files` limited to glue under `kmp_target_project_path`; module body gaps routed via `rerun_requests` to `module-implementation` or `migration-prep`.
32
33
 
33
34
  **Align mode**:
34
35
  - True comparison: analyst artifacts vs **migrated target KMP files** on disk; `alignment_verdict` explicit.
36
+ - **Entry point alignment verified**: each Legacy Android entry point has a resolved KMP counterpart; launch flow, root/start destination, deep links, and Application/startup hooks are compared with `entry_point_alignment_results[]` and folded into `global_alignment_results.entry_points`.
35
37
  - `comparison_evidence[]` pairs analyst claim paths with resolved target file paths under `kmp_target_project_path`.
38
+ - Entry point mismatches → `rerun_global_integration: true` (integrate must rewire app shell); module-scoped entry screens → `rerun_modules[]`.
36
39
  - `rerun_modules[]` and `rerun_global_integration` when omissions found.
37
40
  - Write `alignment_report.*` under `report_dir`. **Zero target edits.**
38
41
 
@@ -74,6 +77,20 @@ You are the `global-migration-phase` node subagent. Your job is **target KMP pro
74
77
  "control_logic_handoffs": [],
75
78
  "data_call_edges": [],
76
79
  "shared_contracts_applied": [],
80
+ "entry_point_wiring": [
81
+ {
82
+ "legacy_entry_id": "",
83
+ "legacy_name": "",
84
+ "legacy_type": "Application | Activity | Fragment | Composable | NavGraph | Router | DeepLink",
85
+ "legacy_source_path": "",
86
+ "legacy_route_or_action": "",
87
+ "target_path": "",
88
+ "target_symbol": "",
89
+ "wiring_kind": "launcher | root_nav | deep_link | startup_hook | platform_entry | notification_tap",
90
+ "status": "wired | partial | deferred",
91
+ "evidence_paths": []
92
+ }
93
+ ],
77
94
  "integration_changed_files": [],
78
95
  "rerun_requests": [],
79
96
  "blocking_gaps": []
@@ -93,7 +110,30 @@ You are the `global-migration-phase` node subagent. Your job is **target KMP pro
93
110
  "output_dir": "",
94
111
  "alignment_verdict": "passed | passed_with_assumptions | failed",
95
112
  "module_alignment_results": [],
96
- "global_alignment_results": {},
113
+ "global_alignment_results": {
114
+ "entry_points": {
115
+ "verdict": "passed | passed_with_assumptions | failed",
116
+ "aligned_count": 0,
117
+ "total_count": 0,
118
+ "gaps": []
119
+ }
120
+ },
121
+ "entry_point_alignment_results": [
122
+ {
123
+ "legacy_entry_id": "",
124
+ "legacy_name": "",
125
+ "legacy_type": "",
126
+ "legacy_source_path": "",
127
+ "target_path": "",
128
+ "target_symbol": "",
129
+ "alignment_status": "aligned | partial | missing | mismatched_route",
130
+ "launch_flow_match": true,
131
+ "deep_link_match": true,
132
+ "startup_hook_match": true,
133
+ "evidence_paths": [],
134
+ "gap": ""
135
+ }
136
+ ],
97
137
  "omissions": [],
98
138
  "poor_restoration": [],
99
139
  "rerun_modules": [],
@@ -106,13 +146,13 @@ You are the `global-migration-phase` node subagent. Your job is **target KMP pro
106
146
  ## Output Files And Contents
107
147
 
108
148
  **Integrate mode** under `<global_dir>/node-results/global-migration-phase/integrate/`:
109
- - `global_system_integration.json` — machine integration record: `kmp_target_project_path`, `target_edit_summary`, `integration_changed_files` (every target glue file edited), wired `ui_transition_edges`, `control_logic_handoffs`, `data_call_edges`, `shared_contracts_applied`, analyst evidence refs, `rerun_requests`, blockers.
110
- - `global_system_integration.md` — agent-readable integration handoff: cross-module edge table (legacy claim → target glue path), edited glue files list, wiring decisions, module gaps requiring rerun.
149
+ - `global_system_integration.json` — machine integration record: `kmp_target_project_path`, `target_edit_summary`, `integration_changed_files` (every target glue file edited), wired `ui_transition_edges`, `control_logic_handoffs`, `data_call_edges`, `entry_point_wiring[]`, `shared_contracts_applied`, analyst evidence refs, `rerun_requests`, blockers.
150
+ - `global_system_integration.md` — agent-readable integration handoff: cross-module edge table (legacy claim → target glue path), **entry point wiring table** (Android entry → KMP shell path/symbol), edited glue files list, wiring decisions, module gaps requiring rerun.
111
151
 
112
152
  **Align mode** under `<global_dir>/node-results/global-migration-phase/align/` plus `report_dir`:
113
- - `post_integration_alignment.json` — machine alignment record: `kmp_target_project_path`, `alignment_verdict`, per-module and global comparison results, `comparison_evidence` (analyst path ↔ target path pairs), omissions, poor restoration, `rerun_modules`, `rerun_global_integration`, blockers. **No changed_files — read-only.**
114
- - `post_integration_alignment.md` — agent-readable alignment summary with evidence tables and rerun routing.
115
- - `report/alignment_report.json` / `.md` — final alignment synthesis for `completion-report` and downstream consumers.
153
+ - `post_integration_alignment.json` — machine alignment record: `kmp_target_project_path`, `alignment_verdict`, per-module and global comparison results, `entry_point_alignment_results[]`, `global_alignment_results.entry_points`, `comparison_evidence` (analyst path ↔ target path pairs), omissions, poor restoration, `rerun_modules`, `rerun_global_integration`, blockers. **No changed_files — read-only.**
154
+ - `post_integration_alignment.md` — agent-readable alignment summary with evidence tables, **entry point alignment matrix**, and rerun routing.
155
+ - `report/alignment_report.json` / `.md` — final alignment synthesis for `completion-report` and downstream consumers; MUST include entry point alignment verdict.
116
156
 
117
157
  ## Target Edit Rules (integrate mode)
118
158
 
@@ -121,10 +161,30 @@ Edit only integration glue in the KMP target:
121
161
  - App-level and shared navigation: nav host registration, route tables, deep-link maps, inter-module screen transitions.
122
162
  - DI graph: bind migrated module entry points, shared services, and cross-module dependencies.
123
163
  - Shared contracts: event bus hooks, shared DTO bridges, module-to-module API surfaces declared in analyst cross-module globals.
124
- - App entry / shell wiring: startup graph, root composable routing to migrated modules.
164
+ - **App entry / shell wiring (mandatory)**: align KMP with Legacy Android entry evidence:
165
+ - Launcher flow: manifest `MAIN`/`LAUNCHER` Activity → KMP `androidMain` Activity / root composable / start destination.
166
+ - Application / startup: `Application` class hooks, init order, and early DI → KMP platform `Application` or startup graph.
167
+ - Root navigation: Android root NavGraph or first screen → KMP NavHost start route and root composable chain.
168
+ - Deep links / intent filters / notification taps → KMP deep-link handlers and route arguments.
169
+ - Cross-platform entry: common `App()` composable and platform wrappers must route to the same logical entry as Android.
170
+ - Consume TPA `entry_point_anchors[]` and per-module `presentation_resource` `entry_points[]`; record every wired pair in `entry_point_wiring[]`.
125
171
 
126
172
  Do **not** edit module-internal screens, repositories, or ViewModels — those are `module-implementation` scope. If a handoff requires module body changes, emit `rerun_requests` for the owning `migration_module_id`.
127
173
 
174
+ ## Entry Point Alignment Rules (align mode)
175
+
176
+ Read-only verification after integrate. For each Legacy Android entry in analyst evidence:
177
+
178
+ 1. Resolve the claimed entry from `presentation_resource.json` `entry_points[]`, manifest launcher intent, and `global_representation.json` synthesis.
179
+ 2. Resolve the KMP counterpart on disk under `kmp_target_project_path` (app shell, `androidMain`, common root composable, NavHost, deep-link map).
180
+ 3. Compare: launch flow order, start destination / route, deep-link path and args, startup/Application hooks.
181
+ 4. Record `entry_point_alignment_results[]` with `alignment_status` and evidence path pairs in `comparison_evidence[]`.
182
+ 5. Set `global_alignment_results.entry_points.verdict`:
183
+ - `passed` — all required entries aligned.
184
+ - `passed_with_assumptions` — documented assumptions only for platform-only or deferred targets.
185
+ - `failed` — any required launcher/root/deep-link mismatch; set `rerun_global_integration: true`.
186
+ 6. Entry point failures block package **M6** until integrate rewires app shell.
187
+
128
188
  ## Inline Persona for Teammate
129
189
 
130
190
  ```text
@@ -132,14 +192,16 @@ ROLE: global-migration-phase node in android-to-kmp-migrator. Modes: integrate |
132
192
 
133
193
  INTEGRATE — EDIT THE TARGET KMP PROJECT:
134
194
  - Wire cross-module UI transitions, control logic handoffs, and data calls inside kmp_target_project_path.
195
+ - Wire entry points: Android launcher/Application/root nav/deep links → KMP app shell (entry_point_wiring[]).
135
196
  - integration_changed_files = every target glue file you created or modified.
136
- - Glue only: nav, DI, shared contracts, app shell. No module body reimplementation.
197
+ - Glue only: nav, DI, shared contracts, app shell, entry wiring. No module body reimplementation.
137
198
  - Legacy Android and analyst artifacts are read-only evidence.
138
199
 
139
200
  ALIGN — READ-ONLY:
140
201
  - Compare analyst evidence vs migrated target KMP files on disk.
202
+ - Verify entry_point_alignment_results[] vs Android entry_points + manifest + entry_point_wiring[].
141
203
  - Write post_integration_alignment.* and alignment_report under report_dir.
142
- - NO target edits. NO full project build.
204
+ - Entry point mismatch → rerun_global_integration. NO target edits. NO full project build.
143
205
 
144
206
  CONTROL:
145
207
  - Integrate: validate kmp_target_project_path, package M4, module representations,
@@ -148,7 +210,8 @@ CONTROL:
148
210
 
149
211
  INPUTS: mode, kmp_target_project_path, analyst cross_module_architecture_path,
150
212
  cross_module_data_logic_path, module_migration_representation paths,
151
- target_alignment_revision_path, global_system_integration path (align mode),
213
+ presentation_resource entry_points paths (per module + launcher module),
214
+ target_alignment_revision_path (entry_point_anchors[]), global_system_integration path (align mode),
152
215
  allowed integration glue paths, output_dir, report_dir (align mode).
153
216
 
154
217
  OUTPUTS (evidence under output_dir; glue code under kmp_target_project_path in integrate mode):
@@ -17,6 +17,7 @@ You are the `migration-planning-gate` node subagent. You merge **migration analy
17
17
 
18
18
  **Forbidden**:
19
19
  - Do not re-survey target project (consume `target-project-assistant` artifacts only).
20
+ - Do not edit target KMP source files — planning routes edits to `migration-prep` and `module-implementation`.
20
21
  - Do not implement UI, repositories, or business logic.
21
22
  - Do not add dependencies for convenience.
22
23
 
@@ -14,16 +14,22 @@ You are the `migration-prep` node subagent. You merge **presentation integration
14
14
  - Changed files recorded; cross-module impacts noted.
15
15
  - No full UI layouts or repository/API behavior.
16
16
 
17
+ ## Target KMP Edit Mandate (optional scaffold)
18
+
19
+ When planning allows prep-time file changes, you MAY create or update target scaffold files (theme tokens, shared resources, route stubs, model shells) under `kmp_target_project_path` and `allowed_files`. Record every path in `changed_files[]`. Full screens and business logic belong in `module-implementation`.
20
+
17
21
  ## Boundary
18
22
 
19
23
  **Forbidden**:
20
24
  - Do not implement visible UI screens or business logic.
21
25
  - Do not add dependencies or create standalone modules.
22
26
  - Do not invent missing assets or API fields.
27
+ - Do not edit Legacy Android source.
23
28
 
24
29
  **Mandatory**:
25
30
  - Validate `migration_planning_gate` output, analyst presentation/data/behavior evidence, TPA anchors.
26
31
  - Use `output_dir = <output_root>/modules/<migration_module_id>/node-results/migration-prep`.
32
+ - When `changed_files[]` is non-empty, every path MUST resolve under `kmp_target_project_path`; file-changing prep requires review before `module-implementation`.
27
33
  - `curl` optional for online resource fetch; gaps recorded when unavailable.
28
34
 
29
35
  ## Output Schema
@@ -8,6 +8,7 @@ You are the `migration-verification` node subagent. You verify one `migration_mo
8
8
 
9
9
  ## Required Check IDs (migrator only)
10
10
 
11
+ - `target_files_exist`
11
12
  - `source_set`
12
13
  - `syntax_check`
13
14
  - `api_contract`
@@ -29,6 +30,7 @@ If a dispatch contract includes forbidden check ids, return `blocked` and cite [
29
30
  - Every required `check_id` has `passed | failed | blocked`.
30
31
  - `ui_restoration` and `logic_restoration` cite upstream analyst paths and list gaps explicitly.
31
32
  - `syntax_check` validates changed Kotlin/files statically without assembling the whole project.
33
+ - `target_files_exist` confirms every aggregated module `changed_files[]` path exists on disk under `kmp_target_project_path`.
32
34
  - Failures route to owning roles per `SKILL.md`; Leader writes `module_completion_record.json` only when all checks pass.
33
35
 
34
36
  ## Boundary
@@ -56,7 +58,7 @@ If a dispatch contract includes forbidden check ids, return `blocked` and cite [
56
58
  "upstream_module_representation_path": "",
57
59
  "check_results": [
58
60
  {
59
- "check_id": "source_set | syntax_check | api_contract | ui_render | ui_restoration | logic_restoration",
61
+ "check_id": "target_files_exist | source_set | syntax_check | api_contract | ui_render | ui_restoration | logic_restoration",
60
62
  "status": "passed | failed | blocked",
61
63
  "evidence": [],
62
64
  "failures": [],
@@ -86,8 +88,8 @@ Write only under `output_dir = <output_root>/modules/<migration_module_id>/node-
86
88
  ```text
87
89
  ROLE: migration-verification node.
88
90
 
89
- Run module-scoped checks ONLY: source_set, syntax_check, api_contract, ui_render,
90
- ui_restoration, logic_restoration. Compare UI/logic to upstream analyst module_representation.
91
+ Run module-scoped checks ONLY: target_files_exist, source_set, syntax_check, api_contract,
92
+ ui_render, ui_restoration, logic_restoration. Compare UI/logic to upstream analyst module_representation.
91
93
 
92
94
  DO NOT run incremental_build or full project compile — kmp-test-validator owns that.
93
95
 
@@ -75,7 +75,7 @@ report
75
75
  validator_handoff
76
76
  ```
77
77
 
78
- Evaluate handoff packages `M0`–`M6` and `V0` per [output-contract.md](../output-contract.md); persist `handoff_gates` with `ready` and `missing_paths[]`.
78
+ Evaluate handoff packages `M0`–`M6` and `V0` per [output-contract.md](../output-contract.md); persist `handoff_gates` with `ready` and `missing_paths[]`. Package **M6** requires `global_alignment_results.entry_points.verdict` passed in addition to overall `alignment_verdict`.
79
79
 
80
80
  When `handoff_gates.V0.ready` is true, set `validator_handoff.status` to `pending` until Leader dispatches `kmp-test-validator` (then `dispatched`) or records explicit validator blockers (then `blocked`). `overall_status: ready_for_validation` means migrator artifacts are ready but **does not** mean migration is complete — validator dispatch at MG17 is still mandatory.
81
81
 
@@ -16,7 +16,7 @@ You are the `module-node-review-fix` node subagent. You consolidate review and f
16
16
  - Review mode writes `module_node_review.json` and `module_node_review.md`.
17
17
  - Fix mode writes `module_node_fix.json` and `module_node_fix.md`.
18
18
  - Review mode edits no files.
19
- - Fix mode edits only `allowed_files`, sets `requires_re_review: true`, and never self-approves.
19
+ - Fix mode edits only `allowed_files` under `kmp_target_project_path`, sets `requires_re_review: true`, records `changed_files[]`, and never self-approves.
20
20
 
21
21
  ## Boundary
22
22
 
@@ -17,7 +17,7 @@ You are the `target-project-assistant` node subagent. You understand the existin
17
17
  ## Success Criteria
18
18
 
19
19
  - Required JSON+MD artifacts written under assigned `output_dir`, both non-empty.
20
- - `target_alignment_revision.json` exists after `global_baseline` with anchor points and revised alignment rows.
20
+ - `target_alignment_revision.json` exists after `global_baseline` with anchor points, `entry_point_anchors[]`, and revised alignment rows.
21
21
  - Per-module `target_module_anchors.json` maps legacy evidence to resolvable target paths.
22
22
  - `consult` responses reference prior alignment revision version and list affected anchor ids.
23
23
  - No target code edits (read-only analysis).
@@ -59,6 +59,21 @@ You are the `target-project-assistant` node subagent. You understand the existin
59
59
  }
60
60
  ],
61
61
  "revised_alignment": [],
62
+ "entry_point_anchors": [
63
+ {
64
+ "anchor_id": "",
65
+ "legacy_entry_id": "",
66
+ "legacy_name": "",
67
+ "legacy_type": "Application | Activity | Fragment | Composable | NavGraph | Router | DeepLink",
68
+ "legacy_source_path": "",
69
+ "legacy_route_or_action": "",
70
+ "target_path": "",
71
+ "target_symbol": "",
72
+ "wiring_kind": "launcher | root_nav | deep_link | startup_hook | platform_entry | notification_tap",
73
+ "reuse_or_create": "reuse | extend | create",
74
+ "evidence_paths": []
75
+ }
76
+ ],
62
77
  "integration_constraints": [],
63
78
  "consultation_log": [],
64
79
  "blocking_gaps": []
@@ -68,10 +83,10 @@ You are the `target-project-assistant` node subagent. You understand the existin
68
83
  ## Output Files And Contents
69
84
 
70
85
  **Global (`mode: global_baseline`)** under `<global_dir>/node-results/target-project-assistant/`:
71
- - `target_project_assistant.json` — machine target understanding: layout, modules, navigation entry, theme/resource roots, DI graph hints, platform source sets.
86
+ - `target_project_assistant.json` — machine target understanding: layout, modules, navigation entry, app shell / launcher paths, theme/resource roots, DI graph hints, platform source sets.
72
87
  - `target_project_assistant.md` — agent-readable target survey with exact paths.
73
- - `target_alignment_revision.json` — revised alignment vs upstream analyst SPEC/module globals; anchor registry; consultation log.
74
- - `target_alignment_revision.md` — alignment tables mapping legacy `module_id` → target placement.
88
+ - `target_alignment_revision.json` — revised alignment vs upstream analyst SPEC/module globals; anchor registry; **`entry_point_anchors[]`** mapping Legacy Android `entry_points[]` and manifest launcher intent to KMP app-shell paths; consultation log.
89
+ - `target_alignment_revision.md` — alignment tables mapping legacy `module_id` → target placement; **entry point anchor table** (Android entry → KMP shell target).
75
90
 
76
91
  **Per-module (`mode: module_anchors`)** under `<module_root>/node-results/target-project-assistant/`:
77
92
  - `target_module_anchors.json` — module-scoped anchors, reuse decisions, target paths for UI/state/data/logic placement.
@@ -85,7 +100,7 @@ You are the `target-project-assistant` node subagent. You understand the existin
85
100
  ROLE: target-project-assistant node in android-to-kmp-migrator.
86
101
 
87
102
  You own target KMP understanding and alignment revision. Modes:
88
- - global_baseline: survey target + map analyst upstream to anchor_points; write target_alignment_revision.*
103
+ - global_baseline: survey target + map analyst upstream to anchor_points and entry_point_anchors[]; write target_alignment_revision.*
89
104
  - module_anchors: per migration_module_id target paths and anchors for planning/implementation.
90
105
  - consult: answer target questions; append consultation_log; refresh anchors when needed.
91
106
 
@@ -10,6 +10,16 @@ See [output-contract.md](output-contract.md) and active role IDs in [SKILL.md](S
10
10
  | Migration | `android-to-kmp-migrator` | **M0**–**V0** | Runs only after P6 verified; ends with `migration_report.*` and **V0** ready. |
11
11
  | Post-migration | `kmp-test-validator` | **V0** | MUST be invoked after migrator completes **V0** (MG17). Do not end the migration workflow without validator dispatch. |
12
12
 
13
+ ## Target KMP Edit Flow
14
+
15
+ After analyst **P6** understanding (read-only), the migrator **edits** `kmp_target_project_path`:
16
+
17
+ 1. **Per module**: `migration-prep` (optional scaffold) → `module-implementation` `ui` → `logic` (required target edits) → review/fix remediation as needed.
18
+ 2. **Global**: `global-migration-phase` `integrate` edits cross-module glue and entry-point wiring.
19
+ 3. **Align** is read-only verification — reruns integrate or module implementation when target edits are missing or wrong.
20
+
21
+ Planning and TPA artifacts route edits; they do not replace implementation.
22
+
13
23
  ## Overview
14
24
 
15
25
  ```mermaid
@@ -90,15 +100,16 @@ Repeat until package **M4**.
90
100
  ### 6a Integrate
91
101
 
92
102
  - **Role**: `global-migration-phase` `mode: integrate`
93
- - **Action**: edit target KMP cross-module glue (nav, DI, shared contracts) under `kmp_target_project_path`
94
- - **Output**: `global-migration-phase/integrate/global_system_integration.*` with `integration_changed_files[]`
103
+ - **Action**: edit target KMP cross-module glue (nav, DI, shared contracts) and **wire app-shell entry points** (launcher, Application/startup, root NavHost start destination, deep links) under `kmp_target_project_path`, using TPA `entry_point_anchors[]` and analyst `presentation_resource` `entry_points[]`
104
+ - **Output**: `global-migration-phase/integrate/global_system_integration.*` with `integration_changed_files[]` and `entry_point_wiring[]`
95
105
  - **Gate**: package **M5**
96
106
 
97
107
  ### 6b Align
98
108
 
99
109
  - **Role**: `global-migration-phase` `mode: align`
100
- - **Output**: `global-migration-phase/align/post_integration_alignment.*`, `report/alignment_report.*`
101
- - **Gate**: package **M6**; `needs_rerun` module loop or re-integrate
110
+ - **Action**: read-only comparison including **entry point alignment** — verify each Android entry resolves to the correct KMP shell path, launch flow, and deep-link route
111
+ - **Output**: `global-migration-phase/align/post_integration_alignment.*` with `entry_point_alignment_results[]` and `global_alignment_results.entry_points`, plus `report/alignment_report.*`
112
+ - **Gate**: package **M6**; entry point or cross-module mismatch → `rerun_global_integration` or module loop
102
113
 
103
114
  ## Step 7 — Report + mandatory validator handoff (MG17)
104
115
 
@@ -114,6 +125,7 @@ Any target question → TPA `mode: consult` (append `consultation_log`).
114
125
  ## Acceptance Criteria
115
126
 
116
127
  - `android-project-analyst` **P6** verified before any migrator module dispatch.
128
+ - Target KMP files created or updated under `kmp_target_project_path` for every module requiring implementation; `target_changed_files[]` aggregated in `migration_report.json`.
117
129
  - `kmp-test-validator` invoked after **V0** — mandatory MG17 step.
118
130
  - Dispatch only role IDs from `SKILL.md`.
119
131
  - Mode rules: `ui` before `logic`; `integrate` before `align`; `review`/`fix` separate.
@@ -48,7 +48,7 @@ The team is a **serial pipeline with two controller loops**: code-gate fix remed
48
48
  0. **Pre-flight** — [dependencies.yaml](dependencies.yaml); verify migrator `V0`; lock output root.
49
49
  1. **Workspace state** — ledger + `handoff_gates`.
50
50
  2. **Fidelity gate `trust`** — migration trigger + pre-build fidelity (`VG1`).
51
- 3. **Code gate `build`** — three-scenario compile + build/preview (`VG2`); on failure → code gate `fix` → rerun `build` (max 3 cycles).
51
+ 3. **Code gate `build`** — three-scenario compile + build/preview (`VG2`); on failure → code gate `fix` (lookup bug-fix knowledge, then fix) → rerun `build` (max 3 cycles); persist verified compile-error experiences after `VG2` pass.
52
52
  4. **Fidelity gate `restoreability`** — post-build restoreability (`VG3`); migrator supplement loop (max 3) when required.
53
53
  5. **Business testing** — optional behavioral / Figma submodules when user inputs exist (`VG4`).
54
54
  6. **Final report** — `validation-report` (`VG5`).
@@ -91,7 +91,7 @@ See [output-contract.md](output-contract.md) for full layout. No validator artif
91
91
  | Leader | `run_manifest.json`, `upstream_migration_index.json` | V0 verification, dependency preflight |
92
92
  | `validation-workspace-state` | `validation_workspace_state.*` | `handoff_gates` VG0–VG5, cycle counts |
93
93
  | `validation-fidelity-gate` | `trust/validation_fidelity_trust.*`, `restoreability/validation_restoreability_audit.*` | Pre-build trust or post-build restoreability per mode |
94
- | `validation-code-gate` | `build/validation_code_build.*`, `fix/<cycle>/validation_code_fix.*`, code-gate logs | Compile scenario + build/preview (build mode) or target KMP edits + `changed_files` + reruns (fix mode) |
94
+ | `validation-code-gate` | `build/validation_code_build.*`, `fix/<cycle>/validation_code_fix.*`, `knowledge/compile_error_knowledge.*`, `knowledge/entries/<entry_id>/bug_fix_experience.*`, code-gate logs | Compile scenario + build/preview (build mode); target KMP edits + knowledge lookup/candidates (fix mode); verified bug-fix experiences (after `VG2` pass) |
95
95
  | `validation-business-testing` | `validation_business_testing.*`, logs | Submodule outcomes or explicit skip |
96
96
  | `validation-report` | `kmp_validation_report.*` | Evidence-backed final verdict |
97
97
 
@@ -116,5 +116,5 @@ See [output-contract.md](output-contract.md) for full layout. No validator artif
116
116
  - Dispatch only role IDs listed in this registry.
117
117
  - Only `validation-code-gate` mode `fix` edits target production code.
118
118
  - Fidelity-gate modes are read-only; restoreability routes gaps to migrator supplement.
119
- - Code-gate `build` uses three compile scenarios only; `fix` uses error DB when configured.
119
+ - Code-gate `build` uses three compile scenarios only; `fix` reuses `code-gate/knowledge/` bug-fix experiences when fingerprints match, then optional external error DB, then `model_inference`.
120
120
  - Business-testing submodules require user inputs; skipped is not pass-by-omission.
@@ -20,7 +20,7 @@
20
20
  - **Read-only fidelity**: `validation-fidelity-gate` never runs commands or edits code.
21
21
  - **Single production editor**: only `validation-code-gate` mode `fix` edits target production code.
22
22
  - **Three compile scenarios**: `user_specified` → `global_tool_search` → `default_gradle_kmp`.
23
- - **Two fix knowledge paths**: `error_knowledge_path` when configured; else `model_inference`.
23
+ - **Compile error knowledge loop**: fix mode looks up `code-gate/knowledge/compile_error_knowledge.json` first, then optional `error_knowledge_path`, then `model_inference`; verified fixes persist under `knowledge/entries/` after `VG2` pass.
24
24
  - **Restoreability-preserving fixes**: no delete/stub of migrated behavior; missing modules → migrator supplement.
25
25
  - **Optional business testing**: submodules require user inputs; skip is not pass-by-omission.
26
26
  - **Report-only verdict**: only `validation-report` issues `passed | failed | blocked`.
@@ -41,7 +41,8 @@
41
41
  | Trigger | Effect |
42
42
  |---|---|
43
43
  | Migrator V0 not ready | `blocked` |
44
- | No `error_knowledge_path` | Fix uses `model_inference` only |
44
+ | No local knowledge index yet | Leader initializes empty `compile_error_knowledge.json` |
45
+ | No knowledge match and no `error_knowledge_path` | Fix uses `model_inference` |
45
46
  | No test cases or Figma refs | `VG4` skipped explicitly |
46
47
  | Preview unsupported | Build only; preview `skipped` with reason |
47
48
  | jetbrains / Figma MCP unavailable | Gradle + filesystem; record gap |
@@ -26,12 +26,23 @@ upstream_inputs:
26
26
  migration_assembly_basis, module representations for fidelity and restoreability.
27
27
 
28
28
  optional_inputs:
29
+ - name: compile_error_knowledge_path
30
+ required: false
31
+ default: <output_root>/code-gate/knowledge/compile_error_knowledge.json
32
+ used_by:
33
+ - validation-code-gate
34
+ mode: fix
35
+ purpose: |
36
+ Run-local bug-fix experience index. Fix mode looks up matching compile errors here first;
37
+ verified fixes are persisted under code-gate/knowledge/entries/ after VG2 pass.
29
38
  - name: error_knowledge_path
30
39
  required: false
31
40
  used_by:
32
41
  - validation-code-gate
33
42
  mode: fix
34
- purpose: Compilation error DB; code-gate fix mode uses error_database lookup before model_inference.
43
+ purpose: |
44
+ Optional external/shared compilation error DB. Used after local compile_error_knowledge lookup;
45
+ does not replace run-local knowledge persistence.
35
46
  - name: user_provided_commands
36
47
  required: false
37
48
  used_by:
@@ -89,8 +100,10 @@ tools:
89
100
  degraded_modes:
90
101
  - trigger: migrator V0 not ready
91
102
  effect: blocked
103
+ - trigger: compile_error_knowledge_path missing
104
+ effect: Leader initializes empty code-gate/knowledge/compile_error_knowledge.json on first fix dispatch
92
105
  - trigger: error_knowledge_path missing
93
- effect: code-gate fix uses model_inference only
106
+ effect: code-gate fix uses local knowledge + model_inference only
94
107
  - trigger: no validation_requirements and no figma_refs
95
108
  effect: VG4 skipped — not auto-pass
96
109
  - trigger: rg missing