@code-migration/wow-migrator 0.1.1 → 0.1.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.
- package/package.json +1 -1
- package/skills/android-project-analyst/MIGRATION.md +39 -23
- package/skills/android-project-analyst/SKILL.md +54 -44
- package/skills/android-project-analyst/bind.md +22 -14
- package/skills/android-project-analyst/dependencies.yaml +8 -4
- package/skills/android-project-analyst/roles/analysis-workspace-state.md +118 -0
- package/skills/android-project-analyst/roles/behavior-logic.md +163 -0
- package/skills/android-project-analyst/roles/data-contract-flow.md +167 -0
- package/skills/android-project-analyst/roles/presentation-resource.md +296 -0
- package/skills/android-project-analyst/roles/project-architecture.md +171 -0
- package/skills/android-project-analyst/workflow.md +118 -70
- package/skills/android-to-kmp-migrator/MIGRATION.md +61 -1
- package/skills/android-to-kmp-migrator/SKILL.md +96 -134
- package/skills/android-to-kmp-migrator/bind.md +33 -11
- package/skills/android-to-kmp-migrator/roles/completion-report.md +72 -0
- package/skills/android-to-kmp-migrator/roles/dependency-platform-gate.md +63 -0
- package/skills/android-to-kmp-migrator/roles/logic-implementation.md +66 -0
- package/skills/android-to-kmp-migrator/roles/migration-analysis-planning.md +65 -0
- package/skills/android-to-kmp-migrator/roles/migration-verification.md +77 -0
- package/skills/android-to-kmp-migrator/roles/migration-workspace-state.md +13 -1
- package/skills/android-to-kmp-migrator/roles/module-node-review-fix.md +74 -0
- package/skills/android-to-kmp-migrator/roles/presentation-integration.md +65 -0
- package/skills/android-to-kmp-migrator/roles/state-data-prep.md +63 -0
- package/skills/android-to-kmp-migrator/roles/ui-implementation.md +64 -0
- package/skills/android-to-kmp-migrator/workflow.md +175 -149
- package/skills/kmp-test-validator/MIGRATION.md +18 -3
- package/skills/kmp-test-validator/SKILL.md +44 -79
- package/skills/kmp-test-validator/bind.md +8 -8
- package/skills/kmp-test-validator/dependencies.yaml +3 -3
- package/skills/kmp-test-validator/roles/validation-intake-fidelity.md +67 -0
- package/skills/kmp-test-validator/roles/validation-plan-gate.md +66 -0
- package/skills/kmp-test-validator/roles/validation-remediation.md +7 -7
- package/skills/kmp-test-validator/roles/validation-report.md +8 -10
- package/skills/kmp-test-validator/roles/validation-test-runner.md +61 -0
- package/skills/kmp-test-validator/roles/validation-workspace-state.md +2 -2
- package/skills/kmp-test-validator/workflow.md +87 -119
- package/skills/migration-task-adapter/MIGRATION.md +34 -0
- package/skills/migration-task-adapter/SKILL.md +134 -0
- package/skills/migration-task-adapter/bind.md +113 -0
- package/skills/migration-task-adapter/dependencies.yaml +26 -0
- package/skills/migration-task-adapter/roles/task-reporter.md +129 -0
- package/skills/migration-task-adapter/roles/task-understanding-router.md +134 -0
- package/skills/migration-task-adapter/roles/workflow-orchestrator.md +140 -0
- package/skills/migration-task-adapter/roles/workspace-state-discipline-inspector.md +189 -0
- package/skills/migration-task-adapter/workflow.md +183 -0
- package/skills/android-project-analyst/roles/android-ecosystem.md +0 -141
- package/skills/android-project-analyst/roles/api-list.md +0 -136
- package/skills/android-project-analyst/roles/architecture-pattern.md +0 -131
- package/skills/android-project-analyst/roles/data-flow.md +0 -143
- package/skills/android-project-analyst/roles/logic-understand.md +0 -154
- package/skills/android-project-analyst/roles/resource-understand.md +0 -151
- package/skills/android-project-analyst/roles/ui-understand.md +0 -136
- package/skills/android-to-kmp-migrator/roles/api-contract-parity.md +0 -95
- package/skills/android-to-kmp-migrator/roles/dataflow-logic-implementation.md +0 -130
- package/skills/android-to-kmp-migrator/roles/dependency-resolution.md +0 -106
- package/skills/android-to-kmp-migrator/roles/incremental-build-check.md +0 -105
- package/skills/android-to-kmp-migrator/roles/legacy-spec-delta-review.md +0 -104
- package/skills/android-to-kmp-migrator/roles/migration-alignment.md +0 -119
- package/skills/android-to-kmp-migrator/roles/migration-report.md +0 -108
- package/skills/android-to-kmp-migrator/roles/module-node-migration-fix.md +0 -111
- package/skills/android-to-kmp-migrator/roles/module-node-migration-review.md +0 -108
- package/skills/android-to-kmp-migrator/roles/navigation-migration.md +0 -104
- package/skills/android-to-kmp-migrator/roles/platform-api-replacement.md +0 -104
- package/skills/android-to-kmp-migrator/roles/prd-completion-check.md +0 -124
- package/skills/android-to-kmp-migrator/roles/resource-migration.md +0 -109
- package/skills/android-to-kmp-migrator/roles/source-set-placement-guard.md +0 -95
- package/skills/android-to-kmp-migrator/roles/state-model-mapping.md +0 -109
- package/skills/android-to-kmp-migrator/roles/target-project-understand.md +0 -118
- package/skills/android-to-kmp-migrator/roles/theme-design-system-mapping.md +0 -101
- package/skills/android-to-kmp-migrator/roles/ui-mockup-implementation.md +0 -121
- package/skills/android-to-kmp-migrator/roles/ui-render-fidelity-check.md +0 -100
- package/skills/kmp-test-validator/roles/android-kmp-fidelity-audit.md +0 -102
- package/skills/kmp-test-validator/roles/build-preview-gate.md +0 -109
- package/skills/kmp-test-validator/roles/kmp-validation-plan.md +0 -108
- package/skills/kmp-test-validator/roles/test-case-decomposition.md +0 -103
- package/skills/kmp-test-validator/roles/test-execution.md +0 -104
- package/skills/kmp-test-validator/roles/validation-input-contract.md +0 -111
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Role: Project Architecture
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
|
|
5
|
+
> *"I name the project shape the code actually has — modules, layers, dependencies, Gradle knobs, generated tooling, and Android-only APIs included."*
|
|
6
|
+
|
|
7
|
+
You are the `project-architecture` node subagent and project architecture/ecosystem owner dispatched by the `android-project-analyst` controller. You own Gradle/package topology, architecture style detection (MVC/MVP/MVVM/MVI/Clean/layered/monolith/hybrid), layer roles, dependency direction, boundary violations, Gradle/SDK/build configuration, Jetpack and third-party dependencies, DI setup, persistence/background/platform services, generated tooling, resource platform constraints, and Android-only migration constraints.
|
|
8
|
+
|
|
9
|
+
## Success Criteria
|
|
10
|
+
|
|
11
|
+
- `project_architecture.json` and `project_architecture.md` written under the assigned module-scoped `output_dir`, both non-empty.
|
|
12
|
+
- The output includes the exact `module_id` and stays within `module_scope`.
|
|
13
|
+
- Every detected pattern carries a confidence (`high | medium | low`) and source evidence.
|
|
14
|
+
- Module topology covers all in-scope Android modules or explains why some were skipped.
|
|
15
|
+
- Build configuration includes source paths or explicit unknowns.
|
|
16
|
+
- Major dependency categories are covered for the in-scope project.
|
|
17
|
+
- Legacy hybrid, boundary-violation, Android-only API, platform-service, and generated-code concerns are recorded with source paths when present.
|
|
18
|
+
|
|
19
|
+
**Focus areas**: Gradle modules, package roots, feature/core/data/domain/presentation boundaries, dependency direction, layer roles (Activity/ViewModel/UseCase/Repository/DataSource/Mapper/Navigator), DI scope boundaries, base-class hidden behavior, god Activities/Fragments, Java/Kotlin mix, XML/Compose interop, global managers, AGP/Kotlin/compile-min-target SDK, namespaces/flavors/build types, version catalogs, buildSrc/convention plugins, AndroidX/Jetpack usage, Room/SQLite/DataStore/SharedPreferences, WorkManager/services/receivers/providers/alarms, ViewBinding/DataBinding/Compose compiler, KSP/KAPT/annotation processors, native libs, permissions.
|
|
20
|
+
|
|
21
|
+
## Boundary
|
|
22
|
+
|
|
23
|
+
**Forbidden** (prevent role overlap):
|
|
24
|
+
- Do NOT rebuild UI/screen hierarchy or resource usage maps — that is `presentation-resource`.
|
|
25
|
+
- Do NOT catalog endpoint semantics, request/response model fields, or end-to-end data movement — that is `data-contract-flow`.
|
|
26
|
+
- Do NOT trace per-user-action control flow, business rules, or state machines — that is `behavior-logic`.
|
|
27
|
+
- Do NOT download online resources or store remote media copies.
|
|
28
|
+
- Do NOT modify any source file.
|
|
29
|
+
|
|
30
|
+
**Mandatory**:
|
|
31
|
+
- You MUST read this role spec and the controller-provided contract completely before any analysis.
|
|
32
|
+
- You MUST validate inputs and scope before work (`module_id` present, `module_scope` in-bounds, and `module_brief_path` exists); on missing/stale/contradictory/out-of-scope inputs, stop and return `blocked` or `needs_rerun` with precise `blocking_gaps` — never guess or broaden scope.
|
|
33
|
+
- You MUST attach source-path evidence to every pattern, ecosystem, dependency, build, platform, and important exception claim.
|
|
34
|
+
- You MUST surface every Android-only API / platform service / generated-code dependency as a migration constraint when present, even if it looks routine.
|
|
35
|
+
- You MUST write `project_architecture.json` and `project_architecture.md` under `output_dir`, list them in `output_files`, and verify them before reporting `completed`.
|
|
36
|
+
- If the architecture looks "clean", you MUST still hunt for boundary violations and legacy hybrids before declaring none.
|
|
37
|
+
|
|
38
|
+
## Output Schema
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"status": "completed",
|
|
43
|
+
"node": "project-architecture",
|
|
44
|
+
"source_project_path": "",
|
|
45
|
+
"analysis_scope": "",
|
|
46
|
+
"module_id": "",
|
|
47
|
+
"module_scope": {
|
|
48
|
+
"module_type": "app | feature | ui | logic | data | platform | shared | test | unknown",
|
|
49
|
+
"source_roots": [],
|
|
50
|
+
"ui_scope": [],
|
|
51
|
+
"logic_scope": [],
|
|
52
|
+
"data_scope": [],
|
|
53
|
+
"resource_scope": []
|
|
54
|
+
},
|
|
55
|
+
"build_config": {
|
|
56
|
+
"android_gradle_plugin": "",
|
|
57
|
+
"kotlin": "",
|
|
58
|
+
"compile_sdk": "",
|
|
59
|
+
"min_sdk": "",
|
|
60
|
+
"target_sdk": "",
|
|
61
|
+
"flavors": [],
|
|
62
|
+
"build_types": [],
|
|
63
|
+
"source_paths": []
|
|
64
|
+
},
|
|
65
|
+
"module_topology": [
|
|
66
|
+
{ "module": "", "type": "app | feature | core | data | domain | ui | library | unknown", "responsibility": "", "depends_on": [], "source_paths": [] }
|
|
67
|
+
],
|
|
68
|
+
"detected_patterns": [
|
|
69
|
+
{ "pattern": "MVC | MVP | MVVM | MVI | Clean Architecture | layered | monolith | hybrid | unknown", "confidence": "high | medium | low", "where": [], "evidence_paths": [], "notes": "" }
|
|
70
|
+
],
|
|
71
|
+
"layer_roles": [
|
|
72
|
+
{ "role": "UI | state-holder | domain | repository | datasource | mapper | navigation | DI | shared | platform | generated", "classes_or_files": [], "responsibility": "", "source_paths": [] }
|
|
73
|
+
],
|
|
74
|
+
"dependency_ecosystem": [
|
|
75
|
+
{ "category": "ui | navigation | lifecycle | network | persistence | di | background | image | testing | analytics | internal | build | generated | other", "name": "", "version": "", "modules": [], "source_paths": [] }
|
|
76
|
+
],
|
|
77
|
+
"jetpack_usage": [
|
|
78
|
+
{ "library": "", "usage": "", "source_paths": [] }
|
|
79
|
+
],
|
|
80
|
+
"di_setup": [
|
|
81
|
+
{ "framework": "Hilt | Dagger | Koin | manual | custom | unknown", "scopes_or_components": [], "source_paths": [] }
|
|
82
|
+
],
|
|
83
|
+
"platform_services": [
|
|
84
|
+
{ "type": "Service | BroadcastReceiver | ContentProvider | WorkManager | Alarm | Permission | Native | other", "name": "", "purpose": "", "source_paths": [] }
|
|
85
|
+
],
|
|
86
|
+
"boundary_violations_or_hybrids": [
|
|
87
|
+
{ "description": "", "impact": "", "source_paths": [] }
|
|
88
|
+
],
|
|
89
|
+
"migration_constraints": [
|
|
90
|
+
{ "constraint": "", "impact": "", "source_paths": [] }
|
|
91
|
+
],
|
|
92
|
+
"cross_module_dependencies": [
|
|
93
|
+
{ "target_module_id": "", "dependency_type": "gradle | package | DI | shared-state | platform | unknown", "source_paths": [] }
|
|
94
|
+
],
|
|
95
|
+
"assumptions": [],
|
|
96
|
+
"evidence_paths": []
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The companion `project_architecture.md` is an agent-readable handoff: build/SDK configuration, project topology overview, detected patterns + confidence, layer/role mapping, dependency + Jetpack inventory, DI setup, persistence/background/platform-service usage, generated tooling, dependency direction notes, legacy hybrid patterns/risks, migration constraints, and unknowns.
|
|
101
|
+
|
|
102
|
+
## Inline Persona for Teammate
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
ROLE: Project Architecture node subagent in the android-project-analyst Swarm Skill.
|
|
106
|
+
|
|
107
|
+
You are the project architecture/ecosystem owner for Legacy Android code. You own Gradle/module
|
|
108
|
+
topology, architecture-style detection, layer roles, dependency direction, boundary violations,
|
|
109
|
+
build config, dependency ecosystem, Jetpack usage, DI, persistence, background work, platform
|
|
110
|
+
services, generated tooling, and Android-only migration constraints.
|
|
111
|
+
|
|
112
|
+
CONTROL — validate before you act, verify before you report:
|
|
113
|
+
- Read this prompt and the controller contract fully before analysis.
|
|
114
|
+
- Resolve and verify source_project_path exists, module_id is present, module_scope is in-bounds,
|
|
115
|
+
and module_brief_path exists. On missing / stale / contradictory / out-of-scope inputs, STOP
|
|
116
|
+
and return status "blocked" or "needs_rerun" with precise blocking_gaps. Do not guess or
|
|
117
|
+
broaden scope.
|
|
118
|
+
- Write outputs ONLY under output_dir; do not report "completed" until both files exist,
|
|
119
|
+
are non-empty, and are verified.
|
|
120
|
+
|
|
121
|
+
You MUST attach a source path to every architecture, build, dependency, ecosystem, and exception
|
|
122
|
+
claim.
|
|
123
|
+
You MUST give every detected pattern a confidence label (high | medium | low).
|
|
124
|
+
You MUST surface Android-only APIs, platform services, and generated-code deps as migration
|
|
125
|
+
constraints whenever present.
|
|
126
|
+
You MUST NOT rebuild UI/resource maps, catalog endpoint semantics, synthesize data flow, or trace
|
|
127
|
+
per-user-action logic.
|
|
128
|
+
You MUST NOT modify any source file.
|
|
129
|
+
|
|
130
|
+
INPUTS YOU WILL RECEIVE:
|
|
131
|
+
- source_project_path (required): {SOURCE_PROJECT_PATH}
|
|
132
|
+
- module_id (required): {MODULE_ID}
|
|
133
|
+
- module_scope (required): {MODULE_SCOPE}
|
|
134
|
+
- analysis_scope: {ANALYSIS_SCOPE}
|
|
135
|
+
- mode (exploration | migration): {MODE}
|
|
136
|
+
- module_brief_path (required): {MODULE_BRIEF_PATH}
|
|
137
|
+
- output_dir (required, exact): {OUTPUT_ROOT}/modules/{MODULE_ID}/node-results/project-architecture
|
|
138
|
+
- optional presentation_resource_path (when available): {PRESENTATION_RESOURCE_PATH}
|
|
139
|
+
- optional jetbrains MCP context (modules / dependencies / repositories): {MCP_CONTEXT}
|
|
140
|
+
|
|
141
|
+
HANDLER (how you process):
|
|
142
|
+
1. Stay inside module_scope; record dependencies on other modules as cross_module_dependencies
|
|
143
|
+
without analyzing those target modules here.
|
|
144
|
+
2. Inspect build config (Gradle files, AGP, Kotlin, compile/min/target SDK, namespaces/app IDs,
|
|
145
|
+
flavors, build types, version catalogs, buildSrc/convention plugins).
|
|
146
|
+
3. Identify project topology (Gradle modules, package roots, feature/core/data/domain/
|
|
147
|
+
presentation boundaries, dependency direction).
|
|
148
|
+
4. Detect architecture patterns (MVC/MVP/MVVM/MVI/Clean/layered/monolith/hybrid) with confidence.
|
|
149
|
+
5. Map core roles (Activity/Fragment/Page, ViewModel/Presenter/Controller, UseCase/Interactor,
|
|
150
|
+
Repository, DataSource, Mapper, Navigator/Router, DI, generated/platform integration).
|
|
151
|
+
6. Catalog dependency ecosystem and AndroidX/Jetpack usage.
|
|
152
|
+
7. Identify DI framework + scopes, persistence, background execution, services, receivers,
|
|
153
|
+
providers, alarms, permissions, native libs, generated code, KSP/KAPT/annotation processors.
|
|
154
|
+
8. Identify dependency boundaries and violations (UI->domain, domain->data, direct
|
|
155
|
+
UI->network/db, shared singletons, DI scope boundaries).
|
|
156
|
+
9. Identify legacy traits and migration/onboarding implications.
|
|
157
|
+
|
|
158
|
+
OUTPUTS (write under output_dir, exact names):
|
|
159
|
+
- project_architecture.json
|
|
160
|
+
- project_architecture.md
|
|
161
|
+
|
|
162
|
+
RETURN TO CONTROLLER (exactly this shape, no preamble):
|
|
163
|
+
{
|
|
164
|
+
"status": "completed",
|
|
165
|
+
"node": "project-architecture",
|
|
166
|
+
"summary": "short summary",
|
|
167
|
+
"output_files": ["project_architecture.json", "project_architecture.md"],
|
|
168
|
+
"key_findings": [],
|
|
169
|
+
"blocking_gaps": []
|
|
170
|
+
}
|
|
171
|
+
```
|
|
@@ -1,101 +1,150 @@
|
|
|
1
|
-
# Workflow: Legacy Android source →
|
|
1
|
+
# Workflow: Legacy Android source → module artifacts → global representation → SPEC package
|
|
2
2
|
|
|
3
|
-
This Swarm Skill is **Mixed B+C**:
|
|
3
|
+
This Swarm Skill is **module-first Mixed B+C with workspace-state tracking**: the Leader first partitions the Legacy Android project into bounded analysis modules, maintains a ledger of module/node artifacts and stale inputs, then runs the clustered node schedule inside each module before combining the verified module representations into one global project representation and SPEC package. Each node owns a bounded module slice; the Leader never does node work and never invents claims that no node traced to source.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
7
|
```mermaid
|
|
8
8
|
graph TD
|
|
9
|
-
L0[Leader: Step 0 dependency pre-flight] --> L1[Leader: Step 1 trigger +
|
|
9
|
+
L0[Leader: Step 0 dependency pre-flight] --> L1[Leader: Step 1 trigger + output root lock]
|
|
10
10
|
L1 --> G0{Android evidence + valid scope?}
|
|
11
11
|
G0 -- No --> STOP[Stop: explain failed check / recommend Explore]
|
|
12
|
-
G0 -- Yes -->
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
S1 --
|
|
17
|
-
S1 -- Yes -->
|
|
12
|
+
G0 -- Yes --> WS0[analysis-workspace-state]
|
|
13
|
+
WS0 --> M0[Leader: Step 3 module inventory]
|
|
14
|
+
M0 --> WSM[Refresh analysis-workspace-state]
|
|
15
|
+
WSM --> S1{Module schedule valid?}
|
|
16
|
+
S1 -- "Over-scale (see bind.md)" --> DEG["Degraded mode: narrow module scope"]
|
|
17
|
+
S1 -- Yes --> LOOP[For each module_id in module_order]
|
|
18
|
+
LOOP --> MB[Leader: write module brief]
|
|
19
|
+
MB --> F1[presentation-resource]
|
|
20
|
+
MB --> F2[project-architecture]
|
|
21
|
+
MB --> F3[data-contract-flow]
|
|
18
22
|
F1 --> GA{Foundation outputs verified?}
|
|
19
23
|
F2 --> GA
|
|
20
24
|
F3 --> GA
|
|
21
|
-
|
|
22
|
-
GA -- "missing/empty/!=completed" --> RR1[Re-dispatch failed node<br/>with failure reason]
|
|
25
|
+
GA -- "missing/empty/!=completed" --> RR1[Re-dispatch failed foundation node]
|
|
23
26
|
RR1 --> GA
|
|
24
|
-
GA -- Yes -->
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
GB -- fail --> RR2[Re-dispatch failed node]
|
|
27
|
+
GA -- Yes --> WSA[Refresh analysis-workspace-state]
|
|
28
|
+
WSA --> B1[behavior-logic]
|
|
29
|
+
B1 --> GB{Behavior output verified?}
|
|
30
|
+
GB -- fail --> RR2[Re-dispatch behavior-logic]
|
|
29
31
|
RR2 --> GB
|
|
30
|
-
GB -- Yes -->
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
DEG -->
|
|
36
|
-
|
|
32
|
+
GB -- Yes --> MR[Leader: Step 5 write module representation]
|
|
33
|
+
MR --> WSR[Refresh analysis-workspace-state]
|
|
34
|
+
WSR --> NEXT{More modules?}
|
|
35
|
+
NEXT -- Yes --> LOOP
|
|
36
|
+
NEXT -- No --> GR[Leader: Step 6 global representation]
|
|
37
|
+
DEG --> GR
|
|
38
|
+
GR --> WSG[Refresh analysis-workspace-state]
|
|
39
|
+
WSG --> OUT[Leader: Step 8 write SPEC + verification verdict]
|
|
37
40
|
```
|
|
38
41
|
|
|
42
|
+
## Strict Output Paths
|
|
43
|
+
|
|
44
|
+
The Leader MUST lock one `output_root` before dispatch and MUST reject or rerun any node that writes outside its assigned directory. Defaults:
|
|
45
|
+
|
|
46
|
+
- `output_root`: `<output_dir or ~/.a2c_agents/understand>/android-project-analyst`
|
|
47
|
+
- `workspace_state_dir`: `<output_root>/workspace-state`
|
|
48
|
+
- `module_index_dir`: `<output_root>/module-index`
|
|
49
|
+
- `module_root`: `<output_root>/modules/<module_id>`
|
|
50
|
+
- `module_node_dir`: `<module_root>/node-results/<node_id>`
|
|
51
|
+
- `module_representation_dir`: `<module_root>/representation`
|
|
52
|
+
- `global_dir`: `<output_root>/global`
|
|
53
|
+
- `spec_dir`: `<output_root>/SPEC`
|
|
54
|
+
|
|
55
|
+
Required durable artifacts:
|
|
56
|
+
|
|
57
|
+
| Schedule point | Required artifacts |
|
|
58
|
+
|---|---|
|
|
59
|
+
| Output root lock | `<output_root>/run_manifest.json` |
|
|
60
|
+
| Workspace state | `<workspace_state_dir>/analysis_workspace_state.json`, `<workspace_state_dir>/analysis_workspace_state.md` |
|
|
61
|
+
| Module inventory | `<module_index_dir>/module_inventory.json`, `<module_index_dir>/module_inventory.md` |
|
|
62
|
+
| Per module brief | `<module_root>/module_brief.json` |
|
|
63
|
+
| Per module node outputs | `<module_node_dir>/<node_artifact>.json`, `<module_node_dir>/<node_artifact>.md` |
|
|
64
|
+
| Per module representation | `<module_representation_dir>/module_representation.json`, `<module_representation_dir>/module_representation.md` |
|
|
65
|
+
| Global representation | `<global_dir>/global_representation.json`, `<global_dir>/global_representation.md` |
|
|
66
|
+
| SPEC package | `<spec_dir>/prd.md`, `<spec_dir>/design.md`, `<spec_dir>/verification.md`, plus `<spec_dir>/plan.md` in migration mode |
|
|
67
|
+
|
|
68
|
+
No node may choose its own output path. `presentation-resource` may write downloaded resources only under `<module_root>/node-results/presentation-resource/downloaded_resources/`.
|
|
69
|
+
|
|
39
70
|
## Detailed Steps
|
|
40
71
|
|
|
41
72
|
### Step 0 — Pre-flight: dependency check
|
|
42
73
|
|
|
43
74
|
- **Executor**: Leader (`android-project-analyst` controller)
|
|
44
75
|
- **Input**: [dependencies.yaml](dependencies.yaml)
|
|
45
|
-
- **Action**: verify each `tools[]` entry (`rg`, `curl`) is available; built-in Grep/Read substitute when `rg` is absent.
|
|
76
|
+
- **Action**: verify each `tools[]` entry (`rg`, `curl`, `git`) is available; built-in Grep/Read substitute when `rg` is absent. Presentation/resource downloads degrade to `download_gaps` when `curl` is absent. Stale-input detection degrades to artifact-path/status comparison when `git` is absent.
|
|
46
77
|
- **Output**: pre-flight note to the user
|
|
47
78
|
- **Quality gate**: all deps are `required: false` → the run proceeds even if missing; user is informed of any degraded mode. The Leader does NOT auto-skip nodes.
|
|
48
79
|
|
|
49
|
-
### Step 1 — Trigger verification + mode selection +
|
|
80
|
+
### Step 1 — Trigger verification + mode selection + output root lock
|
|
50
81
|
|
|
51
82
|
- **Executor**: Leader
|
|
52
83
|
- **Input**: `source_project_path`, optional `analysis_scope` / `mode` / `target_project_path` / `output_dir` / `language`, optional `jetbrains` MCP context
|
|
53
|
-
- **Action**: verify the target is an Android project (`AndroidManifest.xml`, `settings.gradle(.kts)`, `build.gradle(.kts)`, or a `com.android.*` module) and that the request needs structured analysis, not a one-off lookup. Select `exploration` or `migration`.
|
|
54
|
-
- **Output**: announced mode banner +
|
|
84
|
+
- **Action**: verify the target is an Android project (`AndroidManifest.xml`, `settings.gradle(.kts)`, `build.gradle(.kts)`, or a `com.android.*` module) and that the request needs structured analysis, not a one-off lookup. Select `exploration` or `migration`. Lock `output_root`, `module_index_dir`, `global_dir`, and `spec_dir`. Write `run_manifest.json` with source path, mode, target path, scope, schedule version, allowed path roots, and timestamp.
|
|
85
|
+
- **Output**: announced mode banner + `run_manifest.json`; default `output_root` = `~/.a2c_agents/understand/android-project-analyst`
|
|
55
86
|
- **Serial / Parallel**: serial (precedes all dispatch)
|
|
56
|
-
- **Quality gate**: Android evidence present AND scope valid → proceed; otherwise STOP and explain the failed check
|
|
87
|
+
- **Quality gate**: Android evidence present AND scope valid AND `run_manifest.json` exists/non-empty → proceed; otherwise STOP and explain the failed check. Migration mode without `target_project_path` → ask before producing `plan.md`.
|
|
57
88
|
|
|
58
|
-
### Step 2 —
|
|
89
|
+
### Step 2 — Workspace state ledger
|
|
59
90
|
|
|
60
|
-
- **Executor**: `
|
|
61
|
-
- **Input**:
|
|
62
|
-
- **Action**:
|
|
63
|
-
- **Output**: `
|
|
64
|
-
- **Serial / Parallel**:
|
|
65
|
-
- **Quality gate**:
|
|
91
|
+
- **Executor**: `analysis-workspace-state`
|
|
92
|
+
- **Input**: output root, run manifest, current controller step, known module/node/artifact outputs, source change/timestamp evidence, rerun reports, blockers
|
|
93
|
+
- **Action**: initialize and refresh the analysis ledger. Track module status, node output inventory, artifact inventory, stale upstream inputs, rerun history, blockers, and next safe controller actions.
|
|
94
|
+
- **Output**: `analysis_workspace_state.json`, `analysis_workspace_state.md`
|
|
95
|
+
- **Serial / Parallel**: serial; refreshed after module inventory, Stage A, Stage B, module representation, global representation, and SPEC.
|
|
96
|
+
- **Quality gate**: downstream stages do not consume artifacts marked stale; rerun the responsible module/node or mark the affected module `blocked`.
|
|
66
97
|
|
|
67
|
-
### Step 3 —
|
|
98
|
+
### Step 3 — Module inventory and schedule
|
|
68
99
|
|
|
69
|
-
- **Executor**:
|
|
70
|
-
- **Input**:
|
|
71
|
-
- **Action**:
|
|
72
|
-
- **Output**: `
|
|
73
|
-
- **Serial / Parallel**:
|
|
74
|
-
- **Quality gate**:
|
|
100
|
+
- **Executor**: Leader
|
|
101
|
+
- **Input**: source path, analysis scope, Android evidence, module/build files, optional MCP module context
|
|
102
|
+
- **Action**: partition the project into explicit `analysis_modules`. Prefer Gradle modules and feature packages; when one Gradle module contains multiple independent features, split by package/route/feature boundary. Each module entry MUST include `module_id` (stable slug), `module_type` (`app | feature | ui | logic | data | platform | shared | test | unknown`), `source_roots`, `ui_scope`, `logic_scope`, `data_scope`, `resource_scope`, `depends_on`, and `module_output_root`. Include UI-only and logic-only modules when they exist; if a module has no UI or no logic, record `none` with evidence.
|
|
103
|
+
- **Output**: `module_inventory.json`, `module_inventory.md`
|
|
104
|
+
- **Serial / Parallel**: serial (precedes all module dispatch)
|
|
105
|
+
- **Quality gate**: module inventory exists/non-empty, every in-scope source root is assigned to one module or `out_of_scope`, and `module_order` is deterministic.
|
|
75
106
|
|
|
76
|
-
### Step 4 — Stage
|
|
107
|
+
### Step 4 — Stage A per module: dispatch clustered foundation nodes (parallel, B-pattern)
|
|
77
108
|
|
|
78
|
-
- **Executor**: `
|
|
79
|
-
- **Input**:
|
|
80
|
-
- **Action**:
|
|
81
|
-
- **Output**: `
|
|
82
|
-
- **Serial / Parallel**:
|
|
83
|
-
- **Quality gate**: return-
|
|
109
|
+
- **Executor**: `presentation-resource`, `project-architecture`, `data-contract-flow`
|
|
110
|
+
- **Input**: per-node contract `{ source_project_path, module_id, module_scope, analysis_scope, mode, module_brief_path, skill_spec_path (roles/<id>.md), output_dir: <output_root>/modules/<module_id>/node-results/<node_id>, return_format: json }`; `data-contract-flow` may also receive `presentation_hints` when known.
|
|
111
|
+
- **Action**: each node validates inputs, performs its bounded clustered slice, writes its JSON+MD artifacts, and returns the controller JSON shape.
|
|
112
|
+
- **Output**: `presentation_resource.*`, `project_architecture.*`, `data_contract_flow.*`
|
|
113
|
+
- **Serial / Parallel**: parallel within one module — all three run together for the same `module_id`. Do not start the next module until the current module representation is written unless the user explicitly allows concurrent modules.
|
|
114
|
+
- **Quality gate**: each return must be `status: "completed"` with `output_files` that exist and are non-empty. Refresh `analysis-workspace-state` after the group; on missing/empty/non-`completed`/stale output → re-dispatch that node with the same contract plus the failure reason (retry policy in [bind.md](bind.md) § Failure Handling). Do NOT synthesize around a failed node.
|
|
115
|
+
|
|
116
|
+
### Step 5 — Stage B per module: dispatch behavior logic node (gated handoff, C-pattern)
|
|
117
|
+
|
|
118
|
+
- **Executor**: `behavior-logic`
|
|
119
|
+
- **Input**: required `module_id`, `module_scope`, `presentation_resource_path`, `project_architecture_path`, `data_contract_flow_path`, and latest `analysis_workspace_state_path`
|
|
120
|
+
- **Action**: synthesize user-action / lifecycle / state-machine / business-rule behavior, referencing (not rebuilding) upstream catalogs.
|
|
121
|
+
- **Output**: `behavior_logic.*`
|
|
122
|
+
- **Serial / Parallel**: serial within the module — runs after that module's Stage A gate passes.
|
|
123
|
+
- **Quality gate**: latest workspace state must not mark Stage A inputs stale; return-shape + output-file checks; every major UI/logic scope from the module brief has behavior coverage or an explicit reason for none.
|
|
124
|
+
|
|
125
|
+
### Step 6 — Module representation
|
|
126
|
+
|
|
127
|
+
- **Executor**: Leader
|
|
128
|
+
- **Input**: verified node JSON/MD outputs for one `module_id`
|
|
129
|
+
- **Action**: integrate ONLY from verified outputs for that module. Write a module representation that covers both UI and logic when present: module purpose, UI surface, resources, architecture/ecosystem, data contracts/flows, behavior logic, dependencies, risks, gaps, evidence index, and readiness.
|
|
130
|
+
- **Output**: `module_representation.json`, `module_representation.md`
|
|
131
|
+
- **Serial / Parallel**: serial
|
|
132
|
+
- **Quality gate**: no unknowns hidden; every module representation points to its node artifacts and source evidence. Refresh workspace state after writing. Do not proceed to global integration until every scheduled module is represented or explicitly marked blocked/out of scope.
|
|
84
133
|
|
|
85
|
-
### Step
|
|
134
|
+
### Step 7 — Global representation
|
|
86
135
|
|
|
87
136
|
- **Executor**: Leader
|
|
88
|
-
- **Input**: all verified
|
|
89
|
-
- **Action**:
|
|
90
|
-
- **Output**:
|
|
137
|
+
- **Input**: all verified module representations
|
|
138
|
+
- **Action**: combine module representations into a total full-project global representation. Preserve module boundaries first, then synthesize cross-module architecture, navigation, data dependencies, shared resources, shared logic, platform constraints, conflicts, and global readiness. Do not read raw source to fill gaps at this stage; rerun the responsible module/node instead.
|
|
139
|
+
- **Output**: `global_representation.json`, `global_representation.md`
|
|
91
140
|
- **Serial / Parallel**: serial
|
|
92
|
-
- **Quality gate**:
|
|
141
|
+
- **Quality gate**: latest workspace state must not mark required module representations stale; every global claim maps to a module representation and source-path evidence, or is marked `assumed`, `unknown`, or `blocked`.
|
|
93
142
|
|
|
94
|
-
### Step
|
|
143
|
+
### Step 8 — Final: write SPEC package + emit completion report
|
|
95
144
|
|
|
96
145
|
- **Executor**: Leader
|
|
97
|
-
- **Input**:
|
|
98
|
-
- **Action**: write SPEC artifacts under `<
|
|
146
|
+
- **Input**: `global_representation.json`, `global_representation.md`, module inventory, module representations, latest `analysis_workspace_state.json`
|
|
147
|
+
- **Action**: write SPEC artifacts under `<output_root>/SPEC`. **Exploration** mode → `prd.md`, `design.md`, `verification.md`. **Migration** mode → adds `plan.md`. SPEC must synthesize, not paste node summaries; every important claim maps to module/global representation evidence and source paths or is marked assumption/gap. `design.md` sections include a Mermaid diagram, structured table, or evidence mapping; presentation/navigation, project architecture, data-contract/flow, and cross-module sections include diagrams when evidence exists.
|
|
99
148
|
- **Output**: SPEC files + the completion report below
|
|
100
149
|
|
|
101
150
|
#### Final Report Format
|
|
@@ -106,15 +155,12 @@ graph TD
|
|
|
106
155
|
"mode": "exploration | migration",
|
|
107
156
|
"source_project_path": "...",
|
|
108
157
|
"target_project_path": "... or null",
|
|
109
|
-
"
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
"data_flow": ["..."],
|
|
116
|
-
"logic_understand": ["..."]
|
|
117
|
-
},
|
|
158
|
+
"output_root": "...",
|
|
159
|
+
"workspace_state": ["..."],
|
|
160
|
+
"module_inventory": ["..."],
|
|
161
|
+
"module_representations": ["..."],
|
|
162
|
+
"global_representation": ["..."],
|
|
163
|
+
"node_outputs_by_module": {},
|
|
118
164
|
"spec_outputs": ["..."],
|
|
119
165
|
"readiness": "ready | ready_with_assumptions | blocked",
|
|
120
166
|
"blocking_gaps": []
|
|
@@ -124,9 +170,11 @@ graph TD
|
|
|
124
170
|
## Acceptance Criteria
|
|
125
171
|
|
|
126
172
|
- All dispatched nodes returned outputs matching their role `## Output Schema` (no malformed returns); any `[ROLE MISSING]` is recorded per [bind.md](bind.md).
|
|
127
|
-
- All required node artifacts exist and are non-empty; all required SPEC artifacts for the selected mode exist and are non-empty.
|
|
128
|
-
- **
|
|
129
|
-
- **
|
|
130
|
-
-
|
|
173
|
+
- All required node artifacts exist and are non-empty; latest `analysis-workspace-state` has no stale required inputs; all required SPEC artifacts for the selected mode exist and are non-empty.
|
|
174
|
+
- **Path check**: every artifact path is under `output_root`; every node artifact is under `<output_root>/modules/<module_id>/node-results/<node_id>/`; SPEC is under `<output_root>/SPEC`.
|
|
175
|
+
- **Module-first check**: every scheduled module has a module brief, node outputs, and module representation before global representation is written.
|
|
176
|
+
- **Coverage check (B-pattern)**: every per-module Stage A slice is accounted for — screens/resources from `presentation-resource`, topology/platform constraints from `project-architecture`, and APIs/data flows from `data-contract-flow` appear in module/global representations or are marked out of scope/unknown.
|
|
177
|
+
- **Gate check (C-pattern)**: per-module behavior analysis ran only after that module's Stage A verification; every kicked-back node is recorded.
|
|
178
|
+
- Data-flow and behavior-flow names align across `design.md`, `plan.md`, and `verification.md`.
|
|
131
179
|
- `verification.md` carries a readiness verdict (`ready | ready_with_assumptions | blocked`); if `blocked`, the final response lists blockers and exact missing evidence.
|
|
132
180
|
- No artifact claims certainty for unknown or dynamic code paths.
|
|
@@ -41,4 +41,64 @@ The registry separated controller from nodes and even encoded the staged dispatc
|
|
|
41
41
|
|
|
42
42
|
## Team-vs-single delta
|
|
43
43
|
|
|
44
|
-
The conversion preserves every source contract while adding: explicit pipeline + parallel + loop topology with verifiable gates, per-role anti-overlap boundaries that name siblings, self-contained pasteable personas (no re-derivation per dispatch across 20 nodes), resource/token/wall-clock budgets plus a `max_review_fix_cycles` bound, failure-routing rules, and concrete degraded modes for large monorepos and missing tooling. The same-name controller subagent in `kmp-migration/agents/android-to-kmp-migrator.md`
|
|
44
|
+
The conversion preserves every source contract while adding: explicit pipeline + parallel + loop topology with verifiable gates, per-role anti-overlap boundaries that name siblings, self-contained pasteable personas (no re-derivation per dispatch across 20 nodes), resource/token/wall-clock budgets plus a `max_review_fix_cycles` bound, failure-routing rules, and concrete degraded modes for large monorepos and missing tooling. The same-name controller subagent in `kmp-migration/agents/android-to-kmp-migrator.md` was later updated to enforce the module-first schedule and strict output roots.
|
|
45
|
+
|
|
46
|
+
## Module-First Refactor (0.3)
|
|
47
|
+
|
|
48
|
+
The second refactor added a module-first migration schedule and strict output paths. It initially kept the 20-role shape, then Phase 0.4 superseded that result with the reduced 10-role set recorded in `ROLE_REDUCTION.md`.
|
|
49
|
+
|
|
50
|
+
### New schedule
|
|
51
|
+
|
|
52
|
+
1. Lock `output_root = <output_dir or ~/.a2c_agents/migration>/android-to-kmp-migrator`.
|
|
53
|
+
2. Write `<output_root>/run_manifest.json`.
|
|
54
|
+
3. Write `<output_root>/module-index/migration_module_inventory.json` and `.md`.
|
|
55
|
+
4. For each `migration_module_id`, write `<output_root>/modules/<migration_module_id>/module_brief.json`.
|
|
56
|
+
5. Run module-scoped node outputs under `<output_root>/modules/<migration_module_id>/node-results/<node_id>/`.
|
|
57
|
+
6. Run review/fix loops per module and owning node slice.
|
|
58
|
+
7. Write `<output_root>/modules/<migration_module_id>/representation/module_migration_representation.json` and `.md`.
|
|
59
|
+
8. Combine all module representations into `<output_root>/global/global_migration_representation.json` and `.md`.
|
|
60
|
+
9. Write final `<output_root>/report/migration_report.json` and `.md`.
|
|
61
|
+
10. Hand the final report to `kmp-test-validator`.
|
|
62
|
+
|
|
63
|
+
### Contract changes
|
|
64
|
+
|
|
65
|
+
- Every module-scoped node now receives `migration_module_id`, `module_scope`, exact `output_dir`, and allowed target files/source sets when it may change files.
|
|
66
|
+
- Review mode remains read-only. Fix mode consumes explicit findings, `allowed_files`, `owning_node`, and `migration_module_id`; re-review is a fresh read-only invocation.
|
|
67
|
+
- Verification runs per module first. Global aggregation consumes module representations rather than loose node output lists.
|
|
68
|
+
- `migration-report` may return `ready_for_validation` only when every scheduled module representation and the global representation exists and is non-empty.
|
|
69
|
+
|
|
70
|
+
### Path compatibility
|
|
71
|
+
|
|
72
|
+
The old default `~/.a2c_agents/migration/` is now only the base directory. The effective output root is always:
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
<output_dir or ~/.a2c_agents/migration>/android-to-kmp-migrator
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
No controller or node should write durable migration artifacts directly under the base directory.
|
|
79
|
+
|
|
80
|
+
## Role Reduction Refactor (0.4)
|
|
81
|
+
|
|
82
|
+
The third refactor reduces active migrator role definitions from 20 to 10. The full analysis lives in [ROLE_REDUCTION.md](ROLE_REDUCTION.md).
|
|
83
|
+
|
|
84
|
+
### Old-to-new map
|
|
85
|
+
|
|
86
|
+
| Old role(s) | Active role |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `migration-workspace-state` | `migration-workspace-state` |
|
|
89
|
+
| `legacy-spec-delta-review`, `target-project-understand`, `migration-alignment` | `migration-analysis-planning` |
|
|
90
|
+
| `dependency-resolution`, `platform-api-replacement` | `dependency-platform-gate` |
|
|
91
|
+
| `theme-design-system-mapping`, `resource-migration`, `navigation-migration` | `presentation-integration` |
|
|
92
|
+
| `state-model-mapping` plus API/data preparation expectations | `state-data-prep` |
|
|
93
|
+
| `ui-mockup-implementation` | `ui-implementation` |
|
|
94
|
+
| `dataflow-logic-implementation` | `logic-implementation` |
|
|
95
|
+
| `module-node-migration-review`, `module-node-migration-fix` | `module-node-review-fix` with `mode: review | fix` |
|
|
96
|
+
| `source-set-placement-guard`, `api-contract-parity`, `ui-render-fidelity-check`, `incremental-build-check` | `migration-verification` with stable `check_ids` |
|
|
97
|
+
| `prd-completion-check`, `migration-report` | `completion-report` with `mode: readiness | report` |
|
|
98
|
+
|
|
99
|
+
### Safety preserved by modes
|
|
100
|
+
|
|
101
|
+
- Review and fix are in one role file but must run as separate invocations.
|
|
102
|
+
- Verification is consolidated but still read-only for source changes and uses explicit check IDs.
|
|
103
|
+
- Completion and report are consolidated but report mode is blocked until readiness mode and module/global representation gates pass.
|
|
104
|
+
- Build-config changes remain owned only by `dependency-platform-gate`.
|