prizmkit 1.1.153 → 1.1.155
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/bundled/VERSION.json +3 -3
- package/bundled/adapters/codex/skill-adapter.js +1 -1
- package/bundled/adapters/pi/skill-adapter.js +2 -1
- package/bundled/dev-pipeline/.env.example +2 -6
- package/bundled/dev-pipeline/README.md +120 -113
- package/bundled/dev-pipeline/assets/skill-subagent-integration.md +1 -1
- package/bundled/dev-pipeline/prizmkit_runtime/checkpoint_state.py +355 -15
- package/bundled/dev-pipeline/prizmkit_runtime/cli.py +189 -110
- package/bundled/dev-pipeline/prizmkit_runtime/commands.py +146 -111
- package/bundled/dev-pipeline/prizmkit_runtime/daemon.py +4 -20
- package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +48 -14
- package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +0 -1
- package/bundled/dev-pipeline/prizmkit_runtime/paths.py +0 -3
- package/bundled/dev-pipeline/prizmkit_runtime/reset.py +122 -15
- package/bundled/dev-pipeline/prizmkit_runtime/reset_preserve.py +1 -1
- package/bundled/dev-pipeline/prizmkit_runtime/runner_classification.py +50 -2
- package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +1 -10
- package/bundled/dev-pipeline/prizmkit_runtime/runner_prompts.py +3 -3
- package/bundled/dev-pipeline/prizmkit_runtime/runners.py +139 -74
- package/bundled/dev-pipeline/prizmkit_runtime/runtime_commit.py +482 -0
- package/bundled/dev-pipeline/prizmkit_runtime/status.py +106 -1
- package/bundled/dev-pipeline/prizmkit_runtime/test_result.py +64 -11
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +145 -367
- package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +91 -62
- package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +105 -69
- package/bundled/dev-pipeline/scripts/init-bugfix-pipeline.py +2 -2
- package/bundled/dev-pipeline/scripts/prompt_framework.py +36 -41
- package/bundled/dev-pipeline/scripts/update-bug-status.py +197 -71
- package/bundled/dev-pipeline/scripts/update-checkpoint.py +77 -16
- package/bundled/dev-pipeline/scripts/update-feature-status.py +46 -121
- package/bundled/dev-pipeline/scripts/update-refactor-status.py +46 -123
- package/bundled/dev-pipeline/scripts/utils.py +119 -0
- package/bundled/dev-pipeline/templates/bootstrap-prompt.md +22 -27
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +71 -104
- package/bundled/dev-pipeline/templates/bug-fix-list-schema.json +3 -2
- package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +59 -111
- package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +37 -72
- package/bundled/dev-pipeline/templates/sections/artifact-manifest.md +39 -0
- package/bundled/dev-pipeline/templates/sections/bugfix-critical-paths.md +3 -1
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-commit-report.md +8 -25
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-diagnose-plan.md +3 -3
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-implement.md +2 -2
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-review.md +3 -3
- package/bundled/dev-pipeline/templates/sections/bugfix-phase-test.md +2 -2
- package/bundled/dev-pipeline/templates/sections/bugfix-reminders.md +4 -4
- package/bundled/dev-pipeline/templates/sections/bugfix-session-context.md +0 -1
- package/bundled/dev-pipeline/templates/sections/checkpoint-system.md +7 -4
- package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +14 -27
- package/bundled/dev-pipeline/templates/sections/feature-completion-summary.md +20 -0
- package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +8 -71
- package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +7 -7
- package/bundled/dev-pipeline/templates/sections/phase-prizmkit-test.md +3 -3
- package/bundled/dev-pipeline/templates/sections/phase-review-full.md +4 -4
- package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +5 -17
- package/bundled/dev-pipeline/templates/sections/refactor-critical-paths.md +3 -1
- package/bundled/dev-pipeline/templates/sections/refactor-phase-commit-report.md +10 -23
- package/bundled/dev-pipeline/templates/sections/refactor-phase-implement.md +2 -2
- package/bundled/dev-pipeline/templates/sections/refactor-phase-plan.md +2 -2
- package/bundled/dev-pipeline/templates/sections/refactor-phase-review.md +3 -3
- package/bundled/dev-pipeline/templates/sections/refactor-phase-test.md +2 -2
- package/bundled/dev-pipeline/templates/sections/refactor-reminders.md +7 -7
- package/bundled/dev-pipeline/templates/sections/refactor-session-context.md +0 -1
- package/bundled/dev-pipeline/templates/sections/retrospective.md +12 -0
- package/bundled/dev-pipeline/templates/sections/runtime-commit-handoff.md +35 -0
- package/bundled/dev-pipeline/templates/session-status-schema.json +45 -62
- package/bundled/dev-pipeline/tests/test_auto_skip.py +111 -32
- package/bundled/dev-pipeline/tests/test_checkpoint_state.py +617 -30
- package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +262 -194
- package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +62 -23
- package/bundled/dev-pipeline/tests/test_generate_refactor_prompt.py +76 -28
- package/bundled/dev-pipeline/tests/test_python_runner_parity.py +281 -206
- package/bundled/dev-pipeline/tests/test_recovery_workflow.py +322 -0
- package/bundled/dev-pipeline/tests/test_reset_modes.py +935 -0
- package/bundled/dev-pipeline/tests/test_reset_preserve.py +5 -7
- package/bundled/dev-pipeline/tests/test_runtime_commit.py +608 -0
- package/bundled/dev-pipeline/tests/test_unified_cli.py +617 -188
- package/bundled/skills/_metadata.json +9 -9
- package/bundled/skills/app-planner/SKILL.md +3 -3
- package/bundled/skills/app-planner/references/generated-plan-review.md +2 -1
- package/bundled/skills/app-planner/references/rules/backend/derivation-rules.md +56 -64
- package/bundled/skills/app-planner/references/rules/backend/fixed-rules.md +85 -240
- package/bundled/skills/app-planner/references/rules/backend/question-bank.md +25 -25
- package/bundled/skills/app-planner/references/rules/backend/question-manifest.json +16 -7
- package/bundled/skills/app-planner/references/rules/backend/template.md +74 -92
- package/bundled/skills/app-planner/references/rules/database/derivation-rules.md +93 -93
- package/bundled/skills/app-planner/references/rules/database/fixed-rules.md +66 -173
- package/bundled/skills/app-planner/references/rules/database/question-bank.md +31 -26
- package/bundled/skills/app-planner/references/rules/database/question-manifest.json +13 -4
- package/bundled/skills/app-planner/references/rules/database/template.md +76 -98
- package/bundled/skills/app-planner/references/rules/frontend/derivation-rules.md +68 -95
- package/bundled/skills/app-planner/references/rules/frontend/fixed-rules.md +93 -166
- package/bundled/skills/app-planner/references/rules/frontend/question-bank.md +46 -36
- package/bundled/skills/app-planner/references/rules/frontend/question-manifest.json +11 -2
- package/bundled/skills/app-planner/references/rules/frontend/template.md +79 -257
- package/bundled/skills/app-planner/references/rules/mobile/derivation-rules.md +91 -99
- package/bundled/skills/app-planner/references/rules/mobile/fixed-rules.md +73 -246
- package/bundled/skills/app-planner/references/rules/mobile/question-bank.md +17 -17
- package/bundled/skills/app-planner/references/rules/mobile/question-manifest.json +17 -2
- package/bundled/skills/app-planner/references/rules/mobile/template.md +73 -85
- package/bundled/skills/app-planner/references/rules-configuration.md +133 -65
- package/bundled/skills/app-planner/scripts/validate-rules-configuration.py +291 -0
- package/bundled/skills/bug-planner/references/schema-validation.md +1 -1
- package/bundled/skills/bug-planner/scripts/validate-bug-list.py +1 -1
- package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +21 -13
- package/bundled/skills/feature-pipeline-launcher/SKILL.md +22 -14
- package/bundled/skills/prizmkit/SKILL.md +17 -18
- package/bundled/skills/prizmkit/references/workflow-state-protocol.md +22 -18
- package/bundled/skills/prizmkit-code-review/SKILL.md +22 -58
- package/bundled/skills/prizmkit-code-review/references/independent-code-review.md +6 -6
- package/bundled/skills/prizmkit-code-review/references/review-report-template.md +2 -2
- package/bundled/skills/prizmkit-committer/SKILL.md +82 -132
- package/bundled/skills/prizmkit-deploy/SKILL.md +27 -11
- package/bundled/skills/prizmkit-deploy/assets/deploy-document-template.md +89 -0
- package/bundled/skills/prizmkit-deploy/references/ci-cd-workflows.md +44 -14
- package/bundled/skills/prizmkit-deploy/references/cloud-platform-deploy.md +19 -3
- package/bundled/skills/prizmkit-deploy/references/database-setup.md +22 -12
- package/bundled/skills/prizmkit-deploy/references/deploy-config-schema.md +3 -1
- package/bundled/skills/prizmkit-deploy/references/deploy-history-schema.md +22 -6
- package/bundled/skills/prizmkit-deploy/references/deploy-metadata-schema.json +49 -0
- package/bundled/skills/prizmkit-deploy/references/live-validation-notes.md +1 -1
- package/bundled/skills/prizmkit-deploy/references/pending-input-schema.json +164 -0
- package/bundled/skills/prizmkit-deploy/references/ssh-adapter-flow.md +9 -8
- package/bundled/skills/prizmkit-deploy/references/ssh-execution-flow.md +6 -6
- package/bundled/skills/prizmkit-implement/SKILL.md +30 -66
- package/bundled/skills/prizmkit-implement/references/implementation-subagent-procedure.md +4 -4
- package/bundled/skills/prizmkit-init/SKILL.md +4 -0
- package/bundled/skills/prizmkit-plan/SKILL.md +21 -64
- package/bundled/skills/prizmkit-plan/references/artifact-identity.md +38 -0
- package/bundled/skills/prizmkit-plan/references/independent-plan-review.md +4 -4
- package/bundled/skills/prizmkit-plan/references/review-plan-spec-loop.md +5 -5
- package/bundled/skills/prizmkit-prizm-docs/SKILL.md +11 -1
- package/bundled/skills/prizmkit-retrospective/SKILL.md +63 -77
- package/bundled/skills/prizmkit-retrospective/references/knowledge-injection-steps.md +3 -3
- package/bundled/skills/prizmkit-retrospective/references/retrospective-result-schema.json +138 -0
- package/bundled/skills/prizmkit-retrospective/references/structural-sync-steps.md +17 -23
- package/bundled/skills/prizmkit-test/SKILL.md +64 -51
- package/bundled/skills/prizmkit-test/references/boundary-contract-and-test-double-guidance.md +206 -0
- package/bundled/skills/prizmkit-test/references/independent-test-review.md +17 -9
- package/bundled/skills/prizmkit-test/references/test-coverage-model.md +45 -21
- package/bundled/skills/prizmkit-test/references/test-report-template.md +20 -13
- package/bundled/skills/prizmkit-workflow/SKILL.md +35 -37
- package/bundled/skills/prizmkit-workflow/references/artifact-identity.md +34 -0
- package/bundled/skills/prizmkit-workflow/references/workflow-state-protocol.md +22 -18
- package/bundled/skills/recovery-workflow/SKILL.md +9 -6
- package/bundled/skills/recovery-workflow/evals/evals.json +2 -2
- package/bundled/skills/recovery-workflow/references/detection.md +7 -6
- package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +16 -6
- package/bundled/skills/refactor-pipeline-launcher/SKILL.md +21 -13
- package/bundled/templates/project-memory-template.md +19 -11
- package/package.json +1 -1
- package/src/scaffold.js +33 -22
- package/bundled/dev-pipeline/prizmkit_runtime/runner_recovery.py +0 -228
- package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +0 -767
- package/bundled/dev-pipeline/templates/sections/bugfix-artifacts.md +0 -16
- package/bundled/dev-pipeline/templates/sections/bugfix-session-status.md +0 -31
- package/bundled/dev-pipeline/templates/sections/critical-paths-agent.md +0 -7
- package/bundled/dev-pipeline/templates/sections/critical-paths-lite.md +0 -7
- package/bundled/dev-pipeline/templates/sections/directory-convention-agent.md +0 -9
- package/bundled/dev-pipeline/templates/sections/directory-convention-lite.md +0 -6
- package/bundled/dev-pipeline/templates/sections/headless-commit-authorization.md +0 -15
- package/bundled/dev-pipeline/templates/sections/phase-commit.md +0 -61
- package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +0 -24
- package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-lite-suffix.md +0 -12
- package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +0 -44
- package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +0 -25
- package/bundled/dev-pipeline/templates/sections/phase-plan-agent.md +0 -20
- package/bundled/dev-pipeline/templates/sections/phase-plan-lite.md +0 -20
- package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +0 -20
- package/bundled/dev-pipeline/templates/sections/refactor-artifacts.md +0 -17
- package/bundled/dev-pipeline/templates/sections/refactor-session-status.md +0 -28
- package/bundled/dev-pipeline/templates/sections/test-failure-recovery-agent.md +0 -52
- package/bundled/dev-pipeline/templates/sections/test-failure-recovery-lite.md +0 -52
- package/bundled/skills/prizmkit-code-review/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-committer/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-implement/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-plan/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-retrospective/references/workflow-state-protocol.md +0 -174
- package/bundled/skills/prizmkit-test/references/external-contract-mock-guidance.md +0 -119
|
@@ -1,290 +1,117 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Mobile Invariant Rules
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> These rules are industry consensus / best practices — **do not ask the user**.
|
|
5
|
-
> Every rule includes RATIONALE so the AI understands intent, not just constraints.
|
|
3
|
+
POLICY_CLASS: invariant
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
These blocks apply across Flutter, React Native, iOS, Android, and dual-native projects without forcing one platform's conventions onto another.
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
**Selected-decision boundary:** platform, minimum OS support, architecture, UI framework, navigation/deep linking, state management, networking library, persistence, push, background work, permissions timing, testing depth, distribution, performance target, accessibility target, dependency permission, caller analysis, and platform flexibility belong to confirmed decisions and derivation rules.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
## I1. Platform Ownership
|
|
12
10
|
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- iOS: `AppName/` (Swift sources), `AppNameTests/`, `AppName.xcodeproj`
|
|
17
|
-
- Android: `app/src/main/java/`, `app/src/test/`, `app/build.gradle`
|
|
18
|
-
- **Rule**: Shared cross-platform code goes in `shared/` or `core/` directory.
|
|
19
|
-
- **Forbidden**: Mixing platform-specific and cross-platform code in the same directory.
|
|
20
|
-
- **RATIONALE**: Clean platform separation is the first defense against accidental platform coupling.
|
|
11
|
+
- Separate shared behavior from platform-specific adapters using the selected project structure.
|
|
12
|
+
- Apply only the conventions of the active platform profile; dual-native projects maintain distinct iOS and Android profiles.
|
|
13
|
+
- Public shared contracts state platform capability differences rather than hiding them behind accidental conditionals.
|
|
21
14
|
|
|
22
|
-
|
|
15
|
+
Inject into `{{ FIXED_RULES_STRUCTURE }}`.
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
- **Rule**: Within each feature directory, enforce the chosen architecture pattern (MVVM/Clean Architecture/MVI).
|
|
26
|
-
- **Forbidden**: Circular dependencies between feature modules.
|
|
27
|
-
- **RATIONALE**: Feature-based organization keeps related code together and limits blast radius of changes.
|
|
17
|
+
## I2. UI Integrity
|
|
28
18
|
|
|
29
|
-
|
|
19
|
+
- Components have explicit input, output, state, and sizing behavior.
|
|
20
|
+
- Use the selected design system or platform theme consistently; document unavoidable platform-specific deviations.
|
|
21
|
+
- Adapt safe areas, text scaling, and supported orientations according to the confirmed product and platform profiles.
|
|
30
22
|
|
|
31
|
-
|
|
32
|
-
- **React Native**: Component files PascalCase (`UserProfileScreen.tsx`). Hooks `useXxx.ts`.
|
|
33
|
-
- **iOS/Swift**: Files PascalCase (`UserProfileView.swift`). Protocols start with describable verb.
|
|
34
|
-
- **Android/Kotlin**: Files PascalCase (`UserProfileScreen.kt`). Layout XML snake_case.
|
|
35
|
-
- **RATIONALE**: Consistent naming lets AI and developers find files by convention alone.
|
|
23
|
+
Inject into `{{ FIXED_RULES_UI }}`.
|
|
36
24
|
|
|
37
|
-
|
|
25
|
+
## I3. Navigation Integrity
|
|
38
26
|
|
|
39
|
-
|
|
27
|
+
- Back behavior, restoration, and route ownership are deterministic for the selected navigation strategy.
|
|
28
|
+
- Validate external navigation input before opening a screen or resource.
|
|
29
|
+
- Deep-link requirements apply only when deep linking is selected; simple-stack projects render an explicit no-deep-link decision.
|
|
40
30
|
|
|
41
|
-
|
|
31
|
+
Inject into `{{ FIXED_RULES_NAVIGATION }}`.
|
|
42
32
|
|
|
43
|
-
|
|
44
|
-
- **Rule**: Pass data down, emit events up. Forbid bidirectional data binding between parent and child.
|
|
45
|
-
- **Rule**: Every UI component must specify explicit sizing behavior (intrinsic, expanded, fixed). Forbid relying on implicit defaults.
|
|
46
|
-
- **Forbidden**: Hardcoding colors, font sizes, or spacing values in UI code. Use design tokens or theme.
|
|
47
|
-
- **RATIONALE**: UI is the most change-prone layer. Single-responsibility components make changes localized.
|
|
33
|
+
## I4. State Integrity
|
|
48
34
|
|
|
49
|
-
|
|
35
|
+
- Separate ephemeral UI state from longer-lived business/session state.
|
|
36
|
+
- State ownership and mutation remain observable; avoid uncontrolled global mutable state.
|
|
37
|
+
- Persistence across process death or configuration change is required only for state the product contract marks durable.
|
|
50
38
|
|
|
51
|
-
|
|
52
|
-
- iOS: tab bar at bottom, back swipe gesture, navigation bar with large titles
|
|
53
|
-
- Android: navigation drawer or bottom nav, back button (system), app bar
|
|
54
|
-
- **Rule**: Touch targets must be ≥ 44pt (iOS) / 48dp (Android). Smaller targets need padding.
|
|
55
|
-
- **Forbidden**: Copying UI patterns from one platform to another without adapting to HIG.
|
|
56
|
-
- **RATIONALE**: Users expect platform-native behavior. Violating HIG causes rejection from App Store review.
|
|
39
|
+
Inject into `{{ FIXED_RULES_STATE }}`.
|
|
57
40
|
|
|
58
|
-
|
|
41
|
+
## I5. Network Safety
|
|
59
42
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- **Forbidden**: Using fixed pixel dimensions for text containers.
|
|
64
|
-
- **RATIONALE**: Device fragmentation is orders of magnitude worse on mobile than on web.
|
|
43
|
+
- Network work never blocks the UI thread and defines timeout, cancellation, error, and retry/idempotency behavior appropriate to the operation.
|
|
44
|
+
- Protect credentials and personal data in transit using current platform transport security.
|
|
45
|
+
- Certificate pinning, offline queues, and cache policies are opt-in risk decisions, not unconditional requirements.
|
|
65
46
|
|
|
66
|
-
|
|
47
|
+
Inject into `{{ FIXED_RULES_NETWORKING }}`.
|
|
67
48
|
|
|
68
|
-
##
|
|
49
|
+
## I6. Persistence Safety
|
|
69
50
|
|
|
70
|
-
|
|
51
|
+
- Store each data class in a mechanism appropriate to its sensitivity, structure, and lifecycle.
|
|
52
|
+
- Keep secrets and tokens out of plaintext storage.
|
|
53
|
+
- Version persistent model changes and test compatibility with supported prior app versions when migration is required.
|
|
71
54
|
|
|
72
|
-
|
|
73
|
-
- **Rule**: Deep links must resolve to a specific screen regardless of app launch state (cold start, background, foreground).
|
|
74
|
-
- **Rule**: Navigation state must survive process death (save/restore navigation stack).
|
|
75
|
-
- **Forbidden**: Modifying the navigation stack during transition animations.
|
|
76
|
-
- **RATIONALE**: Broken navigation is the #1 cause of mobile app user frustration and 1-star reviews.
|
|
55
|
+
Inject into `{{ FIXED_RULES_PERSISTENCE }}`.
|
|
77
56
|
|
|
78
|
-
|
|
57
|
+
## I7. Platform Feature Safety
|
|
79
58
|
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
- **RATIONALE**: Deep links are an attack surface (open redirect). Unvalidated deep links can expose sensitive screens.
|
|
59
|
+
- Check capability and permission state before invoking a protected platform feature.
|
|
60
|
+
- Handle denial, unavailability, process termination, and token/registration changes without crashing or silently losing owned work.
|
|
61
|
+
- Push and background requirements are injected only when selected; otherwise render them as not applicable.
|
|
84
62
|
|
|
85
|
-
|
|
63
|
+
Inject into `{{ FIXED_RULES_PLATFORM_FEATURES }}`.
|
|
86
64
|
|
|
87
|
-
##
|
|
65
|
+
## I8. Resource Safety
|
|
88
66
|
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
- **Forbidden**: Using global mutable variables as state containers.
|
|
93
|
-
- **RATIONALE**: Uncontrolled shared mutable state is the root of all mobile app heisenbugs — bugs that vanish when you try to reproduce them.
|
|
67
|
+
- Keep expensive CPU, I/O, decoding, and datastore work off the UI thread.
|
|
68
|
+
- Release listeners, observers, tasks, and retained UI owners at the platform lifecycle boundary.
|
|
69
|
+
- Apply numeric frame, memory, and package-size budgets only from the selected performance target.
|
|
94
70
|
|
|
95
|
-
|
|
71
|
+
Inject into `{{ FIXED_RULES_PERFORMANCE }}`.
|
|
96
72
|
|
|
97
|
-
##
|
|
73
|
+
## I9. Accessibility Baseline
|
|
98
74
|
|
|
99
|
-
|
|
75
|
+
- Interactive elements have accessible names and meet the active platform's minimum operability expectations.
|
|
76
|
+
- Support system text scaling and do not convey meaning by color alone.
|
|
77
|
+
- Apply stricter screen-reader, contrast, and audit requirements through the selected accessibility target.
|
|
100
78
|
|
|
101
|
-
|
|
102
|
-
- **Rule**: Network requests must be cancellable (dispose on screen exit to prevent memory leaks and stale UI updates).
|
|
103
|
-
- **Rule**: Sensitive data in transit must use HTTPS with certificate pinning for production builds.
|
|
104
|
-
- **Forbidden**: Making network calls on the main/UI thread.
|
|
105
|
-
- **RATIONALE**: Mobile networks are unreliable by nature. Every network call needs full error handling or it will crash your app.
|
|
79
|
+
Inject into `{{ FIXED_RULES_A11Y }}`.
|
|
106
80
|
|
|
107
|
-
|
|
81
|
+
## I10. Mobile Security
|
|
108
82
|
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
83
|
+
- Treat the distributed application binary and local device as attacker-accessible.
|
|
84
|
+
- Do not embed privileged server secrets or disable platform transport protections to bypass an error.
|
|
85
|
+
- Protect sensitive local content and redact release logs according to the product's data classification.
|
|
86
|
+
- Platform hardening features are enabled according to threat model, not universally.
|
|
113
87
|
|
|
114
|
-
|
|
88
|
+
Inject into `{{ FIXED_RULES_SECURITY }}`.
|
|
115
89
|
|
|
116
|
-
##
|
|
90
|
+
## I11. Verification Integrity
|
|
117
91
|
|
|
118
|
-
|
|
92
|
+
- Follow the selected test depth and framework for each active platform profile.
|
|
93
|
+
- Enabled tests are deterministic and isolate network, clock, device, and backend dependencies as required by the test contract.
|
|
94
|
+
- A `not required yet` selection is recorded with accepted risk instead of contradicted by unconditional three-tier requirements.
|
|
119
95
|
|
|
120
|
-
|
|
121
|
-
- **Rule**: Database migrations must be versioned and tested. Forbid destructive migrations (drop column/table) without a backup step.
|
|
122
|
-
- **Forbidden**: Storing sensitive data (tokens, passwords, PII) in plaintext in any local storage.
|
|
123
|
-
- **RATIONALE**: Local storage is not encrypted by default on all platforms. Assume the device can be compromised.
|
|
96
|
+
Inject into `{{ FIXED_RULES_TEST }}`.
|
|
124
97
|
|
|
125
|
-
|
|
98
|
+
## I12. Distribution Integrity
|
|
126
99
|
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
- **RATIONALE**: The mobile device is a hostile environment — jailbroken/rooted devices can access app sandboxes.
|
|
100
|
+
- Follow the selected distribution channel and its signing, review, rollout, and compliance requirements.
|
|
101
|
+
- Do not inject public-store rules into enterprise-only or undecided distribution profiles.
|
|
102
|
+
- Protect signing material outside source control and make release identity reproducible.
|
|
131
103
|
|
|
132
|
-
|
|
104
|
+
Inject into `{{ FIXED_RULES_DISTRIBUTION }}`.
|
|
133
105
|
|
|
134
|
-
##
|
|
106
|
+
## I13. AI Change Safety
|
|
135
107
|
|
|
136
|
-
|
|
108
|
+
- Read the current platform profile and target feature before editing.
|
|
109
|
+
- Search for existing shared and platform-specific implementations before creating duplicates.
|
|
110
|
+
- Keep changes within scope and report uncertainty about API availability or platform behavior.
|
|
111
|
+
- Dependency, caller-analysis, and cross-platform flexibility permissions come only from selected decision blocks.
|
|
137
112
|
|
|
138
|
-
|
|
139
|
-
- **Rule**: Handle all permission outcomes: granted, denied, denied permanently ("Don't ask again").
|
|
140
|
-
- **Rule**: When a permission is permanently denied, guide the user to system Settings with a clear explanation of why it's needed.
|
|
141
|
-
- **Forbidden**: Crashing or silently failing when a permission is denied.
|
|
142
|
-
- **RATIONALE**: Permission rejection rates are high (30-50% for camera/mic). Crashing on denial is a guaranteed crash report.
|
|
113
|
+
Inject into `{{ FIXED_RULES_AI_BASE }}`.
|
|
143
114
|
|
|
144
|
-
|
|
115
|
+
## Injection Contract
|
|
145
116
|
|
|
146
|
-
-
|
|
147
|
-
- iOS: BGTaskScheduler (short, scheduled) or BGAppRefreshTask
|
|
148
|
-
- Android: WorkManager (deferrable) or Foreground Service (user-visible)
|
|
149
|
-
- **Rule**: Background tasks must be battery-efficient. Forbid polling every few seconds in the background.
|
|
150
|
-
- **Rule**: Background task results must be persisted before task completion (system may kill the process).
|
|
151
|
-
- **RATIONALE**: Mobile OSes aggressively kill background processes. Using the wrong background API means your task never runs.
|
|
152
|
-
|
|
153
|
-
### F7.3 Push Notifications
|
|
154
|
-
|
|
155
|
-
- **Rule**: Notification content must be localized. Forbid hardcoding notification text in English only.
|
|
156
|
-
- **Rule**: Notification tap must navigate to the relevant screen, not just open the app.
|
|
157
|
-
- **Rule**: Handle FCM/APNs token refresh. Stale tokens cause silent notification delivery failure.
|
|
158
|
-
- **Forbidden**: Sending sensitive data (passwords, PII) in notification payloads.
|
|
159
|
-
- **RATIONALE**: Notifications are the primary re-engagement channel. Broken deep links from notifications mean lost users.
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## F8. Performance
|
|
164
|
-
|
|
165
|
-
### F8.1 Main Thread
|
|
166
|
-
|
|
167
|
-
- **Rule**: UI thread (main thread) must stay at 60fps (16ms/frame) or 120fps (8ms/frame). Any work > 1ms offloads to background.
|
|
168
|
-
- **Rule**: JSON parsing, image decoding, database queries must run off the main thread.
|
|
169
|
-
- **Forbidden**: Synchronous I/O on the main thread.
|
|
170
|
-
- **RATIONALE**: Jank (dropped frames) is immediately visible to users. A single 100ms main-thread block drops 6 frames at 60fps.
|
|
171
|
-
|
|
172
|
-
### F8.2 Memory
|
|
173
|
-
|
|
174
|
-
- **Rule**: Avoid memory leaks: unregister listeners/observers in dispose/deinit/onDestroy.
|
|
175
|
-
- **Rule**: Image memory: load scaled images (not full resolution into a thumbnail). Use image caching libraries.
|
|
176
|
-
- **Rule**: Monitor memory warnings. Release cached data when the system sends a memory warning.
|
|
177
|
-
- **Forbidden**: Holding references to Activity/Fragment/ViewController after they're destroyed.
|
|
178
|
-
- **RATIONALE**: Mobile OSes kill apps that exceed memory limits. Memory leaks accumulate and eventually cause OOM crashes.
|
|
179
|
-
|
|
180
|
-
### F8.3 App Size
|
|
181
|
-
|
|
182
|
-
- **Rule**: App download size target < 100MB (cellular download limit for many regions).
|
|
183
|
-
- **Rule**: Use App Bundles (Android) / App Thinning (iOS) for platform-optimized delivery.
|
|
184
|
-
- **Rule**: Large assets (videos, models) should be downloaded on-demand after install, not bundled.
|
|
185
|
-
- **RATIONALE**: App size directly impacts install conversion. Every 10MB above 100MB loses ~1% of potential installs.
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## F9. Accessibility
|
|
190
|
-
|
|
191
|
-
- **Rule**: All interactive elements must have accessibility labels (contentDescription / accessibilityLabel).
|
|
192
|
-
- **Rule**: Decorative images must be marked as not important for accessibility.
|
|
193
|
-
- **Rule**: Color must not be the sole means of conveying information (pair with icon or text).
|
|
194
|
-
- **Rule**: Minimum contrast ratio: 4.5:1 for normal text, 3:1 for large text (≥18pt bold or ≥24pt).
|
|
195
|
-
- **Rule**: Support system font scaling up to 2x without layout breaking or text truncation.
|
|
196
|
-
- **RATIONALE**: 15% of the world's population has some form of disability. Accessibility is not optional — it's also increasingly an App Store review requirement.
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
|
|
200
|
-
## F10. Security
|
|
201
|
-
|
|
202
|
-
### F10.1 App Hardening
|
|
203
|
-
|
|
204
|
-
- **Rule**: Release builds must enable code minification/obfuscation (ProGuard/R8 for Android, strip symbols for iOS).
|
|
205
|
-
- **Rule**: Jailbreak/root detection recommended for financial, healthcare, or enterprise apps.
|
|
206
|
-
- **Rule**: Screenshot/screen recording prevention for sensitive screens (banking, health records).
|
|
207
|
-
- **Forbidden**: Leaving debug logs, debug menus, or development endpoints in release builds.
|
|
208
|
-
- **RATIONALE**: A released app is a binary that anyone can decompile. Defense in depth is the only strategy.
|
|
209
|
-
|
|
210
|
-
### F10.2 Data Protection
|
|
211
|
-
|
|
212
|
-
- **Rule**: App sandbox file protection: `NSFileProtectionComplete` (iOS) / device-encrypted storage (Android).
|
|
213
|
-
- **Rule**: API keys must not be stored in the app bundle. Use server-side proxy or secure enclave.
|
|
214
|
-
- **Rule**: User sessions must expire. Token refresh must require re-authentication for sensitive operations.
|
|
215
|
-
- **RATIONALE**: The app binary is distributed to attacker-controlled devices. Assume everything in the binary is public knowledge.
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## F11. Testing
|
|
220
|
-
|
|
221
|
-
- **Rule**: Testing has three tiers:
|
|
222
|
-
- Unit tests: ViewModels/Blocs/UseCases/Repositories (fast, no UI)
|
|
223
|
-
- Widget/Component tests: individual UI components in isolation (medium speed, fake dependencies)
|
|
224
|
-
- Integration/E2E tests: critical user flows through real screens (slow, real or staged backend)
|
|
225
|
-
- **Rule**: Tests must be deterministic. Forbid relying on real network calls, real time, or random values without seeding.
|
|
226
|
-
- **Rule**: Golden/image snapshot tests must use the same OS version and device configuration for consistency.
|
|
227
|
-
- **RATIONALE**: Mobile testing is harder than backend testing because it spans UI, platform APIs, and network. Clear tiers prevent confusion about what to test where.
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## F12. App Distribution
|
|
232
|
-
|
|
233
|
-
- **Rule**: Version code/number must be incremented for every build submitted to store.
|
|
234
|
-
- **Rule**: Staged rollout: 10% → 50% → 100% over 48 hours. Monitor crash rate at each stage.
|
|
235
|
-
- **Rule**: Release notes must be localized for all supported languages.
|
|
236
|
-
- **Rule**: Keep a version history document: what changed, why, and the minimal OS version bump if any.
|
|
237
|
-
- **RATIONALE**: A bad release can't be undone instantly (store rollback takes hours). Staged rollout is the cheapest insurance.
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## F13. AI Vibecoding Baseline Constraints (project-agnostic, always active)
|
|
242
|
-
|
|
243
|
-
### F13.1 Search First
|
|
244
|
-
- **Rule**: Before creating a new widget/component/screen, AI must search existing code for similar implementations.
|
|
245
|
-
- **Rule**: Before adding a new dependency, AI must check if an existing dependency already covers that use case.
|
|
246
|
-
|
|
247
|
-
### F13.2 Platform Awareness
|
|
248
|
-
- **Rule**: AI must know which platform it's writing code for. iOS patterns in Android code (or vice versa) must be flagged explicitly.
|
|
249
|
-
- **Rule**: AI-generated code that uses platform-specific APIs must include the API level/iOS version availability annotation.
|
|
250
|
-
|
|
251
|
-
### F13.3 Dependency Control
|
|
252
|
-
- **Rule**: AI must not modify `pubspec.yaml` / `package.json` / `Podfile` / `build.gradle` on its own.
|
|
253
|
-
- **Rule**: If a new dependency is needed, AI must list: package name, version, reason, alternative comparison.
|
|
254
|
-
|
|
255
|
-
### F13.4 Breaking Changes
|
|
256
|
-
- **Rule**: Before modifying a shared widget/component/utility, AI must list all callers and assess platform impact.
|
|
257
|
-
- **Rule**: Changing navigation routes or deep link schemes requires assessing all entry points.
|
|
258
|
-
|
|
259
|
-
### F13.5 Context Honesty
|
|
260
|
-
- **Rule**: When uncertain about a platform API availability, behavior, or deprecation status, AI must explicitly say "I'm not sure" and suggest the developer verify against the platform documentation.
|
|
261
|
-
|
|
262
|
-
### F13.6 Security
|
|
263
|
-
- **Rule**: AI must not generate code that stores secrets in the app bundle, logs sensitive data, or disables ATS/SSL verification.
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## Injection Instructions (for the AI executing this skill)
|
|
268
|
-
|
|
269
|
-
Each chapter in this file corresponds to a `{{ FIXED_RULES_* }}` placeholder in the template:
|
|
270
|
-
|
|
271
|
-
| Chapter | Inject Into Placeholder | Template Section |
|
|
272
|
-
|---------|------------------------|-------------------|
|
|
273
|
-
| F1 Project Structure | `{{ FIXED_RULES_STRUCTURE }}` | §1 Project Structure |
|
|
274
|
-
| F2 UI Development | `{{ FIXED_RULES_UI }}` | §2 UI Development |
|
|
275
|
-
| F3 Navigation | `{{ FIXED_RULES_NAVIGATION }}` | §3 Navigation & Deep Linking |
|
|
276
|
-
| F4 State Management | `{{ FIXED_RULES_STATE }}` | §4 State Management |
|
|
277
|
-
| F5 Networking | `{{ FIXED_RULES_NETWORKING }}` | §5 Networking |
|
|
278
|
-
| F6 Data Persistence | `{{ FIXED_RULES_PERSISTENCE }}` | §6 Data Persistence |
|
|
279
|
-
| F7 Platform Features | `{{ FIXED_RULES_PLATFORM_FEATURES }}` | §7 Platform Features |
|
|
280
|
-
| F8 Performance | `{{ FIXED_RULES_PERFORMANCE }}` | §8 Performance |
|
|
281
|
-
| F9 Accessibility | `{{ FIXED_RULES_A11Y }}` | §9 Accessibility |
|
|
282
|
-
| F10 Security | `{{ FIXED_RULES_SECURITY }}` | §10 Security |
|
|
283
|
-
| F11 Testing | `{{ FIXED_RULES_TEST }}` | §11 Testing |
|
|
284
|
-
| F12 Distribution | `{{ FIXED_RULES_DISTRIBUTION }}` | §12 Distribution |
|
|
285
|
-
| F13 AI Constraints | `{{ FIXED_RULES_AI_BASE }}` | §13 AI Behavior Constraints |
|
|
286
|
-
|
|
287
|
-
**Rendering rules**:
|
|
288
|
-
1. Copy each chapter's full body (including RATIONALE) directly into the corresponding placeholder.
|
|
289
|
-
2. RATIONALE must be preserved — it lets AI understand intent rather than follow mechanically.
|
|
290
|
-
3. Keep the original markdown list structure. Do not rewrite as prose paragraphs.
|
|
117
|
+
Copy each invariant block only into its named placeholder. In dual-native mode, evaluate every derived rule against the iOS or Android profile it belongs to. If a rule cannot be assigned unambiguously, fail generation rather than applying it to both platforms.
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
1. **Group order**: G1 → G2 → G3 → G4 → G5 → G6 → G7 → G8 → G9 → G10. Do not skip.
|
|
12
12
|
2. **Shortcut commands** (respond immediately when user types these at any point):
|
|
13
13
|
- `recommended` / `default` → skip current group, adopt all recommended options
|
|
14
|
-
- `all recommended` / `one-click` →
|
|
14
|
+
- `all recommended` / `one-click` → explicit authorization to adopt each remaining applicable recommended option; ask any question whose recommendation is ambiguous for the active platform profile
|
|
15
15
|
- `strict` / `strictest` → adopt the strictest option for the current group
|
|
16
16
|
- `skip` / `don't need this` → mark current group as N/A
|
|
17
17
|
- `custom: xxx` → record user's custom content
|
|
18
18
|
3. **Abbreviation recognition**: `A` / `a` / `1` all mean option A. `A,C` means multi-select (only for multi-select questions).
|
|
19
19
|
4. **Follow-up rule**: If the user gives an answer outside the options, first confirm whether to classify as an "other" branch.
|
|
20
20
|
5. **Forbidden behaviors**:
|
|
21
|
-
- Must not make choices for the user before they explicitly answer.
|
|
21
|
+
- Must not make choices for the user before they explicitly answer, except concrete defaults covered by the user's explicit Quick/all-recommended authorization.
|
|
22
22
|
- Must not fabricate user preferences to complete the answer set.
|
|
23
23
|
- Must not output more than 3 questions in a single message.
|
|
24
24
|
|
|
@@ -53,15 +53,15 @@ Total: 20 questions.
|
|
|
53
53
|
- D) Android native (Kotlin)
|
|
54
54
|
- E) Both native (Swift + Kotlin, separate codebases)
|
|
55
55
|
- **Note**: Determines all subsequent framework, tooling, and platform-specific rule injections.
|
|
56
|
-
- **Dual-native
|
|
56
|
+
- **Dual-native contract**: If Q1=E, collect Q4/Q6/Q7/Q8/Q13/Q14 separately for iOS and Android. Store two named answer profiles and render both through `{{ platform_profiles }}`; never collapse one profile into scalar values or copy an option across platforms unless the user explicitly selects equivalent meanings for both.
|
|
57
57
|
- **Maps to**: `{{ platform }}` + `{{ tech_stack_rules }}`
|
|
58
58
|
|
|
59
59
|
### Q2. Minimum OS Version
|
|
60
60
|
- **Options**:
|
|
61
|
-
- A) Latest
|
|
62
|
-
- B) Latest
|
|
63
|
-
- C) Latest
|
|
64
|
-
- **Note**:
|
|
61
|
+
- A) Latest stable major release minus 1 **【Recommended: balanced active-device coverage】**
|
|
62
|
+
- B) Latest stable major release minus 2
|
|
63
|
+
- C) Latest stable major release minus 3 (wider compatibility, more legacy handling)
|
|
64
|
+
- **Note**: Resolve concrete iOS and Android versions from current stable releases when generating the file; record both the relative policy and resolved versions instead of preserving stale version examples in this question bank.
|
|
65
65
|
- **Maps to**: `{{ min_os_version }}` + `{{ tech_stack_rules }}`
|
|
66
66
|
|
|
67
67
|
---
|
|
@@ -83,7 +83,7 @@ Total: 20 questions.
|
|
|
83
83
|
|
|
84
84
|
### Q4. UI Framework (varies by Q1)
|
|
85
85
|
- **For Flutter**: A) Material Design 3 **【Recommended】** — B) Cupertino (iOS-style) — C) Adaptive (auto-switch by platform)
|
|
86
|
-
- **For React Native**: A) React Native core components + StyleSheet **【Recommended】** — B) Tamagui
|
|
86
|
+
- **For React Native**: A) React Native core components + StyleSheet **【Recommended】** — B) Tamagui — C) NativeWind — D) Custom design system
|
|
87
87
|
- **For iOS**: A) SwiftUI **【Recommended: modern, declarative】** — B) UIKit (programmatic) — C) UIKit + Storyboards
|
|
88
88
|
- **For Android**: A) Jetpack Compose **【Recommended: modern, declarative】** — B) XML + Material 3 — C) Hybrid (Compose + Views)
|
|
89
89
|
- **Maps to**: `{{ ui_framework }}` + `{{ ui_rules }}`
|
|
@@ -131,16 +131,16 @@ Total: 20 questions.
|
|
|
131
131
|
|
|
132
132
|
### Q9. Push Notifications
|
|
133
133
|
- **Options**:
|
|
134
|
-
- A) Yes,
|
|
135
|
-
- B) Not required
|
|
136
|
-
- **Note**: Determines
|
|
134
|
+
- A) Yes, required by a confirmed product flow (remote push through active platform services)
|
|
135
|
+
- B) Not required **【Recommended when no notification use case is established】**
|
|
136
|
+
- **Note**: Determines channel configuration, token lifecycle, consent, and foreground/background handling. Quick mode must not add push infrastructure because an app is intended for production.
|
|
137
137
|
- **Maps to**: `{{ push_notifications }}` + `{{ platform_features_rules }}`
|
|
138
138
|
|
|
139
139
|
### Q10. Background Tasks
|
|
140
140
|
- **Options**:
|
|
141
|
-
- A) Yes,
|
|
142
|
-
- B) Not required
|
|
143
|
-
- **Note**: Determines background execution
|
|
141
|
+
- A) Yes, required by a confirmed sync, transfer, processing, or refresh flow
|
|
142
|
+
- B) Not required **【Recommended when no background-owned work is established】**
|
|
143
|
+
- **Note**: Determines background execution, retry, termination, battery, and platform-specific capability rules. Quick mode must not invent background work.
|
|
144
144
|
- **Maps to**: `{{ background_tasks }}` + `{{ platform_features_rules }}`
|
|
145
145
|
|
|
146
146
|
### Q11. Permissions Strategy
|
|
@@ -182,10 +182,10 @@ Total: 20 questions.
|
|
|
182
182
|
|
|
183
183
|
### Q15. Distribution Method
|
|
184
184
|
- **Options**:
|
|
185
|
-
- A) App Store
|
|
185
|
+
- A) Applicable public stores for active profiles **【Recommended】** — App Store/TestFlight for iOS; Google Play testing/release tracks for Android
|
|
186
186
|
- B) Enterprise / internal distribution (MDM / private store)
|
|
187
|
-
- C) Not determined yet (development phase)
|
|
188
|
-
- **Note**:
|
|
187
|
+
- C) Not determined yet (development phase) **【Recommended when no release channel has been confirmed】**
|
|
188
|
+
- **Note**: A single-platform project receives only its platform's distribution rules. Dual-native projects render both public-store profiles. Rollout percentages and observation windows are selected from product risk rather than hardcoded here. Quick mode cannot assume public distribution from `mobile` alone.
|
|
189
189
|
- **Maps to**: `{{ distribution }}` + `{{ distribution_rules }}`
|
|
190
190
|
|
|
191
191
|
---
|
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schema_version": "app-planner-question-manifest-
|
|
2
|
+
"schema_version": "app-planner-question-manifest-v2",
|
|
3
3
|
"layer": "mobile",
|
|
4
4
|
"total_questions": 20,
|
|
5
5
|
"_doc": "Machine-readable structure for mobile question-bank.md. Question TEXT/options/Recommended/Notes are authoritative in question-bank.md; this file carries ONLY structure: group membership, quick-mode, question->placeholder mapping, and conditional logic. Keep Qids and group ids in sync with question-bank.md. The AI reads this as its asking checklist (Phase A) and self-check expected-set (Phase D).",
|
|
6
6
|
"_conditions": "required_if / auto_derived_when use simple expressions over recorded answers, e.g. 'Q12 in [A, B]'. options_vary_by names a prior answer that changes the OPTION LIST only (question is still asked; never affects required). dual_native_repeat_when notes Q1=E (both native) repeats the question per platform.",
|
|
7
|
+
"render_contract": {
|
|
8
|
+
"fixed_rules_policy": "invariants_only",
|
|
9
|
+
"selected_decision_precedence": true,
|
|
10
|
+
"quick_mode_requires_explicit_authorization": true,
|
|
11
|
+
"unmapped_option_policy": "semantic_fallback",
|
|
12
|
+
"not_applicable_policy": "explicit_statement",
|
|
13
|
+
"conflict_policy": "fail_generation",
|
|
14
|
+
"semantic_fallback_questions": ["Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11", "Q12", "Q13", "Q14", "Q15", "Q16", "Q17", "Q18", "Q19", "Q20"]
|
|
15
|
+
},
|
|
16
|
+
"multi_profile_contract": {
|
|
17
|
+
"when": "Q1 == E",
|
|
18
|
+
"dimensions": ["Q4", "Q6", "Q7", "Q8", "Q13", "Q14"],
|
|
19
|
+
"profiles": ["ios", "android"],
|
|
20
|
+
"output_placeholder": "platform_profiles"
|
|
21
|
+
},
|
|
7
22
|
"groups": [
|
|
8
23
|
{ "id": "G1", "topic": "Platform & Language", "quick_mode": true },
|
|
9
24
|
{ "id": "G2", "topic": "Architecture", "quick_mode": true },
|
|
@@ -41,7 +56,7 @@
|
|
|
41
56
|
"template_placeholders": {
|
|
42
57
|
"from_questions": ["platform", "tech_stack_rules", "min_os_version", "architecture", "arch_rules", "ui_framework", "ui_rules", "navigation", "navigation_rules", "state_management", "state_rules", "networking", "networking_rules", "persistence", "persistence_rules", "push_notifications", "platform_features_rules", "background_tasks", "permissions_strategy", "test_coverage", "test_rules", "unit_test_framework", "e2e_framework", "distribution", "distribution_rules", "performance_target", "performance_rules", "a11y_target", "a11y_rules", "ai_dependency_rule", "ai_breaking_change_rule", "ai_platform_rule"],
|
|
43
58
|
"from_fixed_rules": ["FIXED_RULES_A11Y", "FIXED_RULES_AI_BASE", "FIXED_RULES_DISTRIBUTION", "FIXED_RULES_NAVIGATION", "FIXED_RULES_NETWORKING", "FIXED_RULES_PERFORMANCE", "FIXED_RULES_PERSISTENCE", "FIXED_RULES_PLATFORM_FEATURES", "FIXED_RULES_SECURITY", "FIXED_RULES_STATE", "FIXED_RULES_STRUCTURE", "FIXED_RULES_TEST", "FIXED_RULES_UI"],
|
|
44
|
-
"auto_generated": ["deny_list_summary", "recommended_libs"],
|
|
59
|
+
"auto_generated": ["deny_list_summary", "recommended_libs", "platform_profiles"],
|
|
45
60
|
"metadata": ["project_name", "generated_at"]
|
|
46
61
|
}
|
|
47
62
|
}
|