prizmkit 1.0.101 → 1.0.103

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.0.101",
3
- "bundledAt": "2026-03-23T16:44:31.127Z",
4
- "bundledFrom": "7da7d80"
2
+ "frameworkVersion": "1.0.103",
3
+ "bundledAt": "2026-03-24T17:11:59.061Z",
4
+ "bundledFrom": "5e837b4"
5
5
  }
@@ -1125,8 +1125,8 @@ case "${1:-run}" in
1125
1125
  run_one "$@"
1126
1126
  else
1127
1127
  # Parse positional and --features flag
1128
- local _run_feature_list="feature-list.json"
1129
- local _run_features_filter=""
1128
+ _run_feature_list="feature-list.json"
1129
+ _run_features_filter=""
1130
1130
  while [[ $# -gt 0 ]]; do
1131
1131
  case "$1" in
1132
1132
  --features)
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.101",
2
+ "version": "1.0.103",
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.",
@@ -75,12 +75,31 @@ Actions:
75
75
  3. Append features with next sequential `F-NNN` IDs
76
76
  4. Preserve style/language/detail consistency with existing plan
77
77
 
78
+ ## Intent Confirmation (Mandatory First Step)
79
+
80
+ After scenario routing, immediately confirm the user's deliverable intent:
81
+
82
+ 1. **Ask explicitly**:
83
+ - "本次规划的目标是生成可执行的 `feature-list.json` 吗?还是只想先讨论想法?"
84
+ - (English: "Is the goal to produce a `feature-list.json` for pipeline execution, or just explore ideas?")
85
+
86
+ 2. **Route by answer**:
87
+ - **"Produce feature-list.json"** → Continue to Core Workflow. Set session goal = `produce`.
88
+ - **"Just explore ideas"** → Enter **Exploration Mode**:
89
+ - Run Phases 1-5 normally (vision, constraints, feature proposals, refinement, DAG)
90
+ - At Phase 5 completion, re-ask: "Ideas are taking shape. Ready to generate `feature-list.json` now?"
91
+ - If yes → continue to Phase 6
92
+ - If no → summarize discussion, suggest saving notes, end session
93
+
94
+ 3. **Session goal tracking**: Track the intent (`produce` or `explore`) throughout the session. If `explore`, always re-prompt before ending.
95
+
78
96
  ## Core Workflow
79
97
 
80
98
  Execute the selected scenario workflow in conversation mode with mandatory checkpoints:
81
99
 
82
100
  ### Interactive Phases
83
101
  1. clarify business goal and scope
102
+ 1.1 confirm deliverable intent (→ Intent Confirmation)
84
103
  2. confirm constraints and tech assumptions
85
104
  3. propose feature set with dependencies
86
105
  4. refine descriptions and acceptance criteria
@@ -95,6 +114,7 @@ Checkpoints catch cascading errors early — skipping one means the next phase b
95
114
 
96
115
  | Checkpoint | Artifact/State | Criteria | Phase |
97
116
  |-----------|----------------|----------|-------|
117
+ | **CP-AP-0** | Intent Confirmed | User confirmed session goal (produce / explore) | 1 |
98
118
  | **CP-AP-1** | Vision Summary | Goal/users/differentiators confirmed by user | 1-2 |
99
119
  | **CP-AP-2** | Feature Proposals | Feature set with titles+deps identified (pre-validation) | 3-5 |
100
120
  | **CP-AP-3** | DAG Validity | No cycles, dependencies resolved (validation dry-run) | 6 |
@@ -331,6 +351,29 @@ The pipeline reads `feature-list.json` from the project root by default. If the
331
351
 
332
352
  Maintainer note: evaluation workflow moved to `assets/evaluation-guide.md`.
333
353
 
354
+ ## Session Exit Gate
355
+
356
+ Prevent accidental session exit without deliverable completion.
357
+
358
+ ### Trigger Conditions
359
+
360
+ Activate exit gate when ALL of these are true:
361
+ - Session goal = `produce` (user confirmed they want feature-list.json via CP-AP-0)
362
+ - Current phase < Phase 7 (final validation not yet passed)
363
+ - No valid `feature-list.json` has been written in this session
364
+
365
+ ### Gate Behavior
366
+
367
+ When the session appears to be ending (user says "thanks", "that's all", "bye", or conversation goes idle after Phase 3+):
368
+
369
+ 1. **Remind**: "You set out to produce `feature-list.json` but we haven't completed it yet."
370
+ 2. **Offer 3 options**:
371
+ - **(a) Continue to completion** — resume from current phase
372
+ - **(b) Abandon** — confirm user explicitly wants to exit without output
373
+ 3. **If (b) Save draft**: Write the draft file and remind user: "This is a draft, not validated. Run `/app-planner` again to resume and finalize."
374
+ 4. **If (c) Abandon**: Accept without further prompting.
375
+
376
+
334
377
  ## Handoff Message Template
335
378
 
336
379
  After successful validation, report:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prizmkit",
3
- "version": "1.0.101",
3
+ "version": "1.0.103",
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": {
@@ -17,9 +17,6 @@ export function generateGitignore(options = {}) {
17
17
  '# Prizm 文档(按需决定是否提交)',
18
18
  '# .prizm-docs/',
19
19
  '',
20
- '# PrizmKit 工作流制品',
21
- '.prizmkit/',
22
- '',
23
20
  ];
24
21
 
25
22
  if (options.pipeline) {
package/src/scaffold.js CHANGED
@@ -655,18 +655,8 @@ export async function installGitignore(projectRoot, options, dryRun) {
655
655
  }
656
656
 
657
657
  if (await fs.pathExists(targetPath)) {
658
- const existing = await fs.readFile(targetPath, 'utf8');
659
-
660
- // If .prizmkit/ is already ignored, nothing to do
661
- if (existing.includes('.prizmkit/')) {
662
- console.log(chalk.yellow(` ⚠ .gitignore 已包含 .prizmkit/ 条目,跳过`));
663
- return;
664
- }
665
-
666
- // No PrizmKit entries at all — append full .prizmkit/ block
667
- const prizmkitSection = '\n\n# PrizmKit\n.prizmkit/\n';
668
- await fs.appendFile(targetPath, prizmkitSection);
669
- console.log(chalk.green(` ✓ .gitignore (追加 PrizmKit 条目)`));
658
+ console.log(chalk.yellow(` ⚠ .gitignore 已存在,跳过`));
659
+ return;
670
660
  } else {
671
661
  const content = generateGitignore({ pipeline: options.pipeline });
672
662
  await fs.writeFile(targetPath, content);