prizmkit 1.1.76 → 1.1.78

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "frameworkVersion": "1.1.76",
3
- "bundledAt": "2026-06-13T04:58:49.240Z",
4
- "bundledFrom": "17f8257"
2
+ "frameworkVersion": "1.1.78",
3
+ "bundledAt": "2026-06-14T15:40:03.496Z",
4
+ "bundledFrom": "190a723"
5
5
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.76",
2
+ "version": "1.1.78",
3
3
  "skills": {
4
4
  "prizm-kit": {
5
5
  "description": "Full-lifecycle dev toolkit. Covers spec-driven development, Prizm context docs, code quality, debugging, deployment, and knowledge management.",
@@ -332,22 +332,23 @@ For each selected layer, run the rules Q&A workflow. This follows the 4-phase ru
332
332
 
333
333
  **Phase A — Load layer resources:**
334
334
  - Read `${SKILL_DIR}/references/rules/<layer>/fixed-rules.md` — industry-consensus rules injected without asking
335
- - Read `${SKILL_DIR}/references/rules/<layer>/question-bank.md` — interactive questions organized in groups (G1→G10)
335
+ - Read `${SKILL_DIR}/references/rules/<layer>/question-bank.md` — interactive questions organized in groups (G1→G10): authoritative source for question text, options, "Recommended" markers, and Notes
336
+ - Read `${SKILL_DIR}/references/rules/<layer>/question-manifest.json` — machine-readable structure for this layer. **This is your asking checklist.** It lists, per question: `group`, `required`, `maps_to` (which template placeholders the answer fills), and conditional fields (`required_if`, `auto_derived_when`, `options_vary_by`). Its `groups[]` carries each group's `quick_mode` flag, and `template_placeholders` is the expected-set for the Phase D self-check. Use the manifest to track coverage; use question-bank.md for the actual wording you present to the user. If a question id in one file is absent from the other, trust question-bank.md for content and note the drift.
336
337
 
337
338
  **Phase B — Interactive Q&A:**
338
339
  - Ask questions one group at a time (max 3 questions per message), as defined in question-bank.md
339
340
  - Each question shows a "Recommended" option to reduce decision cost
340
- - **Quick mode**: ask only the following groups per layer. All other groups adopt recommended defaults silently.
341
- - **Frontend**: G1 (Tech Stack), G2 (Styling), G3 (State & Data Fetching), G7 (Testing & Quality). Skip: G4 (Design System), G5 (Responsive), G6 (i18n), G8 (AI Vibecoding), G9 (Performance).
342
- - **Backend**: G1 (Language & Runtime), G2 (Framework & Architecture), G3 (API Style), G4 (Data Layer), G7 (Testing & Quality). Skip: G5 (Auth), G6 (Infrastructure), G8 (Observability), G9 (AI Constraints).
343
- - **Database**: G1 (Database Selection), G2 (Data Modeling), G3 (Migration), G7 (AI Constraints). Skip: G4 (Index & Performance), G5 (Security & Compliance), G6 (High Availability & Ops).
344
- - **Mobile**: G1 (Platform & Language), G2 (Architecture), G3 (UI Framework), G4 (Navigation & State), G7 (Testing). Skip: G5 (Networking & Data), G6 (Platform Features), G8 (App Distribution), G9 (Performance & Accessibility), G10 (AI Constraints).
345
- - **Full mode**: ask all groups in order (G1→G9 for frontend/backend, G1→G7 for database, G1→G10 for mobile)
341
+ - **Quick mode**: ask only the groups whose `quick_mode` is `true` in `question-manifest.json`. All other groups adopt recommended defaults silently. (The manifest is the single source of truth for quick-mode membership — do not hardcode group lists here.)
342
+ - **Full mode**: ask all groups in manifest order (`groups[]`).
343
+ - **Conditional questions** (driven by the manifest's per-question fields):
344
+ - `required_if: "<expr>"` ask this question only when the expression over prior answers holds (e.g. Q14 `required_if: Q13 != D`). If the condition is false, the question is legitimately skipped not a coverage gap.
345
+ - `auto_derived_when: "<expr>"` when this holds, fill the mapped placeholder(s) from the prior answer without asking (e.g. backend Q6 `auto_derived_when: Q5 in [GraphQL, gRPC]`). Count as satisfied, not skipped.
346
+ - `options_vary_by: "<Qid>"` the question is still asked; only its option list depends on that prior answer (e.g. framework/ORM options vary by language). Never affects whether the question is required.
346
347
  - Shortcut commands work at any point:
347
348
  - `recommended` / `default` → adopt all recommended for current group
348
349
  - `all recommended` → adopt all recommended for all remaining groups
349
350
  - `skip` → mark current group as "Not required at this stage"
350
- - Record answers in memory after each group.
351
+ - Record answers in memory after each group. Track which manifest questions are answered, auto-derived, or conditionally skipped so Phase D can verify coverage.
351
352
 
352
353
  **Phase C — Auto-derivation:**
353
354
  - Read `${SKILL_DIR}/references/rules/<layer>/derivation-rules.md`
@@ -357,8 +358,10 @@ For each selected layer, run the rules Q&A workflow. This follows the 4-phase ru
357
358
  **Phase D — Render and write:**
358
359
  - Read `${SKILL_DIR}/references/rules/<layer>/template.md`
359
360
  - Fill all template placeholders with accumulated content from Phases A+B+C
360
- - **Post-render self-check**: scan for residual `{{ ` or ` }}` — count must be 0 before writing
361
- - Generate Appendix A (Deny List) and Appendix B (Recommended Tools) per template instructions
361
+ - **Post-render self-check** (driven by `question-manifest.json` `template_placeholders`):
362
+ 1. **Coverage pass** for every placeholder in `from_questions`, confirm it traces to an answered question OR an `auto_derived_when` path OR a conditionally-skipped question (`required_if` false). If a `from_questions` placeholder has no source, you skipped a required question — go back and ask it before writing.
363
+ 2. **Residual pass** — scan the rendered document for any residual `{{ ` or ` }}`; count must be 0. Placeholders in `from_fixed_rules` / `auto_generated` / `metadata` are filled from fixed-rules.md, Phase D generation, and project metadata respectively — they are NOT expected to come from Q&A, but they MUST still be rendered (no residual braces).
364
+ - Generate Appendix A (Deny List) and Appendix B (Recommended Tools) per template instructions — these fill the `auto_generated` placeholders
362
365
  - Create `.prizmkit/rules/` directory if it doesn't exist
363
366
  - Write `.prizmkit/rules/<layer>-rules.md`
364
367
 
@@ -0,0 +1,46 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "backend",
4
+ "total_questions": 20,
5
+ "_doc": "Machine-readable structure for backend 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
+ "_conditions": "required_if / auto_derived_when use simple expressions over recorded answers, e.g. 'Q5 == RESTful', 'Q13 != D', 'Q5 in [GraphQL, gRPC]'. options_vary_by names a prior answer that changes the OPTION LIST only (question is still asked; never affects required).",
7
+ "groups": [
8
+ { "id": "G1", "topic": "Language & Runtime", "quick_mode": true },
9
+ { "id": "G2", "topic": "Framework & Architecture", "quick_mode": true },
10
+ { "id": "G3", "topic": "API Style", "quick_mode": true },
11
+ { "id": "G4", "topic": "Data Layer", "quick_mode": true },
12
+ { "id": "G5", "topic": "Auth", "quick_mode": false },
13
+ { "id": "G6", "topic": "Infrastructure", "quick_mode": false },
14
+ { "id": "G7", "topic": "Testing & Quality", "quick_mode": true },
15
+ { "id": "G8", "topic": "Observability", "quick_mode": false },
16
+ { "id": "G9", "topic": "AI Constraints", "quick_mode": false }
17
+ ],
18
+ "questions": [
19
+ { "id": "Q1", "group": "G1", "topic": "Programming Language", "maps_to": ["language", "tech_stack_rules"], "required": true },
20
+ { "id": "Q2", "group": "G1", "topic": "Runtime Version", "maps_to": ["runtime_version"], "required": true },
21
+ { "id": "Q3", "group": "G2", "topic": "Web Framework", "maps_to": ["framework", "tech_stack_rules"], "required": true, "options_vary_by": "Q1", "note_open_ended_when": "Q1 == Custom" },
22
+ { "id": "Q4", "group": "G2", "topic": "Architecture Pattern", "maps_to": ["architecture", "arch_rules"], "required": true },
23
+ { "id": "Q5", "group": "G3", "topic": "API Style", "maps_to": ["api_style", "api_rules"], "required": true },
24
+ { "id": "Q6", "group": "G3", "topic": "API Documentation", "maps_to": ["api_docs"], "required": true, "required_if": "Q5 == RESTful", "auto_derived_when": "Q5 in [GraphQL, gRPC]" },
25
+ { "id": "Q7", "group": "G4", "topic": "ORM / Data Access", "maps_to": ["orm", "data_rules"], "required": true, "options_vary_by": "Q1", "note_open_ended_when": "Q1 == Custom" },
26
+ { "id": "Q8", "group": "G4", "topic": "Database", "maps_to": ["database"], "required": true },
27
+ { "id": "Q9", "group": "G5", "topic": "Authentication Scheme", "maps_to": ["auth_scheme", "auth_rules"], "required": true },
28
+ { "id": "Q10", "group": "G6", "topic": "Caching", "maps_to": ["cache", "cache_rules"], "required": true },
29
+ { "id": "Q11", "group": "G6", "topic": "Message Queue", "maps_to": ["mq", "mq_rules"], "required": true },
30
+ { "id": "Q12", "group": "G6", "topic": "Containerization & Deployment", "maps_to": ["container", "deploy_rules"], "required": true },
31
+ { "id": "Q13", "group": "G7", "topic": "Test Coverage Requirements", "maps_to": ["test_requirement", "test_rules"], "required": true },
32
+ { "id": "Q14", "group": "G7", "topic": "Test Framework", "maps_to": ["test_framework"], "required": true, "required_if": "Q13 != D", "options_vary_by": "Q1" },
33
+ { "id": "Q15", "group": "G7", "topic": "Mock Strategy", "maps_to": ["mock_strategy", "test_rules"], "required": true },
34
+ { "id": "Q16", "group": "G8", "topic": "Logging", "maps_to": ["logging", "observability_rules"], "required": true },
35
+ { "id": "Q17", "group": "G8", "topic": "Monitoring & Tracing", "maps_to": ["monitoring", "observability_rules"], "required": true },
36
+ { "id": "Q18", "group": "G9", "topic": "AI Permission to Add Dependencies", "maps_to": ["ai_dependency_rule"], "required": true },
37
+ { "id": "Q19", "group": "G9", "topic": "AI Modifying Shared Modules", "maps_to": ["ai_breaking_change_rule"], "required": true },
38
+ { "id": "Q20", "group": "G9", "topic": "AI Modifying Configuration", "maps_to": ["ai_config_rule"], "required": true }
39
+ ],
40
+ "template_placeholders": {
41
+ "from_questions": ["language", "runtime_version", "framework", "architecture", "api_style", "api_docs", "orm", "database", "auth_scheme", "cache", "mq", "container", "test_requirement", "test_framework", "mock_strategy", "logging", "monitoring", "ai_dependency_rule", "ai_breaking_change_rule", "ai_config_rule", "tech_stack_rules", "arch_rules", "api_rules", "auth_rules", "data_rules", "cache_rules", "mq_rules", "deploy_rules", "observability_rules", "test_rules"],
42
+ "from_fixed_rules": ["FIXED_RULES_STRUCTURE", "FIXED_RULES_API", "FIXED_RULES_ERROR", "FIXED_RULES_SECURITY", "FIXED_RULES_RATE_LIMITING", "FIXED_RULES_DATABASE", "FIXED_RULES_OBSERVABILITY", "FIXED_RULES_TRACING", "FIXED_RULES_CONFIG", "FIXED_RULES_ASYNC", "FIXED_RULES_MESSAGE_DELIVERY", "FIXED_RULES_GRACEFUL_SHUTDOWN", "FIXED_RULES_TEST", "FIXED_RULES_AI_BASE"],
43
+ "auto_generated": ["deny_list_summary", "recommended_libs"],
44
+ "metadata": ["project_name", "generated_at"]
45
+ }
46
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "database",
4
+ "total_questions": 15,
5
+ "_doc": "Machine-readable structure for database 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
+ "_conditions": "required_if / auto_derived_when use simple expressions over recorded answers. options_vary_by names a prior answer that changes the OPTION LIST only (question is still asked; never affects required). A single answer may fill more than one placeholder (a TL;DR value + a rules-block), both listed in maps_to.",
7
+ "groups": [
8
+ { "id": "G1", "topic": "Database Selection", "quick_mode": true },
9
+ { "id": "G2", "topic": "Data Modeling", "quick_mode": true },
10
+ { "id": "G3", "topic": "Migration", "quick_mode": true },
11
+ { "id": "G4", "topic": "Index & Performance", "quick_mode": false },
12
+ { "id": "G5", "topic": "Security & Compliance", "quick_mode": false },
13
+ { "id": "G6", "topic": "High Availability & Ops", "quick_mode": false },
14
+ { "id": "G7", "topic": "AI Constraints", "quick_mode": true }
15
+ ],
16
+ "questions": [
17
+ { "id": "Q1", "group": "G1", "topic": "Primary Database", "maps_to": ["database", "tech_rules"], "required": true },
18
+ { "id": "Q2", "group": "G1", "topic": "Cache Layer", "maps_to": ["cache", "cache_rules"], "required": true },
19
+ { "id": "Q3", "group": "G2", "topic": "Primary Key Strategy", "maps_to": ["pk_strategy", "schema_rules"], "required": true },
20
+ { "id": "Q4", "group": "G2", "topic": "Soft Delete", "maps_to": ["soft_delete", "schema_rules"], "required": true },
21
+ { "id": "Q5", "group": "G2", "topic": "Normalization Level", "maps_to": ["normalization", "schema_rules"], "required": true },
22
+ { "id": "Q6", "group": "G3", "topic": "Migration Tool", "maps_to": ["migration_tool", "migration_rules"], "required": true },
23
+ { "id": "Q7", "group": "G4", "topic": "Query Complexity", "maps_to": ["workload_type", "performance_rules"], "required": true },
24
+ { "id": "Q8", "group": "G4", "topic": "Estimated Data Volume", "maps_to": ["data_scale", "performance_rules"], "required": true },
25
+ { "id": "Q9", "group": "G5", "topic": "Data Sensitivity Level", "maps_to": ["data_sensitivity", "security_rules"], "required": true },
26
+ { "id": "Q10", "group": "G5", "topic": "Audit Requirements", "maps_to": ["audit", "audit_rules"], "required": true, "multi_select": true },
27
+ { "id": "Q11", "group": "G6", "topic": "Deployment Method", "maps_to": ["deployment", "ops_rules"], "required": true },
28
+ { "id": "Q12", "group": "G6", "topic": "Backup Strategy", "maps_to": ["backup", "ops_rules"], "required": true },
29
+ { "id": "Q13", "group": "G6", "topic": "High Availability Requirements", "maps_to": ["ha", "ops_rules"], "required": true },
30
+ { "id": "Q14", "group": "G7", "topic": "AI Permission to Modify Database Structure", "maps_to": ["ai_ddl_rule", "ai_ddl_permission"], "required": true },
31
+ { "id": "Q15", "group": "G7", "topic": "AI Safety Constraints", "maps_to": ["ai_safety_rule", "ai_safety_constraint"], "required": true }
32
+ ],
33
+ "template_placeholders": {
34
+ "from_questions": ["database", "tech_rules", "cache", "cache_rules", "pk_strategy", "schema_rules", "soft_delete", "normalization", "migration_tool", "migration_rules", "workload_type", "performance_rules", "data_scale", "data_sensitivity", "security_rules", "audit", "audit_rules", "deployment", "ops_rules", "backup", "ha", "ai_ddl_rule", "ai_ddl_permission", "ai_safety_rule", "ai_safety_constraint"],
35
+ "from_fixed_rules": ["FIXED_RULES_AI_BASE", "FIXED_RULES_BACKUP", "FIXED_RULES_CONNECTION", "FIXED_RULES_INDEX", "FIXED_RULES_MIGRATION", "FIXED_RULES_PERFORMANCE", "FIXED_RULES_QUERY", "FIXED_RULES_SCHEMA", "FIXED_RULES_SECURITY", "FIXED_RULES_TRANSACTION", "FIXED_RULES_TYPES"],
36
+ "auto_generated": ["deny_list_summary", "recommended_libs"],
37
+ "metadata": ["project_name", "generated_at"]
38
+ }
39
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "frontend",
4
+ "total_questions": 25,
5
+ "_doc": "Machine-readable structure for frontend 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
+ "_conditions": "required_if / auto_derived_when use simple expressions over recorded answers, e.g. 'Q15 in [A, B]'. options_vary_by names a prior answer that changes the OPTION LIST/recommendation only (question is still asked; never affects required).",
7
+ "groups": [
8
+ { "id": "G1", "topic": "Tech Stack", "quick_mode": true },
9
+ { "id": "G2", "topic": "Styling", "quick_mode": true },
10
+ { "id": "G3", "topic": "State & Data Fetching", "quick_mode": true },
11
+ { "id": "G4", "topic": "Design System", "quick_mode": false },
12
+ { "id": "G5", "topic": "Responsive & Adaptation", "quick_mode": false },
13
+ { "id": "G6", "topic": "i18n & Accessibility", "quick_mode": false },
14
+ { "id": "G7", "topic": "Testing & Quality", "quick_mode": true },
15
+ { "id": "G8", "topic": "AI Vibecoding Constraints", "quick_mode": false },
16
+ { "id": "G9", "topic": "Performance Baseline", "quick_mode": false }
17
+ ],
18
+ "questions": [
19
+ { "id": "Q1", "group": "G1", "topic": "Frontend Framework", "maps_to": ["framework", "tech_stack_rules"], "required": true },
20
+ { "id": "Q2", "group": "G1", "topic": "Meta-Framework", "maps_to": ["meta_framework", "tech_stack_rules"], "required": true, "options_vary_by": "Q1" },
21
+ { "id": "Q3", "group": "G1", "topic": "Package Manager", "maps_to": ["package_manager", "tech_stack_rules"], "required": true },
22
+ { "id": "Q4", "group": "G2", "topic": "Styling Solution", "maps_to": ["style_solution", "style_specific_rules"], "required": true },
23
+ { "id": "Q4b", "group": "G2", "topic": "Font Loading Strategy", "maps_to": ["font_strategy", "performance_rules"], "required": true },
24
+ { "id": "Q5", "group": "G3", "topic": "Global State Library", "maps_to": ["state_lib", "state_rules"], "required": true, "options_vary_by": "Q1" },
25
+ { "id": "Q6", "group": "G3", "topic": "Server State Library", "maps_to": ["server_state_lib", "server_state_rules"], "required": true },
26
+ { "id": "Q7", "group": "G3", "topic": "API Type Source", "maps_to": ["api_type_source", "server_state_rules"], "required": true },
27
+ { "id": "Q8", "group": "G4", "topic": "Primary Design/Mockup Source", "maps_to": ["design_source"], "required": true },
28
+ { "id": "Q9", "group": "G4", "topic": "Token Naming Layers", "maps_to": ["token_layering", "token_layering_rules"], "required": true },
29
+ { "id": "Q10", "group": "G4", "topic": "Dark Mode", "maps_to": ["dark_mode", "dark_mode_rules"], "required": true },
30
+ { "id": "Q11", "group": "G5", "topic": "Adaptation Strategy", "maps_to": ["responsive_strategy", "breakpoint_rules"], "required": true },
31
+ { "id": "Q12", "group": "G5", "topic": "Breakpoint Scheme", "maps_to": ["breakpoint_scheme", "breakpoint_rules"], "required": true },
32
+ { "id": "Q13", "group": "G6", "topic": "Internationalization", "maps_to": ["i18n", "i18n_rules"], "required": true },
33
+ { "id": "Q14", "group": "G6", "topic": "Accessibility Target", "maps_to": ["a11y_level", "a11y_extra_rules"], "required": true },
34
+ { "id": "Q15", "group": "G7", "topic": "Test Coverage Requirements", "maps_to": ["test_coverage", "test_rules"], "required": true },
35
+ { "id": "Q16", "group": "G7", "topic": "Unit Test Framework", "maps_to": ["unit_test_framework", "test_rules"], "required": true, "required_if": "Q15 in [A, B]" },
36
+ { "id": "Q17", "group": "G7", "topic": "E2E Framework", "maps_to": ["e2e_framework", "test_rules"], "required": true, "required_if": "Q15 in [A, C]" },
37
+ { "id": "Q18", "group": "G8", "topic": "AI Component Index Sync", "maps_to": ["ai_index_rule"], "required": true },
38
+ { "id": "Q19", "group": "G8", "topic": "AI Permission to Add Dependencies", "maps_to": ["ai_dependency_rule"], "required": true },
39
+ { "id": "Q20", "group": "G8", "topic": "AI Impact Analysis Before Modifying Shared Components", "maps_to": ["ai_breaking_change_rule"], "required": true },
40
+ { "id": "Q21", "group": "G8", "topic": "AI Permission to Modify Config Files", "maps_to": ["ai_config_rule"], "required": true },
41
+ { "id": "Q22", "group": "G8", "topic": "AI Single File Generation Limit", "maps_to": ["ai_max_lines"], "required": true },
42
+ { "id": "Q23", "group": "G9", "topic": "First Screen LCP Target", "maps_to": ["lcp_target", "performance_rules"], "required": true },
43
+ { "id": "Q24", "group": "G9", "topic": "Single Chunk Size Limit", "maps_to": ["bundle_size", "performance_rules"], "required": true }
44
+ ],
45
+ "template_placeholders": {
46
+ "from_questions": ["framework", "meta_framework", "package_manager", "style_solution", "style_specific_rules", "font_strategy", "performance_rules", "state_lib", "state_rules", "server_state_lib", "server_state_rules", "api_type_source", "design_source", "token_layering", "token_layering_rules", "dark_mode", "dark_mode_rules", "responsive_strategy", "breakpoint_rules", "breakpoint_scheme", "i18n", "i18n_rules", "a11y_level", "a11y_extra_rules", "test_coverage", "test_rules", "unit_test_framework", "e2e_framework", "ai_index_rule", "ai_dependency_rule", "ai_breaking_change_rule", "ai_config_rule", "ai_max_lines", "lcp_target", "bundle_size", "tech_stack_rules"],
47
+ "from_fixed_rules": ["FIXED_RULES_A11Y", "FIXED_RULES_AI_BASE", "FIXED_RULES_COMPONENT_CONTRACT", "FIXED_RULES_DENY_LIST", "FIXED_RULES_ERROR_HANDLING", "FIXED_RULES_GIT", "FIXED_RULES_I18N_BASELINE", "FIXED_RULES_NAMING", "FIXED_RULES_PERFORMANCE", "FIXED_RULES_SECURITY", "FIXED_RULES_TYPESCRIPT"],
48
+ "auto_generated": ["deny_list_summary", "recommended_libs"],
49
+ "metadata": ["project_name", "generated_at", "project_scope"]
50
+ }
51
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "mobile",
4
+ "total_questions": 20,
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
+ "_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
+ "groups": [
8
+ { "id": "G1", "topic": "Platform & Language", "quick_mode": true },
9
+ { "id": "G2", "topic": "Architecture", "quick_mode": true },
10
+ { "id": "G3", "topic": "UI Framework", "quick_mode": true },
11
+ { "id": "G4", "topic": "Navigation & State", "quick_mode": true },
12
+ { "id": "G5", "topic": "Networking & Data", "quick_mode": false },
13
+ { "id": "G6", "topic": "Platform Features", "quick_mode": false },
14
+ { "id": "G7", "topic": "Testing", "quick_mode": true },
15
+ { "id": "G8", "topic": "App Distribution", "quick_mode": false },
16
+ { "id": "G9", "topic": "Performance & Accessibility", "quick_mode": false },
17
+ { "id": "G10", "topic": "AI Constraints", "quick_mode": false }
18
+ ],
19
+ "questions": [
20
+ { "id": "Q1", "group": "G1", "topic": "Target Platform", "maps_to": ["platform", "tech_stack_rules"], "required": true },
21
+ { "id": "Q2", "group": "G1", "topic": "Minimum OS Version", "maps_to": ["min_os_version", "tech_stack_rules"], "required": true },
22
+ { "id": "Q3", "group": "G2", "topic": "Architecture Pattern", "maps_to": ["architecture", "arch_rules"], "required": true },
23
+ { "id": "Q4", "group": "G3", "topic": "UI Framework", "maps_to": ["ui_framework", "ui_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
24
+ { "id": "Q5", "group": "G4", "topic": "Navigation Strategy", "maps_to": ["navigation", "navigation_rules"], "required": true },
25
+ { "id": "Q6", "group": "G4", "topic": "State Management", "maps_to": ["state_management", "state_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
26
+ { "id": "Q7", "group": "G5", "topic": "Networking Library", "maps_to": ["networking", "networking_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
27
+ { "id": "Q8", "group": "G5", "topic": "Local Persistence", "maps_to": ["persistence", "persistence_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
28
+ { "id": "Q9", "group": "G6", "topic": "Push Notifications", "maps_to": ["push_notifications", "platform_features_rules"], "required": true },
29
+ { "id": "Q10", "group": "G6", "topic": "Background Tasks", "maps_to": ["background_tasks", "platform_features_rules"], "required": true },
30
+ { "id": "Q11", "group": "G6", "topic": "Permissions Strategy", "maps_to": ["permissions_strategy"], "required": true },
31
+ { "id": "Q12", "group": "G7", "topic": "Test Coverage Requirements", "maps_to": ["test_coverage", "test_rules"], "required": true },
32
+ { "id": "Q13", "group": "G7", "topic": "Unit Test Framework", "maps_to": ["unit_test_framework"], "required": true, "required_if": "Q12 in [A, B]", "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
33
+ { "id": "Q14", "group": "G7", "topic": "UI/E2E Test Framework", "maps_to": ["e2e_framework"], "required": true, "required_if": "Q12 in [A, C]", "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
34
+ { "id": "Q15", "group": "G8", "topic": "Distribution Method", "maps_to": ["distribution", "distribution_rules"], "required": true },
35
+ { "id": "Q16", "group": "G9", "topic": "Performance Targets", "maps_to": ["performance_target", "performance_rules"], "required": true },
36
+ { "id": "Q17", "group": "G9", "topic": "Accessibility Targets", "maps_to": ["a11y_target", "a11y_rules"], "required": true },
37
+ { "id": "Q18", "group": "G10", "topic": "AI Permission to Add Dependencies", "maps_to": ["ai_dependency_rule"], "required": true },
38
+ { "id": "Q19", "group": "G10", "topic": "AI Impact Analysis Before Modifying Shared Code", "maps_to": ["ai_breaking_change_rule"], "required": true },
39
+ { "id": "Q20", "group": "G10", "topic": "AI Platform-Specific Code Generation", "maps_to": ["ai_platform_rule"], "required": true }
40
+ ],
41
+ "template_placeholders": {
42
+ "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
+ "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"],
45
+ "metadata": ["project_name", "generated_at"]
46
+ }
47
+ }
@@ -152,7 +152,7 @@ Detect user intent from their message, then follow the corresponding workflow:
152
152
 
153
153
  **Question 4 — Advanced config?** (multiSelect: false):
154
154
  - No (default) — Use defaults for session timeout and failure behavior
155
- - Yes — Configure session timeout and stop-on-failure options
155
+ - Yes — Configure session timeout, stop-on-failure, and reasoning effort options
156
156
 
157
157
  Note: Bug filter defaults to all bugs (by severity order). Default Critic to Off unless bugs have `severity: "critical"` or `severity: "high"` (in which case default to On). If the user selects "Other" on any option, handle their custom input.
158
158
 
@@ -172,6 +172,14 @@ Detect user intent from their message, then follow the corresponding workflow:
172
172
  - No (default) — Skip deployment after pipeline completes
173
173
  - Yes — Run /prizmkit-deploy automatically after all bugs fixed successfully (`ENABLE_DEPLOY=1`). Deployment is blocked if any bug was not fixed (status not 'completed', 'skipped', or 'needs_info').
174
174
 
175
+ **Question 4 — Reasoning effort** (multiSelect: false):
176
+ - Default (none) — Use CLI default
177
+ - low — Minimize reasoning, fastest output (`PRIZMKIT_EFFORT=low`)
178
+ - medium — Moderate reasoning (`PRIZMKIT_EFFORT=medium`)
179
+ - high — Thorough reasoning for complex tasks (`PRIZMKIT_EFFORT=high`)
180
+ - xhigh — Extensive reasoning (`PRIZMKIT_EFFORT=xhigh`)
181
+ - max — Maximum reasoning, Claude Code only (`PRIZMKIT_EFFORT=max`)
182
+
175
183
  **Environment variable mapping** (for translating user responses → env vars):
176
184
 
177
185
  | Config choice | Environment variable |
@@ -183,13 +191,13 @@ Detect user intent from their message, then follow the corresponding workflow:
183
191
  | Timeout: value | `SESSION_TIMEOUT=<seconds>` |
184
192
  | Stop on failure: On | `STOP_ON_FAILURE=1` |
185
193
  | Deploy: Yes | `ENABLE_DEPLOY=1` |
194
+ | Effort: value | `PRIZMKIT_EFFORT=<value>` |
186
195
 
187
196
  **Advanced environment variables** (not exposed in interactive menu, pass via `--env`):
188
197
 
189
198
  | Variable | Default | Purpose |
190
199
  |----------|---------|---------|
191
200
  | `MODEL` | (none) | AI model override (e.g. `claude-opus-4.6`) |
192
- | `PRIZMKIT_EFFORT` | (none) | AI reasoning effort: `low`\|`medium`\|`high`\|`xhigh`\|`max` (max = Claude Code only) |
193
201
  | `AUTO_PUSH` | `0` | Auto-push to remote after successful bug fix (`1` to enable) |
194
202
  | `DEV_BRANCH` | auto-generated | Custom dev branch name (default: `bugfix/pipeline-{run_id}`) |
195
203
  | `HEARTBEAT_INTERVAL` | `30` | Heartbeat log interval in seconds |
@@ -208,7 +216,7 @@ Detect user intent from their message, then follow the corresponding workflow:
208
216
  ```
209
217
  With all options:
210
218
  ```bash
211
- VERBOSE=1 MAX_RETRIES=5 SESSION_TIMEOUT=3600 ENABLE_DEPLOY=1 \
219
+ VERBOSE=1 MAX_RETRIES=5 SESSION_TIMEOUT=3600 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
212
220
  .prizmkit/dev-pipeline/run-bugfix.sh run .prizmkit/plans/bug-fix-list.json
213
221
  ```
214
222
 
@@ -169,7 +169,7 @@ Detect user intent from their message, then follow the corresponding workflow:
169
169
 
170
170
  **Question 4 — Advanced config?** (multiSelect: false):
171
171
  - No (default) — Use defaults for session timeout and failure behavior
172
- - Yes — Configure session timeout, stop-on-failure, and deploy-after-completion options
172
+ - Yes — Configure session timeout, stop-on-failure, deploy-after-completion, and reasoning effort options
173
173
 
174
174
  Default Critic to Off unless features have `estimated_complexity: "high"` or above (in which case default to On).
175
175
 
@@ -189,6 +189,14 @@ Detect user intent from their message, then follow the corresponding workflow:
189
189
  - No (default) — Skip deployment after pipeline completes
190
190
  - Yes — Run /prizmkit-deploy automatically after all features complete successfully (`ENABLE_DEPLOY=1`). Deployment is blocked if any feature did not complete successfully (status not 'completed' or manually 'skipped').
191
191
 
192
+ **Question 4 — Reasoning effort** (multiSelect: false):
193
+ - Default (none) — Use CLI default
194
+ - low — Minimize reasoning, fastest output (`PRIZMKIT_EFFORT=low`)
195
+ - medium — Moderate reasoning (`PRIZMKIT_EFFORT=medium`)
196
+ - high — Thorough reasoning for complex tasks (`PRIZMKIT_EFFORT=high`)
197
+ - xhigh — Extensive reasoning (`PRIZMKIT_EFFORT=xhigh`)
198
+ - max — Maximum reasoning, Claude Code only (`PRIZMKIT_EFFORT=max`)
199
+
192
200
  **Environment variable mapping** (for translating user responses → env vars):
193
201
 
194
202
  | Config choice | Environment variable |
@@ -200,13 +208,13 @@ Detect user intent from their message, then follow the corresponding workflow:
200
208
  | Timeout: value | `SESSION_TIMEOUT=<seconds>` |
201
209
  | Stop on failure: On | `STOP_ON_FAILURE=1` |
202
210
  | Deploy: Yes | `ENABLE_DEPLOY=1` |
211
+ | Effort: value | `PRIZMKIT_EFFORT=<value>` |
203
212
 
204
213
  **Advanced environment variables** (not exposed in interactive menu, pass via `--env`):
205
214
 
206
215
  | Variable | Default | Purpose |
207
216
  |----------|---------|---------|
208
217
  | `MODEL` | (none) | AI model override (e.g. `claude-opus-4.6`) |
209
- | `PRIZMKIT_EFFORT` | (none) | AI reasoning effort: `low`\|`medium`\|`high`\|`xhigh`\|`max` (max = Claude Code only) |
210
218
  | `AUTO_PUSH` | `0` | Auto-push to remote after successful feature (`1` to enable) |
211
219
  | `DEV_BRANCH` | auto-generated | Custom dev branch name (default: `dev/{feature_id}-YYYYMMDDHHmm`) |
212
220
  | `HEARTBEAT_INTERVAL` | `30` | Heartbeat log interval in seconds |
@@ -226,7 +234,7 @@ Detect user intent from their message, then follow the corresponding workflow:
226
234
  ```
227
235
  With all options:
228
236
  ```bash
229
- VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 SESSION_TIMEOUT=3600 ENABLE_DEPLOY=1 \
237
+ VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 SESSION_TIMEOUT=3600 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
230
238
  .prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json --features F-001:F-005
231
239
  ```
232
240
 
@@ -237,7 +245,7 @@ Detect user intent from their message, then follow the corresponding workflow:
237
245
  With all options:
238
246
  ```bash
239
247
  .prizmkit/dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json --features F-001:F-005 \
240
- --env "VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 ENABLE_DEPLOY=1"
248
+ --env "VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high"
241
249
  ```
242
250
 
243
251
  **Manual mode**: Print the assembled command(s) and **stop here**. Do not execute anything. Do not proceed to step 8.
@@ -170,7 +170,7 @@ Detect user intent from their message, then follow the corresponding workflow:
170
170
 
171
171
  **Question 4 — Advanced config?** (multiSelect: false):
172
172
  - No (default) — Use defaults for critic review, session timeout, and failure behavior
173
- - Yes — Configure critic review, session timeout, and stop-on-failure options
173
+ - Yes — Configure critic review, session timeout, stop-on-failure, and reasoning effort options
174
174
 
175
175
  Note: Refactor filter defaults to all refactor items (by priority order). If the user selects "Other" on any option, handle their custom input.
176
176
 
@@ -196,6 +196,16 @@ Detect user intent from their message, then follow the corresponding workflow:
196
196
 
197
197
  Default Critic to Off unless refactor items have `priority: "critical"` (in which case default to On).
198
198
 
199
+ **If advanced config was selected, also ask about reasoning effort** in a follow-up `AskUserQuestion` call:
200
+
201
+ **Question — Reasoning effort** (multiSelect: false):
202
+ - Default (none) — Use CLI default
203
+ - low — Minimize reasoning, fastest output (`PRIZMKIT_EFFORT=low`)
204
+ - medium — Moderate reasoning (`PRIZMKIT_EFFORT=medium`)
205
+ - high — Thorough reasoning for complex tasks (`PRIZMKIT_EFFORT=high`)
206
+ - xhigh — Extensive reasoning (`PRIZMKIT_EFFORT=xhigh`)
207
+ - max — Maximum reasoning, Claude Code only (`PRIZMKIT_EFFORT=max`)
208
+
199
209
  **Environment variable mapping** (for translating user responses → env vars):
200
210
 
201
211
  | Config choice | Environment variable |
@@ -209,13 +219,13 @@ Detect user intent from their message, then follow the corresponding workflow:
209
219
  | Timeout: value | `SESSION_TIMEOUT=<seconds>` |
210
220
  | Stop on failure: On | `STOP_ON_FAILURE=1` |
211
221
  | Deploy: Yes | `ENABLE_DEPLOY=1` |
222
+ | Effort: value | `PRIZMKIT_EFFORT=<value>` |
212
223
 
213
224
  **Advanced environment variables** (not exposed in interactive menu, pass via `--env`):
214
225
 
215
226
  | Variable | Default | Purpose |
216
227
  |----------|---------|---------|
217
228
  | `MODEL` | (none) | AI model override (e.g. `claude-opus-4.6`) |
218
- | `PRIZMKIT_EFFORT` | (none) | AI reasoning effort: `low`\|`medium`\|`high`\|`xhigh`\|`max` (max = Claude Code only) |
219
229
  | `AUTO_PUSH` | `0` | Auto-push to remote after successful refactor (`1` to enable) |
220
230
  | `DEV_BRANCH` | auto-generated | Custom dev branch name (default: `refactor/pipeline-{run_id}`) |
221
231
  | `HEARTBEAT_INTERVAL` | `30` | Heartbeat log interval in seconds |
@@ -234,7 +244,7 @@ Detect user intent from their message, then follow the corresponding workflow:
234
244
  ```
235
245
  With all options:
236
246
  ```bash
237
- VERBOSE=1 STRICT_BEHAVIOR_CHECK=1 MAX_RETRIES=5 SESSION_TIMEOUT=3600 ENABLE_DEPLOY=1 \
247
+ VERBOSE=1 STRICT_BEHAVIOR_CHECK=1 MAX_RETRIES=5 SESSION_TIMEOUT=3600 ENABLE_DEPLOY=1 PRIZMKIT_EFFORT=high \
238
248
  .prizmkit/dev-pipeline/run-refactor.sh run .prizmkit/plans/refactor-list.json
239
249
  ```
240
250
 
@@ -332,22 +332,23 @@ For each selected layer, run the rules Q&A workflow. This follows the 4-phase ru
332
332
 
333
333
  **Phase A — Load layer resources:**
334
334
  - Read `${SKILL_DIR}/references/rules/<layer>/fixed-rules.md` — industry-consensus rules injected without asking
335
- - Read `${SKILL_DIR}/references/rules/<layer>/question-bank.md` — interactive questions organized in groups (G1→G10)
335
+ - Read `${SKILL_DIR}/references/rules/<layer>/question-bank.md` — interactive questions organized in groups (G1→G10): authoritative source for question text, options, "Recommended" markers, and Notes
336
+ - Read `${SKILL_DIR}/references/rules/<layer>/question-manifest.json` — machine-readable structure for this layer. **This is your asking checklist.** It lists, per question: `group`, `required`, `maps_to` (which template placeholders the answer fills), and conditional fields (`required_if`, `auto_derived_when`, `options_vary_by`). Its `groups[]` carries each group's `quick_mode` flag, and `template_placeholders` is the expected-set for the Phase D self-check. Use the manifest to track coverage; use question-bank.md for the actual wording you present to the user. If a question id in one file is absent from the other, trust question-bank.md for content and note the drift.
336
337
 
337
338
  **Phase B — Interactive Q&A:**
338
339
  - Ask questions one group at a time (max 3 questions per message), as defined in question-bank.md
339
340
  - Each question shows a "Recommended" option to reduce decision cost
340
- - **Quick mode**: ask only the following groups per layer. All other groups adopt recommended defaults silently.
341
- - **Frontend**: G1 (Tech Stack), G2 (Styling), G3 (State & Data Fetching), G7 (Testing & Quality). Skip: G4 (Design System), G5 (Responsive), G6 (i18n), G8 (AI Vibecoding), G9 (Performance).
342
- - **Backend**: G1 (Language & Runtime), G2 (Framework & Architecture), G3 (API Style), G4 (Data Layer), G7 (Testing & Quality). Skip: G5 (Auth), G6 (Infrastructure), G8 (Observability), G9 (AI Constraints).
343
- - **Database**: G1 (Database Selection), G2 (Data Modeling), G3 (Migration), G7 (AI Constraints). Skip: G4 (Index & Performance), G5 (Security & Compliance), G6 (High Availability & Ops).
344
- - **Mobile**: G1 (Platform & Language), G2 (Architecture), G3 (UI Framework), G4 (Navigation & State), G7 (Testing). Skip: G5 (Networking & Data), G6 (Platform Features), G8 (App Distribution), G9 (Performance & Accessibility), G10 (AI Constraints).
345
- - **Full mode**: ask all groups in order (G1→G9 for frontend/backend, G1→G7 for database, G1→G10 for mobile)
341
+ - **Quick mode**: ask only the groups whose `quick_mode` is `true` in `question-manifest.json`. All other groups adopt recommended defaults silently. (The manifest is the single source of truth for quick-mode membership — do not hardcode group lists here.)
342
+ - **Full mode**: ask all groups in manifest order (`groups[]`).
343
+ - **Conditional questions** (driven by the manifest's per-question fields):
344
+ - `required_if: "<expr>"` ask this question only when the expression over prior answers holds (e.g. Q14 `required_if: Q13 != D`). If the condition is false, the question is legitimately skipped not a coverage gap.
345
+ - `auto_derived_when: "<expr>"` when this holds, fill the mapped placeholder(s) from the prior answer without asking (e.g. backend Q6 `auto_derived_when: Q5 in [GraphQL, gRPC]`). Count as satisfied, not skipped.
346
+ - `options_vary_by: "<Qid>"` the question is still asked; only its option list depends on that prior answer (e.g. framework/ORM options vary by language). Never affects whether the question is required.
346
347
  - Shortcut commands work at any point:
347
348
  - `recommended` / `default` → adopt all recommended for current group
348
349
  - `all recommended` → adopt all recommended for all remaining groups
349
350
  - `skip` → mark current group as "Not required at this stage"
350
- - Record answers in memory after each group.
351
+ - Record answers in memory after each group. Track which manifest questions are answered, auto-derived, or conditionally skipped so Phase D can verify coverage.
351
352
 
352
353
  **Phase C — Auto-derivation:**
353
354
  - Read `${SKILL_DIR}/references/rules/<layer>/derivation-rules.md`
@@ -357,8 +358,10 @@ For each selected layer, run the rules Q&A workflow. This follows the 4-phase ru
357
358
  **Phase D — Render and write:**
358
359
  - Read `${SKILL_DIR}/references/rules/<layer>/template.md`
359
360
  - Fill all template placeholders with accumulated content from Phases A+B+C
360
- - **Post-render self-check**: scan for residual `{{ ` or ` }}` — count must be 0 before writing
361
- - Generate Appendix A (Deny List) and Appendix B (Recommended Tools) per template instructions
361
+ - **Post-render self-check** (driven by `question-manifest.json` `template_placeholders`):
362
+ 1. **Coverage pass** for every placeholder in `from_questions`, confirm it traces to an answered question OR an `auto_derived_when` path OR a conditionally-skipped question (`required_if` false). If a `from_questions` placeholder has no source, you skipped a required question — go back and ask it before writing.
363
+ 2. **Residual pass** — scan the rendered document for any residual `{{ ` or ` }}`; count must be 0. Placeholders in `from_fixed_rules` / `auto_generated` / `metadata` are filled from fixed-rules.md, Phase D generation, and project metadata respectively — they are NOT expected to come from Q&A, but they MUST still be rendered (no residual braces).
364
+ - Generate Appendix A (Deny List) and Appendix B (Recommended Tools) per template instructions — these fill the `auto_generated` placeholders
362
365
  - Create `.prizmkit/rules/` directory if it doesn't exist
363
366
  - Write `.prizmkit/rules/<layer>-rules.md`
364
367
 
@@ -0,0 +1,46 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "backend",
4
+ "total_questions": 20,
5
+ "_doc": "Machine-readable structure for backend 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
+ "_conditions": "required_if / auto_derived_when use simple expressions over recorded answers, e.g. 'Q5 == RESTful', 'Q13 != D', 'Q5 in [GraphQL, gRPC]'. options_vary_by names a prior answer that changes the OPTION LIST only (question is still asked; never affects required).",
7
+ "groups": [
8
+ { "id": "G1", "topic": "Language & Runtime", "quick_mode": true },
9
+ { "id": "G2", "topic": "Framework & Architecture", "quick_mode": true },
10
+ { "id": "G3", "topic": "API Style", "quick_mode": true },
11
+ { "id": "G4", "topic": "Data Layer", "quick_mode": true },
12
+ { "id": "G5", "topic": "Auth", "quick_mode": false },
13
+ { "id": "G6", "topic": "Infrastructure", "quick_mode": false },
14
+ { "id": "G7", "topic": "Testing & Quality", "quick_mode": true },
15
+ { "id": "G8", "topic": "Observability", "quick_mode": false },
16
+ { "id": "G9", "topic": "AI Constraints", "quick_mode": false }
17
+ ],
18
+ "questions": [
19
+ { "id": "Q1", "group": "G1", "topic": "Programming Language", "maps_to": ["language", "tech_stack_rules"], "required": true },
20
+ { "id": "Q2", "group": "G1", "topic": "Runtime Version", "maps_to": ["runtime_version"], "required": true },
21
+ { "id": "Q3", "group": "G2", "topic": "Web Framework", "maps_to": ["framework", "tech_stack_rules"], "required": true, "options_vary_by": "Q1", "note_open_ended_when": "Q1 == Custom" },
22
+ { "id": "Q4", "group": "G2", "topic": "Architecture Pattern", "maps_to": ["architecture", "arch_rules"], "required": true },
23
+ { "id": "Q5", "group": "G3", "topic": "API Style", "maps_to": ["api_style", "api_rules"], "required": true },
24
+ { "id": "Q6", "group": "G3", "topic": "API Documentation", "maps_to": ["api_docs"], "required": true, "required_if": "Q5 == RESTful", "auto_derived_when": "Q5 in [GraphQL, gRPC]" },
25
+ { "id": "Q7", "group": "G4", "topic": "ORM / Data Access", "maps_to": ["orm", "data_rules"], "required": true, "options_vary_by": "Q1", "note_open_ended_when": "Q1 == Custom" },
26
+ { "id": "Q8", "group": "G4", "topic": "Database", "maps_to": ["database"], "required": true },
27
+ { "id": "Q9", "group": "G5", "topic": "Authentication Scheme", "maps_to": ["auth_scheme", "auth_rules"], "required": true },
28
+ { "id": "Q10", "group": "G6", "topic": "Caching", "maps_to": ["cache", "cache_rules"], "required": true },
29
+ { "id": "Q11", "group": "G6", "topic": "Message Queue", "maps_to": ["mq", "mq_rules"], "required": true },
30
+ { "id": "Q12", "group": "G6", "topic": "Containerization & Deployment", "maps_to": ["container", "deploy_rules"], "required": true },
31
+ { "id": "Q13", "group": "G7", "topic": "Test Coverage Requirements", "maps_to": ["test_requirement", "test_rules"], "required": true },
32
+ { "id": "Q14", "group": "G7", "topic": "Test Framework", "maps_to": ["test_framework"], "required": true, "required_if": "Q13 != D", "options_vary_by": "Q1" },
33
+ { "id": "Q15", "group": "G7", "topic": "Mock Strategy", "maps_to": ["mock_strategy", "test_rules"], "required": true },
34
+ { "id": "Q16", "group": "G8", "topic": "Logging", "maps_to": ["logging", "observability_rules"], "required": true },
35
+ { "id": "Q17", "group": "G8", "topic": "Monitoring & Tracing", "maps_to": ["monitoring", "observability_rules"], "required": true },
36
+ { "id": "Q18", "group": "G9", "topic": "AI Permission to Add Dependencies", "maps_to": ["ai_dependency_rule"], "required": true },
37
+ { "id": "Q19", "group": "G9", "topic": "AI Modifying Shared Modules", "maps_to": ["ai_breaking_change_rule"], "required": true },
38
+ { "id": "Q20", "group": "G9", "topic": "AI Modifying Configuration", "maps_to": ["ai_config_rule"], "required": true }
39
+ ],
40
+ "template_placeholders": {
41
+ "from_questions": ["language", "runtime_version", "framework", "architecture", "api_style", "api_docs", "orm", "database", "auth_scheme", "cache", "mq", "container", "test_requirement", "test_framework", "mock_strategy", "logging", "monitoring", "ai_dependency_rule", "ai_breaking_change_rule", "ai_config_rule", "tech_stack_rules", "arch_rules", "api_rules", "auth_rules", "data_rules", "cache_rules", "mq_rules", "deploy_rules", "observability_rules", "test_rules"],
42
+ "from_fixed_rules": ["FIXED_RULES_STRUCTURE", "FIXED_RULES_API", "FIXED_RULES_ERROR", "FIXED_RULES_SECURITY", "FIXED_RULES_RATE_LIMITING", "FIXED_RULES_DATABASE", "FIXED_RULES_OBSERVABILITY", "FIXED_RULES_TRACING", "FIXED_RULES_CONFIG", "FIXED_RULES_ASYNC", "FIXED_RULES_MESSAGE_DELIVERY", "FIXED_RULES_GRACEFUL_SHUTDOWN", "FIXED_RULES_TEST", "FIXED_RULES_AI_BASE"],
43
+ "auto_generated": ["deny_list_summary", "recommended_libs"],
44
+ "metadata": ["project_name", "generated_at"]
45
+ }
46
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "database",
4
+ "total_questions": 15,
5
+ "_doc": "Machine-readable structure for database 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
+ "_conditions": "required_if / auto_derived_when use simple expressions over recorded answers. options_vary_by names a prior answer that changes the OPTION LIST only (question is still asked; never affects required). A single answer may fill more than one placeholder (a TL;DR value + a rules-block), both listed in maps_to.",
7
+ "groups": [
8
+ { "id": "G1", "topic": "Database Selection", "quick_mode": true },
9
+ { "id": "G2", "topic": "Data Modeling", "quick_mode": true },
10
+ { "id": "G3", "topic": "Migration", "quick_mode": true },
11
+ { "id": "G4", "topic": "Index & Performance", "quick_mode": false },
12
+ { "id": "G5", "topic": "Security & Compliance", "quick_mode": false },
13
+ { "id": "G6", "topic": "High Availability & Ops", "quick_mode": false },
14
+ { "id": "G7", "topic": "AI Constraints", "quick_mode": true }
15
+ ],
16
+ "questions": [
17
+ { "id": "Q1", "group": "G1", "topic": "Primary Database", "maps_to": ["database", "tech_rules"], "required": true },
18
+ { "id": "Q2", "group": "G1", "topic": "Cache Layer", "maps_to": ["cache", "cache_rules"], "required": true },
19
+ { "id": "Q3", "group": "G2", "topic": "Primary Key Strategy", "maps_to": ["pk_strategy", "schema_rules"], "required": true },
20
+ { "id": "Q4", "group": "G2", "topic": "Soft Delete", "maps_to": ["soft_delete", "schema_rules"], "required": true },
21
+ { "id": "Q5", "group": "G2", "topic": "Normalization Level", "maps_to": ["normalization", "schema_rules"], "required": true },
22
+ { "id": "Q6", "group": "G3", "topic": "Migration Tool", "maps_to": ["migration_tool", "migration_rules"], "required": true },
23
+ { "id": "Q7", "group": "G4", "topic": "Query Complexity", "maps_to": ["workload_type", "performance_rules"], "required": true },
24
+ { "id": "Q8", "group": "G4", "topic": "Estimated Data Volume", "maps_to": ["data_scale", "performance_rules"], "required": true },
25
+ { "id": "Q9", "group": "G5", "topic": "Data Sensitivity Level", "maps_to": ["data_sensitivity", "security_rules"], "required": true },
26
+ { "id": "Q10", "group": "G5", "topic": "Audit Requirements", "maps_to": ["audit", "audit_rules"], "required": true, "multi_select": true },
27
+ { "id": "Q11", "group": "G6", "topic": "Deployment Method", "maps_to": ["deployment", "ops_rules"], "required": true },
28
+ { "id": "Q12", "group": "G6", "topic": "Backup Strategy", "maps_to": ["backup", "ops_rules"], "required": true },
29
+ { "id": "Q13", "group": "G6", "topic": "High Availability Requirements", "maps_to": ["ha", "ops_rules"], "required": true },
30
+ { "id": "Q14", "group": "G7", "topic": "AI Permission to Modify Database Structure", "maps_to": ["ai_ddl_rule", "ai_ddl_permission"], "required": true },
31
+ { "id": "Q15", "group": "G7", "topic": "AI Safety Constraints", "maps_to": ["ai_safety_rule", "ai_safety_constraint"], "required": true }
32
+ ],
33
+ "template_placeholders": {
34
+ "from_questions": ["database", "tech_rules", "cache", "cache_rules", "pk_strategy", "schema_rules", "soft_delete", "normalization", "migration_tool", "migration_rules", "workload_type", "performance_rules", "data_scale", "data_sensitivity", "security_rules", "audit", "audit_rules", "deployment", "ops_rules", "backup", "ha", "ai_ddl_rule", "ai_ddl_permission", "ai_safety_rule", "ai_safety_constraint"],
35
+ "from_fixed_rules": ["FIXED_RULES_AI_BASE", "FIXED_RULES_BACKUP", "FIXED_RULES_CONNECTION", "FIXED_RULES_INDEX", "FIXED_RULES_MIGRATION", "FIXED_RULES_PERFORMANCE", "FIXED_RULES_QUERY", "FIXED_RULES_SCHEMA", "FIXED_RULES_SECURITY", "FIXED_RULES_TRANSACTION", "FIXED_RULES_TYPES"],
36
+ "auto_generated": ["deny_list_summary", "recommended_libs"],
37
+ "metadata": ["project_name", "generated_at"]
38
+ }
39
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "frontend",
4
+ "total_questions": 25,
5
+ "_doc": "Machine-readable structure for frontend 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
+ "_conditions": "required_if / auto_derived_when use simple expressions over recorded answers, e.g. 'Q15 in [A, B]'. options_vary_by names a prior answer that changes the OPTION LIST/recommendation only (question is still asked; never affects required).",
7
+ "groups": [
8
+ { "id": "G1", "topic": "Tech Stack", "quick_mode": true },
9
+ { "id": "G2", "topic": "Styling", "quick_mode": true },
10
+ { "id": "G3", "topic": "State & Data Fetching", "quick_mode": true },
11
+ { "id": "G4", "topic": "Design System", "quick_mode": false },
12
+ { "id": "G5", "topic": "Responsive & Adaptation", "quick_mode": false },
13
+ { "id": "G6", "topic": "i18n & Accessibility", "quick_mode": false },
14
+ { "id": "G7", "topic": "Testing & Quality", "quick_mode": true },
15
+ { "id": "G8", "topic": "AI Vibecoding Constraints", "quick_mode": false },
16
+ { "id": "G9", "topic": "Performance Baseline", "quick_mode": false }
17
+ ],
18
+ "questions": [
19
+ { "id": "Q1", "group": "G1", "topic": "Frontend Framework", "maps_to": ["framework", "tech_stack_rules"], "required": true },
20
+ { "id": "Q2", "group": "G1", "topic": "Meta-Framework", "maps_to": ["meta_framework", "tech_stack_rules"], "required": true, "options_vary_by": "Q1" },
21
+ { "id": "Q3", "group": "G1", "topic": "Package Manager", "maps_to": ["package_manager", "tech_stack_rules"], "required": true },
22
+ { "id": "Q4", "group": "G2", "topic": "Styling Solution", "maps_to": ["style_solution", "style_specific_rules"], "required": true },
23
+ { "id": "Q4b", "group": "G2", "topic": "Font Loading Strategy", "maps_to": ["font_strategy", "performance_rules"], "required": true },
24
+ { "id": "Q5", "group": "G3", "topic": "Global State Library", "maps_to": ["state_lib", "state_rules"], "required": true, "options_vary_by": "Q1" },
25
+ { "id": "Q6", "group": "G3", "topic": "Server State Library", "maps_to": ["server_state_lib", "server_state_rules"], "required": true },
26
+ { "id": "Q7", "group": "G3", "topic": "API Type Source", "maps_to": ["api_type_source", "server_state_rules"], "required": true },
27
+ { "id": "Q8", "group": "G4", "topic": "Primary Design/Mockup Source", "maps_to": ["design_source"], "required": true },
28
+ { "id": "Q9", "group": "G4", "topic": "Token Naming Layers", "maps_to": ["token_layering", "token_layering_rules"], "required": true },
29
+ { "id": "Q10", "group": "G4", "topic": "Dark Mode", "maps_to": ["dark_mode", "dark_mode_rules"], "required": true },
30
+ { "id": "Q11", "group": "G5", "topic": "Adaptation Strategy", "maps_to": ["responsive_strategy", "breakpoint_rules"], "required": true },
31
+ { "id": "Q12", "group": "G5", "topic": "Breakpoint Scheme", "maps_to": ["breakpoint_scheme", "breakpoint_rules"], "required": true },
32
+ { "id": "Q13", "group": "G6", "topic": "Internationalization", "maps_to": ["i18n", "i18n_rules"], "required": true },
33
+ { "id": "Q14", "group": "G6", "topic": "Accessibility Target", "maps_to": ["a11y_level", "a11y_extra_rules"], "required": true },
34
+ { "id": "Q15", "group": "G7", "topic": "Test Coverage Requirements", "maps_to": ["test_coverage", "test_rules"], "required": true },
35
+ { "id": "Q16", "group": "G7", "topic": "Unit Test Framework", "maps_to": ["unit_test_framework", "test_rules"], "required": true, "required_if": "Q15 in [A, B]" },
36
+ { "id": "Q17", "group": "G7", "topic": "E2E Framework", "maps_to": ["e2e_framework", "test_rules"], "required": true, "required_if": "Q15 in [A, C]" },
37
+ { "id": "Q18", "group": "G8", "topic": "AI Component Index Sync", "maps_to": ["ai_index_rule"], "required": true },
38
+ { "id": "Q19", "group": "G8", "topic": "AI Permission to Add Dependencies", "maps_to": ["ai_dependency_rule"], "required": true },
39
+ { "id": "Q20", "group": "G8", "topic": "AI Impact Analysis Before Modifying Shared Components", "maps_to": ["ai_breaking_change_rule"], "required": true },
40
+ { "id": "Q21", "group": "G8", "topic": "AI Permission to Modify Config Files", "maps_to": ["ai_config_rule"], "required": true },
41
+ { "id": "Q22", "group": "G8", "topic": "AI Single File Generation Limit", "maps_to": ["ai_max_lines"], "required": true },
42
+ { "id": "Q23", "group": "G9", "topic": "First Screen LCP Target", "maps_to": ["lcp_target", "performance_rules"], "required": true },
43
+ { "id": "Q24", "group": "G9", "topic": "Single Chunk Size Limit", "maps_to": ["bundle_size", "performance_rules"], "required": true }
44
+ ],
45
+ "template_placeholders": {
46
+ "from_questions": ["framework", "meta_framework", "package_manager", "style_solution", "style_specific_rules", "font_strategy", "performance_rules", "state_lib", "state_rules", "server_state_lib", "server_state_rules", "api_type_source", "design_source", "token_layering", "token_layering_rules", "dark_mode", "dark_mode_rules", "responsive_strategy", "breakpoint_rules", "breakpoint_scheme", "i18n", "i18n_rules", "a11y_level", "a11y_extra_rules", "test_coverage", "test_rules", "unit_test_framework", "e2e_framework", "ai_index_rule", "ai_dependency_rule", "ai_breaking_change_rule", "ai_config_rule", "ai_max_lines", "lcp_target", "bundle_size", "tech_stack_rules"],
47
+ "from_fixed_rules": ["FIXED_RULES_A11Y", "FIXED_RULES_AI_BASE", "FIXED_RULES_COMPONENT_CONTRACT", "FIXED_RULES_DENY_LIST", "FIXED_RULES_ERROR_HANDLING", "FIXED_RULES_GIT", "FIXED_RULES_I18N_BASELINE", "FIXED_RULES_NAMING", "FIXED_RULES_PERFORMANCE", "FIXED_RULES_SECURITY", "FIXED_RULES_TYPESCRIPT"],
48
+ "auto_generated": ["deny_list_summary", "recommended_libs"],
49
+ "metadata": ["project_name", "generated_at", "project_scope"]
50
+ }
51
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "schema_version": "app-planner-question-manifest-v1",
3
+ "layer": "mobile",
4
+ "total_questions": 20,
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
+ "_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
+ "groups": [
8
+ { "id": "G1", "topic": "Platform & Language", "quick_mode": true },
9
+ { "id": "G2", "topic": "Architecture", "quick_mode": true },
10
+ { "id": "G3", "topic": "UI Framework", "quick_mode": true },
11
+ { "id": "G4", "topic": "Navigation & State", "quick_mode": true },
12
+ { "id": "G5", "topic": "Networking & Data", "quick_mode": false },
13
+ { "id": "G6", "topic": "Platform Features", "quick_mode": false },
14
+ { "id": "G7", "topic": "Testing", "quick_mode": true },
15
+ { "id": "G8", "topic": "App Distribution", "quick_mode": false },
16
+ { "id": "G9", "topic": "Performance & Accessibility", "quick_mode": false },
17
+ { "id": "G10", "topic": "AI Constraints", "quick_mode": false }
18
+ ],
19
+ "questions": [
20
+ { "id": "Q1", "group": "G1", "topic": "Target Platform", "maps_to": ["platform", "tech_stack_rules"], "required": true },
21
+ { "id": "Q2", "group": "G1", "topic": "Minimum OS Version", "maps_to": ["min_os_version", "tech_stack_rules"], "required": true },
22
+ { "id": "Q3", "group": "G2", "topic": "Architecture Pattern", "maps_to": ["architecture", "arch_rules"], "required": true },
23
+ { "id": "Q4", "group": "G3", "topic": "UI Framework", "maps_to": ["ui_framework", "ui_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
24
+ { "id": "Q5", "group": "G4", "topic": "Navigation Strategy", "maps_to": ["navigation", "navigation_rules"], "required": true },
25
+ { "id": "Q6", "group": "G4", "topic": "State Management", "maps_to": ["state_management", "state_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
26
+ { "id": "Q7", "group": "G5", "topic": "Networking Library", "maps_to": ["networking", "networking_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
27
+ { "id": "Q8", "group": "G5", "topic": "Local Persistence", "maps_to": ["persistence", "persistence_rules"], "required": true, "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
28
+ { "id": "Q9", "group": "G6", "topic": "Push Notifications", "maps_to": ["push_notifications", "platform_features_rules"], "required": true },
29
+ { "id": "Q10", "group": "G6", "topic": "Background Tasks", "maps_to": ["background_tasks", "platform_features_rules"], "required": true },
30
+ { "id": "Q11", "group": "G6", "topic": "Permissions Strategy", "maps_to": ["permissions_strategy"], "required": true },
31
+ { "id": "Q12", "group": "G7", "topic": "Test Coverage Requirements", "maps_to": ["test_coverage", "test_rules"], "required": true },
32
+ { "id": "Q13", "group": "G7", "topic": "Unit Test Framework", "maps_to": ["unit_test_framework"], "required": true, "required_if": "Q12 in [A, B]", "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
33
+ { "id": "Q14", "group": "G7", "topic": "UI/E2E Test Framework", "maps_to": ["e2e_framework"], "required": true, "required_if": "Q12 in [A, C]", "options_vary_by": "Q1", "dual_native_repeat_when": "Q1 == E" },
34
+ { "id": "Q15", "group": "G8", "topic": "Distribution Method", "maps_to": ["distribution", "distribution_rules"], "required": true },
35
+ { "id": "Q16", "group": "G9", "topic": "Performance Targets", "maps_to": ["performance_target", "performance_rules"], "required": true },
36
+ { "id": "Q17", "group": "G9", "topic": "Accessibility Targets", "maps_to": ["a11y_target", "a11y_rules"], "required": true },
37
+ { "id": "Q18", "group": "G10", "topic": "AI Permission to Add Dependencies", "maps_to": ["ai_dependency_rule"], "required": true },
38
+ { "id": "Q19", "group": "G10", "topic": "AI Impact Analysis Before Modifying Shared Code", "maps_to": ["ai_breaking_change_rule"], "required": true },
39
+ { "id": "Q20", "group": "G10", "topic": "AI Platform-Specific Code Generation", "maps_to": ["ai_platform_rule"], "required": true }
40
+ ],
41
+ "template_placeholders": {
42
+ "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
+ "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"],
45
+ "metadata": ["project_name", "generated_at"]
46
+ }
47
+ }
@@ -177,7 +177,7 @@ Detect user intent from their message, then follow the corresponding workflow:
177
177
 
178
178
  **Question 4 — Advanced config?** (multiSelect: false):
179
179
  - No (default) — Use defaults for session timeout and failure behavior
180
- - Yes — Configure session timeout and stop-on-failure options
180
+ - Yes — Configure session timeout, stop-on-failure, and reasoning effort options
181
181
 
182
182
  Note: Bug filter defaults to all bugs (by severity order). Default Critic to Off unless bugs have `severity: "critical"` or `severity: "high"` (in which case default to On). If the user selects "Other" on any option, handle their custom input.
183
183
 
@@ -193,6 +193,14 @@ Detect user intent from their message, then follow the corresponding workflow:
193
193
  - Off (default) — Pipeline continues to next task after failure
194
194
  - On — Pipeline halts immediately when a task exhausts all retries (`STOP_ON_FAILURE=1`)
195
195
 
196
+ **Question 3 — Reasoning effort** (multiSelect: false):
197
+ - Default (none) — Use CLI default
198
+ - low — Minimize reasoning, fastest output (`PRIZMKIT_EFFORT=low`)
199
+ - medium — Moderate reasoning (`PRIZMKIT_EFFORT=medium`)
200
+ - high — Thorough reasoning for complex tasks (`PRIZMKIT_EFFORT=high`)
201
+ - xhigh — Extensive reasoning (`PRIZMKIT_EFFORT=xhigh`)
202
+ - max — Maximum reasoning, Claude Code only (`PRIZMKIT_EFFORT=max`)
203
+
196
204
  **Environment variable mapping** (for translating user responses → env vars):
197
205
 
198
206
  | Config choice | Environment variable |
@@ -203,6 +211,7 @@ Detect user intent from their message, then follow the corresponding workflow:
203
211
  | Critic: On | `ENABLE_CRITIC=true` |
204
212
  | Timeout: value | `SESSION_TIMEOUT=<seconds>` |
205
213
  | Stop on failure: On | `STOP_ON_FAILURE=1` |
214
+ | Effort: value | `PRIZMKIT_EFFORT=<value>` |
206
215
 
207
216
  **Advanced environment variables** (not exposed in interactive menu, pass via `--env`):
208
217
 
@@ -220,7 +229,7 @@ Detect user intent from their message, then follow the corresponding workflow:
220
229
  ```
221
230
  With all options:
222
231
  ```powershell
223
- $env:VERBOSE = "1"; $env:MAX_RETRIES = "5"; $env:SESSION_TIMEOUT = "3600"
232
+ $env:VERBOSE = "1"; $env:MAX_RETRIES = "5"; $env:SESSION_TIMEOUT = "3600"; $env:PRIZMKIT_EFFORT = "high"
224
233
  .\.prizmkit\dev-pipeline\run-bugfix.ps1 run .prizmkit/plans/bug-fix-list.json
225
234
  ```
226
235
 
@@ -231,7 +240,7 @@ Detect user intent from their message, then follow the corresponding workflow:
231
240
  With all options:
232
241
  ```powershell
233
242
  .\.prizmkit\dev-pipeline\launch-bugfix-daemon.ps1 start .prizmkit/plans/bug-fix-list.json `
234
- --env "VERBOSE=1 MAX_RETRIES=5"
243
+ --env "VERBOSE=1 MAX_RETRIES=5 PRIZMKIT_EFFORT=high"
235
244
  ```
236
245
 
237
246
  **Manual mode**: Print the assembled command(s) and **stop here**. Do not execute anything. Do not proceed to step 7.
@@ -195,7 +195,7 @@ Detect user intent from their message, then follow the corresponding workflow:
195
195
 
196
196
  **Question 4 — Advanced config?** (multiSelect: false):
197
197
  - No (default) — Use defaults for session timeout and failure behavior
198
- - Yes — Configure session timeout and stop-on-failure options
198
+ - Yes — Configure session timeout, stop-on-failure, and reasoning effort options
199
199
 
200
200
  Default Critic to Off unless features have `estimated_complexity: "high"` or above (in which case default to On).
201
201
 
@@ -211,6 +211,14 @@ Detect user intent from their message, then follow the corresponding workflow:
211
211
  - Off (default) — Pipeline continues to next task after failure
212
212
  - On — Pipeline halts immediately when a task exhausts all retries (`STOP_ON_FAILURE=1`)
213
213
 
214
+ **Question 3 — Reasoning effort** (multiSelect: false):
215
+ - Default (none) — Use CLI default
216
+ - low — Minimize reasoning, fastest output (`PRIZMKIT_EFFORT=low`)
217
+ - medium — Moderate reasoning (`PRIZMKIT_EFFORT=medium`)
218
+ - high — Thorough reasoning for complex tasks (`PRIZMKIT_EFFORT=high`)
219
+ - xhigh — Extensive reasoning (`PRIZMKIT_EFFORT=xhigh`)
220
+ - max — Maximum reasoning, Claude Code only (`PRIZMKIT_EFFORT=max`)
221
+
214
222
  **Environment variable mapping** (for translating user responses → env vars):
215
223
 
216
224
  | Config choice | Environment variable |
@@ -221,6 +229,7 @@ Detect user intent from their message, then follow the corresponding workflow:
221
229
  | Max retries: N | `MAX_RETRIES=N` |
222
230
  | Timeout: value | `SESSION_TIMEOUT=<seconds>` |
223
231
  | Stop on failure: On | `STOP_ON_FAILURE=1` |
232
+ | Effort: value | `PRIZMKIT_EFFORT=<value>` |
224
233
 
225
234
  **Advanced environment variables** (not exposed in interactive menu, pass via `--env`):
226
235
 
@@ -239,7 +248,7 @@ Detect user intent from their message, then follow the corresponding workflow:
239
248
  ```
240
249
  With all options:
241
250
  ```powershell
242
- $env:VERBOSE = "1"; $env:ENABLE_CRITIC = "true"; $env:MAX_RETRIES = "5"; $env:SESSION_TIMEOUT = "3600"
251
+ $env:VERBOSE = "1"; $env:ENABLE_CRITIC = "true"; $env:MAX_RETRIES = "5"; $env:SESSION_TIMEOUT = "3600"; $env:PRIZMKIT_EFFORT = "high"
243
252
  .\.prizmkit\dev-pipeline\run-feature.ps1 run .prizmkit/plans/feature-list.json --features F-001:F-005
244
253
  ```
245
254
 
@@ -250,7 +259,7 @@ Detect user intent from their message, then follow the corresponding workflow:
250
259
  With all options:
251
260
  ```powershell
252
261
  .\.prizmkit\dev-pipeline\launch-feature-daemon.ps1 start .prizmkit/plans/feature-list.json --features F-001:F-005 `
253
- --env "VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5"
262
+ --env "VERBOSE=1 ENABLE_CRITIC=true MAX_RETRIES=5 PRIZMKIT_EFFORT=high"
254
263
  ```
255
264
 
256
265
  **Manual mode**: Print the assembled command(s) and **stop here**. Do not execute anything. Do not proceed to step 8.
@@ -192,7 +192,7 @@ Detect user intent from their message, then follow the corresponding workflow:
192
192
 
193
193
  **Question 3 — Advanced config?** (multiSelect: false):
194
194
  - No (default) — Use defaults for critic review, session timeout, and failure behavior
195
- - Yes — Configure critic review, session timeout, and stop-on-failure options
195
+ - Yes — Configure critic review, session timeout, stop-on-failure, and reasoning effort options
196
196
 
197
197
  Note: Refactor filter defaults to all refactor items (by priority order). If the user selects "Other" on any option, handle their custom input.
198
198
 
@@ -212,6 +212,14 @@ Detect user intent from their message, then follow the corresponding workflow:
212
212
  - Off (default) — Skip adversarial review
213
213
  - On — Enable adversarial critic review: an independent AI agent reviews the refactor plan for completeness and the implementation for regressions, missing edge cases, and behavior violations. Adds ~5-10 min per refactor task.
214
214
 
215
+ **Question 4 — Reasoning effort** (multiSelect: false):
216
+ - Default (none) — Use CLI default
217
+ - low — Minimize reasoning, fastest output (`PRIZMKIT_EFFORT=low`)
218
+ - medium — Moderate reasoning (`PRIZMKIT_EFFORT=medium`)
219
+ - high — Thorough reasoning for complex tasks (`PRIZMKIT_EFFORT=high`)
220
+ - xhigh — Extensive reasoning (`PRIZMKIT_EFFORT=xhigh`)
221
+ - max — Maximum reasoning, Claude Code only (`PRIZMKIT_EFFORT=max`)
222
+
215
223
  Default Critic to Off unless refactor items have `priority: "critical"` (in which case default to On).
216
224
 
217
225
  **Environment variable mapping** (for translating user responses → env vars):
@@ -224,6 +232,7 @@ Detect user intent from their message, then follow the corresponding workflow:
224
232
  | Critic: On | `ENABLE_CRITIC=true` |
225
233
  | Timeout: value | `SESSION_TIMEOUT=<seconds>` |
226
234
  | Stop on failure: On | `STOP_ON_FAILURE=1` |
235
+ | Effort: value | `PRIZMKIT_EFFORT=<value>` |
227
236
 
228
237
  **Advanced environment variables** (not exposed in interactive menu, pass via `--env`):
229
238
 
@@ -241,7 +250,7 @@ Detect user intent from their message, then follow the corresponding workflow:
241
250
  ```
242
251
  With all options:
243
252
  ```powershell
244
- $env:VERBOSE = "1"; $env:MAX_RETRIES = "5"; $env:SESSION_TIMEOUT = "3600"
253
+ $env:VERBOSE = "1"; $env:MAX_RETRIES = "5"; $env:SESSION_TIMEOUT = "3600"; $env:PRIZMKIT_EFFORT = "high"
245
254
  .\.prizmkit\dev-pipeline\run-refactor.ps1 run .prizmkit/plans/refactor-list.json
246
255
  ```
247
256
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prizmkit",
3
- "version": "1.1.76",
3
+ "version": "1.1.78",
4
4
  "description": "Create a new PrizmKit-powered project with clean initialization — no framework dev files, just what you need.",
5
5
  "type": "module",
6
6
  "bin": {