prizmkit 1.1.41 → 1.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/bundled/VERSION.json +3 -3
  2. package/bundled/adapters/claude/settings-adapter.js +4 -4
  3. package/bundled/adapters/codebuddy/settings-adapter.js +1 -1
  4. package/bundled/agents/prizm-dev-team-critic.md +9 -9
  5. package/bundled/agents/prizm-dev-team-dev.md +13 -13
  6. package/bundled/agents/prizm-dev-team-reviewer.md +2 -2
  7. package/bundled/dev-pipeline/.env.example +6 -6
  8. package/bundled/dev-pipeline/README.md +32 -32
  9. package/bundled/dev-pipeline/assets/prizm-dev-team-integration.md +1 -1
  10. package/bundled/dev-pipeline/launch-bugfix-daemon.sh +5 -2
  11. package/bundled/dev-pipeline/launch-feature-daemon.sh +5 -2
  12. package/bundled/dev-pipeline/launch-refactor-daemon.sh +5 -2
  13. package/bundled/dev-pipeline/lib/common.sh +34 -5
  14. package/bundled/dev-pipeline/reset-bug.sh +7 -5
  15. package/bundled/dev-pipeline/reset-feature.sh +7 -5
  16. package/bundled/dev-pipeline/reset-refactor.sh +7 -5
  17. package/bundled/dev-pipeline/run-bugfix.sh +14 -11
  18. package/bundled/dev-pipeline/run-feature.sh +15 -12
  19. package/bundled/dev-pipeline/run-recovery.sh +6 -3
  20. package/bundled/dev-pipeline/run-refactor.sh +15 -12
  21. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +15 -15
  22. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +10 -5
  23. package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +19 -13
  24. package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +10 -5
  25. package/bundled/dev-pipeline/scripts/parse-stream-progress.py +1 -1
  26. package/bundled/dev-pipeline/scripts/update-bug-status.py +9 -1
  27. package/bundled/dev-pipeline/scripts/update-feature-status.py +13 -1
  28. package/bundled/dev-pipeline/scripts/update-refactor-status.py +9 -1
  29. package/bundled/dev-pipeline/templates/agent-prompts/critic-plan-challenge.md +1 -1
  30. package/bundled/dev-pipeline/templates/bootstrap-prompt.md +3 -3
  31. package/bundled/dev-pipeline/templates/bootstrap-tier1.md +8 -8
  32. package/bundled/dev-pipeline/templates/bootstrap-tier2.md +11 -11
  33. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +9 -9
  34. package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +7 -7
  35. package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +4 -4
  36. package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +5 -5
  37. package/bundled/dev-pipeline/templates/sections/phase-commit.md +6 -6
  38. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +1 -1
  39. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-base.md +1 -1
  40. package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +2 -2
  41. package/bundled/dev-pipeline/templates/sections/phase0-init.md +1 -1
  42. package/bundled/dev-pipeline/tests/test-path-resolution.sh +100 -0
  43. package/bundled/rules/USAGE.md +2 -2
  44. package/bundled/rules/_rules-metadata.json +1 -1
  45. package/bundled/rules/prizm/prizm-commit-workflow.md +1 -1
  46. package/bundled/rules/prizm/prizm-documentation.md +4 -4
  47. package/bundled/rules/prizm/prizm-progressive-loading.md +3 -3
  48. package/bundled/skills/_metadata.json +4 -4
  49. package/bundled/skills/app-planner/SKILL.md +35 -7
  50. package/bundled/skills/bug-fix-workflow/SKILL.md +6 -6
  51. package/bundled/skills/bug-planner/SKILL.md +5 -5
  52. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +28 -21
  53. package/bundled/skills/feature-pipeline-launcher/SKILL.md +28 -21
  54. package/bundled/skills/feature-planner/SKILL.md +5 -5
  55. package/bundled/skills/feature-workflow/SKILL.md +8 -8
  56. package/bundled/skills/prizm-kit/SKILL.md +10 -10
  57. package/bundled/skills/prizmkit-committer/SKILL.md +4 -2
  58. package/bundled/skills/prizmkit-implement/SKILL.md +2 -2
  59. package/bundled/skills/prizmkit-init/SKILL.md +17 -17
  60. package/bundled/skills/prizmkit-plan/SKILL.md +3 -3
  61. package/bundled/skills/prizmkit-plan/references/verification-checklist.md +2 -2
  62. package/bundled/skills/prizmkit-prizm-docs/SKILL.md +17 -17
  63. package/bundled/skills/prizmkit-prizm-docs/assets/prizm-docs-format.md +45 -45
  64. package/bundled/skills/prizmkit-prizm-docs/references/op-init.md +9 -9
  65. package/bundled/skills/prizmkit-prizm-docs/references/op-rebuild.md +1 -1
  66. package/bundled/skills/prizmkit-prizm-docs/references/op-status.md +2 -2
  67. package/bundled/skills/prizmkit-prizm-docs/references/op-update.md +3 -3
  68. package/bundled/skills/prizmkit-prizm-docs/references/op-validate.md +1 -1
  69. package/bundled/skills/prizmkit-retrospective/SKILL.md +10 -10
  70. package/bundled/skills/prizmkit-retrospective/references/knowledge-injection-steps.md +3 -3
  71. package/bundled/skills/prizmkit-retrospective/references/structural-sync-steps.md +1 -1
  72. package/bundled/skills/recovery-workflow/SKILL.md +15 -15
  73. package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +0 -1
  74. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +28 -21
  75. package/bundled/skills/refactor-planner/SKILL.md +6 -6
  76. package/bundled/skills/refactor-workflow/SKILL.md +9 -9
  77. package/bundled/team/prizm-dev-team.json +1 -1
  78. package/bundled/templates/hooks/commit-intent.json +2 -2
  79. package/bundled/templates/hooks/diff-prizm-docs.sh +8 -8
  80. package/bundled/templates/hooks/prizm-pre-commit.sh +4 -4
  81. package/bundled/templates/hooks/validate-prizm-docs.sh +4 -4
  82. package/bundled/templates/project-memory-template.md +4 -4
  83. package/package.json +1 -1
  84. package/src/clean.js +1 -3
  85. package/src/config.js +1 -1
  86. package/src/gitignore-template.js +4 -24
  87. package/src/scaffold.js +12 -11
  88. package/src/upgrade.js +3 -3
@@ -1,5 +1,5 @@
1
1
  {
2
- "frameworkVersion": "1.1.41",
3
- "bundledAt": "2026-04-30T09:49:08.976Z",
4
- "bundledFrom": "13a2ce9"
2
+ "frameworkVersion": "1.1.46",
3
+ "bundledAt": "2026-05-20T14:21:52.729Z",
4
+ "bundledFrom": "f552940"
5
5
  }
@@ -66,8 +66,8 @@ export async function generateSettings(targetRoot, options = {}) {
66
66
 
67
67
  if (options.pipeline) {
68
68
  prizmkitPermissions.push(
69
- 'Bash(./dev-pipeline/*)',
70
- 'Bash(python3 dev-pipeline/*)',
69
+ 'Bash(./.prizmkit/dev-pipeline/*)',
70
+ 'Bash(python3 .prizmkit/dev-pipeline/*)',
71
71
  );
72
72
  }
73
73
 
@@ -82,7 +82,7 @@ export async function generateSettings(targetRoot, options = {}) {
82
82
  if (options.hooks !== false) {
83
83
  if (!existing.hooks) existing.hooks = {};
84
84
 
85
- // SessionStart hook: remind about .prizm-docs
85
+ // SessionStart hook: remind about .prizmkit/prizm-docs
86
86
  if (!existing.hooks.SessionStart) {
87
87
  existing.hooks.SessionStart = [
88
88
  {
@@ -90,7 +90,7 @@ export async function generateSettings(targetRoot, options = {}) {
90
90
  hooks: [
91
91
  {
92
92
  type: 'command',
93
- command: 'test -f .prizm-docs/root.prizm && echo "PrizmKit: .prizm-docs found. Read root.prizm for project context." || echo "PrizmKit: No .prizm-docs found. Run /prizmkit-init to bootstrap."',
93
+ command: 'test -f .prizmkit/prizm-docs/root.prizm && echo "PrizmKit: .prizmkit/prizm-docs found. Read root.prizm for project context." || echo "PrizmKit: No .prizmkit/prizm-docs found. Run /prizmkit-init to bootstrap."',
94
94
  },
95
95
  ],
96
96
  },
@@ -35,7 +35,7 @@ export async function generateSettings(targetRoot, options = {}) {
35
35
  hooks: [
36
36
  {
37
37
  type: 'prompt',
38
- prompt: 'You are a commit-intent detector for PrizmKit. Analyze the user prompt and determine if the user intends to COMMIT, PUSH, FINISH, SHIP, MERGE, or create a PULL REQUEST.\n\nUser prompt: $ARGUMENTS\n\nIF commit intent detected, respond with:\n{"ok": true, "reason": "PRIZMKIT_DOC_UPDATE_REQUIRED: Before committing, you MUST update .prizm-docs/ per Prizm auto-update protocol. Steps: 1) Run git diff --cached --name-status. 2) Map changed files to modules via root.prizm MODULE_INDEX. 3) Read and update affected .prizm files (only changed sections). 4) Append to changelog.prizm. 5) Stage .prizm files with git add .prizm-docs/. 6) Then proceed with commit using prizmkit-committer workflow. RULES: Never rewrite entire .prizm files. Never add prose. Only update affected sections."}\n\nIF no commit intent, respond with:\n{"ok": true}\n\nRespond with JSON only. No explanation.',
38
+ prompt: 'You are a commit-intent detector for PrizmKit. Analyze the user prompt and determine if the user intends to COMMIT, PUSH, FINISH, SHIP, MERGE, or create a PULL REQUEST.\n\nUser prompt: $ARGUMENTS\n\nIF commit intent detected, respond with:\n{"ok": true, "reason": "PRIZMKIT_DOC_UPDATE_REQUIRED: Before committing, you MUST update .prizmkit/prizm-docs/ per Prizm auto-update protocol. Steps: 1) Run git diff --cached --name-status. 2) Map changed files to modules via root.prizm MODULE_INDEX. 3) Read and update affected .prizm files (only changed sections). 4) Append to changelog.prizm. 5) Stage .prizm files with git add .prizmkit/prizm-docs/. 6) Then proceed with commit using prizmkit-committer workflow. RULES: Never rewrite entire .prizm files. Never add prose. Only update affected sections."}\n\nIF no commit intent, respond with:\n{"ok": true}\n\nRespond with JSON only. No explanation.',
39
39
  },
40
40
  ],
41
41
  },
@@ -18,15 +18,15 @@ You operate in **Plan Challenge** mode: before implementation, you challenge the
18
18
  ### Project Context
19
19
 
20
20
  Before any challenge, you MUST understand the project:
21
- 1. Read `.prizm-docs/root.prizm` — understand architecture, patterns, conventions
22
- 2. Read relevant L1/L2 `.prizm-docs/` files for affected modules — understand RULES, PATTERNS, TRAPS, DECISIONS
21
+ 1. Read `.prizmkit/prizm-docs/root.prizm` — understand architecture, patterns, conventions
22
+ 2. Read relevant L1/L2 `.prizmkit/prizm-docs/` files for affected modules — understand RULES, PATTERNS, TRAPS, DECISIONS
23
23
  3. Read `context-snapshot.md` if it exists — Section 3 has Prizm Context, Section 4 has File Manifest
24
24
 
25
25
  **File Reading Rule**: Read actual project source files to compare against. Your challenges must be grounded in evidence from existing code, not theoretical concerns. If you cannot find evidence in the codebase, downgrade the severity.
26
26
 
27
27
  ### Must Do (MUST)
28
28
 
29
- 1. Read `.prizm-docs/root.prizm` and relevant module docs BEFORE writing any challenge
29
+ 1. Read `.prizmkit/prizm-docs/root.prizm` and relevant module docs BEFORE writing any challenge
30
30
  2. Read existing source files in affected modules for comparison
31
31
  3. Ground every challenge in specific evidence (file paths, code patterns, existing conventions)
32
32
  4. Write `challenge-report.md` with structured findings
@@ -46,7 +46,7 @@ Before any challenge, you MUST understand the project:
46
46
  ### Behavioral Rules
47
47
 
48
48
  ```
49
- CRIT-01: Always read .prizm-docs/ and existing source before challenging
49
+ CRIT-01: Always read .prizmkit/prizm-docs/ and existing source before challenging
50
50
  CRIT-02: Every challenge must reference a specific file path or code pattern as evidence
51
51
  CRIT-03: Maximum 10 challenges per report (focus on highest impact)
52
52
  CRIT-04: Severity levels: CRITICAL (architecture mismatch), HIGH (style/robustness gap), MEDIUM (minor inconsistency)
@@ -70,15 +70,15 @@ CRIT-10: In voting mode, write to your assigned report file (challenge-report-{A
70
70
 
71
71
  | Dimension | What to Challenge | Evidence Source |
72
72
  |-----------|------------------|----------------|
73
- | **Architecture Fit** | Does the plan's approach match the project's existing architectural patterns? Would it feel foreign to someone familiar with the codebase? | `.prizm-docs/` PATTERNS, existing module structure |
73
+ | **Architecture Fit** | Does the plan's approach match the project's existing architectural patterns? Would it feel foreign to someone familiar with the codebase? | `.prizmkit/prizm-docs/` PATTERNS, existing module structure |
74
74
  | **Integration Planning** | Do proposed interfaces match existing conventions? Are naming patterns consistent with existing code? | Existing source files in the same module/layer |
75
- | **Alternative Approaches** | Given the project's tech stack and existing patterns, is there a more natural approach that leverages what's already built? | `.prizm-docs/` KEY_FILES, existing utilities/helpers |
76
- | **Coupling Risk** | Does the task breakdown hide cross-module dependencies? Will changes bleed into areas the plan doesn't mention? | `.prizm-docs/` DEPENDENCIES, import graphs |
75
+ | **Alternative Approaches** | Given the project's tech stack and existing patterns, is there a more natural approach that leverages what's already built? | `.prizmkit/prizm-docs/` KEY_FILES, existing utilities/helpers |
76
+ | **Coupling Risk** | Does the task breakdown hide cross-module dependencies? Will changes bleed into areas the plan doesn't mention? | `.prizmkit/prizm-docs/` DEPENDENCIES, import graphs |
77
77
 
78
78
  ### Workflow
79
79
 
80
80
  1. Read `context-snapshot.md` — understand the feature and file manifest
81
- 2. Read `.prizm-docs/root.prizm` and affected L1/L2 docs
81
+ 2. Read `.prizmkit/prizm-docs/root.prizm` and affected L1/L2 docs
82
82
  3. Read existing source files in modules the plan touches
83
83
  4. For each dimension, compare plan decisions against evidence from existing code
84
84
  5. Write `challenge-report.md` to `.prizmkit/specs/<feature-slug>/`
@@ -139,7 +139,7 @@ When spawned as one of 3 parallel critics (Critic-A, Critic-B, Critic-C):
139
139
 
140
140
  | Scenario | Strategy |
141
141
  |----------|----------|
142
- | No `.prizm-docs/` exists (new project) | Skip architecture comparison, focus on internal consistency and robustness only |
142
+ | No `.prizmkit/prizm-docs/` exists (new project) | Skip architecture comparison, focus on internal consistency and robustness only |
143
143
  | Module has no existing code to compare | Note in report: "No baseline for style comparison — challenges are based on general best practices" |
144
144
  | All challenges are MEDIUM or lower | Write report with "No significant challenges" summary. Do NOT inflate severity |
145
145
  | Cannot determine project conventions | Downgrade all style challenges to MEDIUM. Note the limitation in the report |
@@ -20,12 +20,12 @@ You are the team's "construction worker" — you build strictly according to blu
20
20
 
21
21
  ### Project Context
22
22
 
23
- Project documentation is in `.prizm-docs/`. Before implementation, read `context-snapshot.md` (if it exists in `.prizmkit/specs/###-feature-name/`); its Section 3 contains Prizm Context and Section 4 contains a File Manifest with paths and key interfaces.
23
+ Project documentation is in `.prizmkit/prizm-docs/`. Before implementation, read `context-snapshot.md` (if it exists in `.prizmkit/specs/###-feature-name/`); its Section 3 contains Prizm Context and Section 4 contains a File Manifest with paths and key interfaces.
24
24
 
25
25
  **⚠️ File Reading Rule**: Do NOT re-read source files already listed in Section 4 File Manifest — the manifest already contains their key interfaces. Only read a source file directly if: (a) it is NOT in the manifest, or (b) you need a specific implementation detail not captured in the manifest's interface column. Unnecessary re-reads waste significant context budget.
26
26
 
27
27
  If the snapshot does not exist:
28
- 1. Read `.prizm-docs/root.prizm` to understand rules and known traps (TRAPS)
28
+ 1. Read `.prizmkit/prizm-docs/root.prizm` to understand rules and known traps (TRAPS)
29
29
  2. Read relevant L1/L2 docs for affected modules
30
30
  3. Read required source files directly
31
31
 
@@ -33,7 +33,7 @@ If the snapshot does not exist:
33
33
 
34
34
  | Path | Purpose |
35
35
  |------|---------|
36
- | `.prizm-docs/` | Architecture index — module structure, interfaces, dependencies, known traps (TRAPS), design decisions (DECISIONS) |
36
+ | `.prizmkit/prizm-docs/` | Architecture index — module structure, interfaces, dependencies, known traps (TRAPS), design decisions (DECISIONS) |
37
37
  | `.prizmkit/specs/###-feature-name/` | Feature artifacts — spec.md / plan.md (with Tasks section) |
38
38
 
39
39
  ### Must Do (MUST)
@@ -44,11 +44,11 @@ If the snapshot does not exist:
44
44
  4. Report interface design ambiguities to the Orchestrator immediately (do not assume)
45
45
  5. Follow the `/prizmkit-implement` workflow: read plan.md (with Tasks section) + spec.md, implement task by task
46
46
  6. Mark `[x]` in the plan.md Tasks section **immediately** after each task is completed (do not batch-mark)
47
- 7. Read the TRAPS section before implementation to avoid known pitfalls: prefer `context-snapshot.md` Section 3; if no snapshot exists, read `.prizm-docs/`
47
+ 7. Read the TRAPS section before implementation to avoid known pitfalls: prefer `context-snapshot.md` Section 3; if no snapshot exists, read `.prizmkit/prizm-docs/`
48
48
  8. Checkpoint tasks must verify that build and tests pass before proceeding to the next phase
49
49
  9. Execute sequential tasks in order; stop on failure. Parallel `[P]` tasks may continue
50
- 10. When creating a new sub-module, generate the corresponding `.prizm-docs/` L2 document. **Batch independent operations**: combine multiple `mkdir -p` into one command; issue multiple independent `Write` calls for different `.prizm-docs/` files in a single message turn (they have no dependencies between them).
51
- 11. **`.prizm-docs/` write safety**: Before writing ANY `.prizm-docs/` file, check if it already exists (`ls <path>`). If it **exists**: only append or update structural fields (KEY_FILES, INTERFACES, DEPENDENCIES, file counts, UPDATED date) — **never overwrite the full file**. DECISIONS and CHANGELOG sections are **append-only** — never delete or replace existing entries. If it does **not** exist: create it only for sub-modules you are actively creating in this session. Do NOT write `.prizm-docs/` files for modules you are not directly creating.
50
+ 10. When creating a new sub-module, generate the corresponding `.prizmkit/prizm-docs/` L2 document. **Batch independent operations**: combine multiple `mkdir -p` into one command; issue multiple independent `Write` calls for different `.prizmkit/prizm-docs/` files in a single message turn (they have no dependencies between them).
51
+ 11. **`.prizmkit/prizm-docs/` write safety**: Before writing ANY `.prizmkit/prizm-docs/` file, check if it already exists (`ls <path>`). If it **exists**: only append or update structural fields (KEY_FILES, INTERFACES, DEPENDENCIES, file counts, UPDATED date) — **never overwrite the full file**. DECISIONS and CHANGELOG sections are **append-only** — never delete or replace existing entries. If it does **not** exist: create it only for sub-modules you are actively creating in this session. Do NOT write `.prizmkit/prizm-docs/` files for modules you are not directly creating.
52
52
  11. After completing ALL tasks, append '## Implementation Log' to context-snapshot.md: files changed/created, key decisions, notable discoveries
53
53
 
54
54
  ### Never Do (NEVER)
@@ -59,7 +59,7 @@ If the snapshot does not exist:
59
59
  - **Do not execute any git operations** (git commit / git add / git reset / git push are all prohibited — the Orchestrator handles commits via /prizmkit-committer)
60
60
  - Do not modify any files in `.prizmkit/specs/` except `plan.md` (marking Tasks [x]) and `context-snapshot.md` (appending Implementation Log)
61
61
  - Do not use TaskCreate/TaskUpdate to create or modify Orchestrator-level tasks (Task tools are for internal progress tracking only, and task IDs are not shared across agent sub-sessions)
62
- - **Do not overwrite existing `.prizm-docs/` files in full** — if a doc already exists, only update structural fields; never replace the entire file. Do NOT write `.prizm-docs/` entries for modules you are not actively creating in this session.
62
+ - **Do not overwrite existing `.prizmkit/prizm-docs/` files in full** — if a doc already exists, only update structural fields; never replace the entire file. Do NOT write `.prizmkit/prizm-docs/` entries for modules you are not actively creating in this session.
63
63
 
64
64
  ### Behavioral Rules
65
65
 
@@ -73,17 +73,17 @@ DEV-06: Do not introduce external dependencies not declared in the task descript
73
73
  DEV-07: Follow the /prizmkit-implement workflow
74
74
  DEV-08: Mark plan.md Tasks section [x] immediately after each task is completed
75
75
  DEV-09: TDD: write tests → implement → verify
76
- DEV-10: Read the TRAPS section before implementing each module: prefer context-snapshot.md Section 3; if no snapshot, read .prizm-docs/
76
+ DEV-10: Read the TRAPS section before implementing each module: prefer context-snapshot.md Section 3; if no snapshot, read .prizmkit/prizm-docs/
77
77
  DEV-11: Checkpoint tasks must verify that build and tests pass
78
- DEV-12: Generate L2 .prizm-docs/ documentation when creating new sub-modules
78
+ DEV-12: Generate L2 .prizmkit/prizm-docs/ documentation when creating new sub-modules
79
79
  DEV-13: Executing any git command is prohibited (git add/commit/reset/push are all forbidden)
80
80
  DEV-14: If `npm test` has pre-existing failures, do not ignore them — list them explicitly in COMPLETION_SIGNAL for Orchestrator decision
81
81
  DEV-18: When tests fail, run `$TEST_CMD 2>&1 | tee /tmp/test-out.txt` ONCE, then grep `/tmp/test-out.txt` for failure details. Never re-run the full test suite just to apply a different grep filter to its output.
82
82
  DEV-15: After ALL tasks, append '## Implementation Log' to context-snapshot.md (files changed, key decisions, discoveries)
83
- DEV-16: Without context-snapshot: read .prizm-docs/ → read source files directly
83
+ DEV-16: Without context-snapshot: read .prizmkit/prizm-docs/ → read source files directly
84
84
  DEV-17: DO NOT re-read source files already listed in context-snapshot.md Section 4 File Manifest — the manifest already has their key interfaces. Only read a file directly if: (a) NOT in the manifest, (b) needing an implementation detail beyond the interface summary, or (c) needing a constant/enum/field-name value not representable as a function signature. Unnecessary re-reads waste significant context budget.
85
85
  DEV-18: When tests fail, run `$TEST_CMD 2>&1 | tee /tmp/test-out.txt` ONCE, then grep `/tmp/test-out.txt` for failure details. Never re-run the full test suite just to apply a different grep filter to its output.
86
- DEV-19: Before writing any `.prizm-docs/` file, check if it exists. If it exists: only update structural fields (KEY_FILES, INTERFACES, DEPENDENCIES, file counts, UPDATED) — never overwrite the full file. DECISIONS/CHANGELOG are append-only. Only create new L2 docs for sub-modules you are actively creating in this session.
86
+ DEV-19: Before writing any `.prizmkit/prizm-docs/` file, check if it exists. If it exists: only update structural fields (KEY_FILES, INTERFACES, DEPENDENCIES, file counts, UPDATED) — never overwrite the full file. DECISIONS/CHANGELOG are append-only. Only create new L2 docs for sub-modules you are actively creating in this session.
87
87
  ```
88
88
 
89
89
  ### Workflow
@@ -91,7 +91,7 @@ DEV-19: Before writing any `.prizm-docs/` file, check if it exists. If it exists
91
91
  1. Receive task assignment
92
92
  2. Read `.prizmkit/specs/###-feature-name/context-snapshot.md` (if it exists) — Section 3 contains Prizm Context, Section 4 contains a File Manifest.
93
93
  **DO NOT re-read source files listed in Section 4** — the manifest already has their interfaces. Only read a source file if it is NOT in the manifest, or you need a specific detail beyond what the interface column provides. If the snapshot does not exist:
94
- a. Read `.prizm-docs/root.prizm` and relevant module documentation
94
+ a. Read `.prizmkit/prizm-docs/root.prizm` and relevant module documentation
95
95
  b. Read required source files directly
96
96
  3. Read `plan.md` (with Tasks section) and `spec.md` in `.prizmkit/specs/###-feature-name/`
97
97
  4. For each assigned task, execute in plan.md Tasks order:
@@ -102,7 +102,7 @@ DEV-19: Before writing any `.prizm-docs/` file, check if it exists. If it exists
102
102
  e. Send STATUS_UPDATE to the Orchestrator
103
103
  5. For checkpoint tasks, verify that build and tests pass before continuing
104
104
  6. On interface design ambiguity, send ESCALATION (do not assume)
105
- 7. If a new sub-module was created, generate the corresponding `.prizm-docs/` L2 document
105
+ 7. If a new sub-module was created, generate the corresponding `.prizmkit/prizm-docs/` L2 document
106
106
  8. Send COMPLETION_SIGNAL
107
107
 
108
108
  ### Exception Handling
@@ -20,7 +20,7 @@ You are the team's "senior engineer doing code review" — you diagnose problems
20
20
  - Section 3: Prizm Context (RULES, PATTERNS, TRAPS to check against)
21
21
  - Section 4: File Manifest (original file structure — avoid re-reading files already listed here)
22
22
  - `## Implementation Log`: what Dev changed, key decisions, discoveries
23
- 2. If no `context-snapshot.md`: read `spec.md`, `plan.md` from the artifact directory, then `.prizm-docs/root.prizm` and relevant L1/L2 docs
23
+ 2. If no `context-snapshot.md`: read `spec.md`, `plan.md` from the artifact directory, then `.prizmkit/prizm-docs/root.prizm` and relevant L1/L2 docs
24
24
  3. Identify changed files from `## Implementation Log` or completed tasks in plan.md
25
25
 
26
26
  **File Reading Rule**: Read ONLY files listed in the Implementation Log for diagnosis — do not explore unrelated files. Exception: during Fix Strategy Formulation, you MAY read additional files to trace impact (callers, dependents, shared patterns).
@@ -66,7 +66,7 @@ When Dev has applied fixes and returns for re-review:
66
66
  1. Run `/prizmkit-code-review` for diagnosis and fix strategy
67
67
  2. Write and execute integration tests covering all goals from spec.md
68
68
  3. Verify implementation conforms to interface designs in plan.md
69
- 4. Check code conforms to `.prizm-docs/` RULES and PATTERNS
69
+ 4. Check code conforms to `.prizmkit/prizm-docs/` RULES and PATTERNS
70
70
  5. Every finding must include: Root Cause, Impact, Fix Strategy, Code Guidance, Verification Criteria
71
71
  6. Group related findings and order Fix Instructions by dependency
72
72
  7. On re-review (iteration > 1): check only Verification Criteria + scan for regressions
@@ -1,15 +1,15 @@
1
1
  # PrizmKit Dev-Pipeline Environment Configuration
2
2
  # ================================================
3
- # Copy this file to .env and uncomment the variables you want to set.
3
+ # Copy this file to .prizmkit/.env and uncomment the variables you want to set.
4
4
  # All pipeline scripts (run-feature.sh, run-bugfix.sh, etc.) automatically
5
- # load .env from the project root.
5
+ # load .prizmkit/.env via lib/common.sh.
6
6
  #
7
7
  # Priority: Environment variables set before script execution ALWAYS take
8
- # precedence over values in .env. This means you can still do:
9
- # MODEL=claude-opus-4 ./dev-pipeline/run-feature.sh run
10
- # and it will override the .env value.
8
+ # precedence over values in .prizmkit/.env. This means you can still do:
9
+ # MODEL=claude-opus-4 ./.prizmkit/dev-pipeline/run-feature.sh run
10
+ # and it will override the .prizmkit/.env value.
11
11
  #
12
- # If .env does not exist, all defaults apply — no error is raised.
12
+ # If .prizmkit/.env does not exist, all defaults apply — no error is raised.
13
13
 
14
14
  # ─── Runtime Environment ──────────────────────────────────────────────
15
15
  # PRIZMKIT_ENV=test # "test" = output bootstrap prompts to console for debugging
@@ -17,18 +17,18 @@ Autonomous development pipeline that drives the `prizm-dev-team` multi-agent tea
17
17
  # Output: .prizmkit/plans/feature-list.json in project root
18
18
 
19
19
  # 2. Initialize pipeline state
20
- python3 dev-pipeline/scripts/init-pipeline.py \
20
+ python3 .prizmkit/dev-pipeline/scripts/init-pipeline.py \
21
21
  --feature-list .prizmkit/plans/feature-list.json \
22
22
  --state-dir .prizmkit/state/features
23
23
 
24
24
  # 3. Run the pipeline (foreground, Ctrl+C to pause, re-run to resume)
25
- ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
25
+ ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
26
26
 
27
27
  # 4. Check progress at any time (from another terminal)
28
- ./dev-pipeline/run-feature.sh status .prizmkit/plans/feature-list.json
28
+ ./.prizmkit/dev-pipeline/run-feature.sh status .prizmkit/plans/feature-list.json
29
29
 
30
30
  # 5. Or run as a background daemon
31
- ./dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json
31
+ ./.prizmkit/dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json
32
32
  ```
33
33
 
34
34
  ---
@@ -61,19 +61,19 @@ Main entry point. Drives the full feature development pipeline.
61
61
 
62
62
  ```bash
63
63
  # Run all features
64
- ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
64
+ ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
65
65
 
66
66
  # Run a single feature
67
- ./dev-pipeline/run-feature.sh run F-007
67
+ ./.prizmkit/dev-pipeline/run-feature.sh run F-007
68
68
 
69
69
  # Dry run — inspect the generated prompt without spawning a session
70
- ./dev-pipeline/run-feature.sh run F-007 --dry-run
70
+ ./.prizmkit/dev-pipeline/run-feature.sh run F-007 --dry-run
71
71
 
72
72
  # Resume from Phase 6 (implementation)
73
- ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json --resume-phase 6
73
+ ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json --resume-phase 6
74
74
 
75
75
  # With timeout per session
76
- SESSION_TIMEOUT=7200 ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
76
+ SESSION_TIMEOUT=7200 ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
77
77
  ```
78
78
 
79
79
  If `.prizmkit/plans/feature-list.json` path is omitted, defaults to `.prizmkit/plans/feature-list.json` in the project root.
@@ -104,10 +104,10 @@ Resets a feature's state so it can be re-executed from scratch.
104
104
  **Examples:**
105
105
 
106
106
  ```bash
107
- ./dev-pipeline/reset-feature.sh F-007 # Reset status only
108
- ./dev-pipeline/reset-feature.sh F-007 --clean # Reset + delete artifacts
109
- ./dev-pipeline/reset-feature.sh F-007 --clean --run # Reset + clean + retry
110
- ./dev-pipeline/reset-feature.sh F-007 --clean my-features.json
107
+ ./.prizmkit/dev-pipeline/reset-feature.sh F-007 # Reset status only
108
+ ./.prizmkit/dev-pipeline/reset-feature.sh F-007 --clean # Reset + delete artifacts
109
+ ./.prizmkit/dev-pipeline/reset-feature.sh F-007 --clean --run # Reset + clean + retry
110
+ ./.prizmkit/dev-pipeline/reset-feature.sh F-007 --clean my-features.json
111
111
  ```
112
112
 
113
113
  ---
@@ -138,7 +138,7 @@ Manages `run-feature.sh` as a background daemon process with PID tracking and lo
138
138
  **`--env` format:** Pass environment variables as a quoted string:
139
139
 
140
140
  ```bash
141
- ./dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json \
141
+ ./.prizmkit/dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json \
142
142
  --mode standard \
143
143
  --env "MAX_RETRIES=5 SESSION_TIMEOUT=3600 MODEL=claude-sonnet-4.6"
144
144
  ```
@@ -564,10 +564,10 @@ Also exports: `log_info`, `log_warn`, `log_error`, `log_success` (with timestamp
564
564
  ```bash
565
565
  # All env vars in one invocation
566
566
  MAX_RETRIES=5 SESSION_TIMEOUT=7200 MODEL=claude-sonnet-4.6 VERBOSE=1 \
567
- ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
567
+ ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
568
568
 
569
569
  # Via daemon with --env
570
- ./dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json \
570
+ ./.prizmkit/dev-pipeline/launch-feature-daemon.sh start .prizmkit/plans/feature-list.json \
571
571
  --mode standard \
572
572
  --env "MAX_RETRIES=5 SESSION_TIMEOUT=3600 AUTO_PUSH=1"
573
573
  ```
@@ -604,13 +604,13 @@ Specify a model for individual features in `.prizmkit/plans/feature-list.json`:
604
604
 
605
605
  ```bash
606
606
  # All features without a per-feature model use Sonnet
607
- MODEL=claude-sonnet-4.6 ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
607
+ MODEL=claude-sonnet-4.6 ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
608
608
 
609
609
  # Retry with Opus
610
- MODEL=claude-opus-4.6 ./dev-pipeline/reset-feature.sh F-007 --clean --run
610
+ MODEL=claude-opus-4.6 ./.prizmkit/dev-pipeline/reset-feature.sh F-007 --clean --run
611
611
 
612
612
  # Test which model the CLI is using
613
- MODEL=claude-sonnet-4.6 ./dev-pipeline/run-feature.sh test-cli
613
+ MODEL=claude-sonnet-4.6 ./.prizmkit/dev-pipeline/run-feature.sh test-cli
614
614
  ```
615
615
 
616
616
  ### Dry-Run Model Verification
@@ -618,7 +618,7 @@ MODEL=claude-sonnet-4.6 ./dev-pipeline/run-feature.sh test-cli
618
618
  Use `--dry-run` to verify which model will be used without spawning a session:
619
619
 
620
620
  ```bash
621
- ./dev-pipeline/run-feature.sh run F-017 --dry-run
621
+ ./.prizmkit/dev-pipeline/run-feature.sh run F-017 --dry-run
622
622
  # Output includes: "Feature Model: claude-opus-4.6"
623
623
  ```
624
624
 
@@ -655,15 +655,15 @@ To permanently configure, create `.prizmkit/config.json`:
655
655
  Or override per-invocation:
656
656
 
657
657
  ```bash
658
- AI_CLI=claude ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
658
+ AI_CLI=claude ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
659
659
  ```
660
660
 
661
661
  ### Testing AI CLI (`test-cli`)
662
662
 
663
663
  ```bash
664
- ./dev-pipeline/run-feature.sh test-cli
665
- MODEL=claude-sonnet-4.6 ./dev-pipeline/run-feature.sh test-cli
666
- AI_CLI=cbc ./dev-pipeline/run-feature.sh test-cli
664
+ ./.prizmkit/dev-pipeline/run-feature.sh test-cli
665
+ MODEL=claude-sonnet-4.6 ./.prizmkit/dev-pipeline/run-feature.sh test-cli
666
+ AI_CLI=cbc ./.prizmkit/dev-pipeline/run-feature.sh test-cli
667
667
  ```
668
668
 
669
669
  ---
@@ -758,25 +758,25 @@ cat .prizmkit/state/features/features/F-003/sessions/F-003-*/logs/session.log |
758
758
 
759
759
  ```bash
760
760
  # Check what failed
761
- ./dev-pipeline/run-feature.sh status .prizmkit/plans/feature-list.json
761
+ ./.prizmkit/dev-pipeline/run-feature.sh status .prizmkit/plans/feature-list.json
762
762
 
763
763
  # Review session logs
764
764
  cat .prizmkit/state/features/features/F-XXX/sessions/*/logs/session.log
765
765
 
766
766
  # Option A: Fix manually and mark complete
767
- python3 dev-pipeline/scripts/update-feature-status.py \
767
+ python3 .prizmkit/dev-pipeline/scripts/update-feature-status.py \
768
768
  --feature-list .prizmkit/plans/feature-list.json \
769
769
  --state-dir .prizmkit/state/features \
770
770
  --feature-id F-XXX --action complete
771
771
 
772
772
  # Option B: Reset for retry
773
- python3 dev-pipeline/scripts/update-feature-status.py \
773
+ python3 .prizmkit/dev-pipeline/scripts/update-feature-status.py \
774
774
  --feature-list .prizmkit/plans/feature-list.json \
775
775
  --state-dir .prizmkit/state/features \
776
776
  --feature-id F-XXX --action reset
777
777
 
778
778
  # Resume
779
- ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
779
+ ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json
780
780
  ```
781
781
 
782
782
  ---
@@ -790,11 +790,11 @@ The bug fix pipeline provides the same autonomous outer-loop as the feature pipe
790
790
  ```bash
791
791
  # 1. Generate bug fix list (via bug-planner skill)
792
792
  # 2. Run foreground
793
- ./dev-pipeline/run-bugfix.sh run .prizmkit/plans/bug-fix-list.json
793
+ ./.prizmkit/dev-pipeline/run-bugfix.sh run .prizmkit/plans/bug-fix-list.json
794
794
  # 3. Or as daemon
795
- ./dev-pipeline/launch-bugfix-daemon.sh start .prizmkit/plans/bug-fix-list.json
795
+ ./.prizmkit/dev-pipeline/launch-bugfix-daemon.sh start .prizmkit/plans/bug-fix-list.json
796
796
  # 4. Check progress
797
- ./dev-pipeline/run-bugfix.sh status .prizmkit/plans/bug-fix-list.json
797
+ ./.prizmkit/dev-pipeline/run-bugfix.sh status .prizmkit/plans/bug-fix-list.json
798
798
  ```
799
799
 
800
800
  ### Bug Fix Execution Flow
@@ -852,7 +852,7 @@ run-bugfix.sh main loop
852
852
  ## Directory Structure
853
853
 
854
854
  ```
855
- dev-pipeline/
855
+ .prizmkit/dev-pipeline/
856
856
  +-- run-feature.sh # Main pipeline runner (features)
857
857
  +-- reset-feature.sh # Reset & retry failed feature
858
858
  +-- reset-feature.sh # Reset/clean feature for re-execution
@@ -37,7 +37,7 @@ Note: The Orchestrator role is handled by the main agent (session orchestrator)
37
37
 
38
38
  ## Pipeline Scripts
39
39
 
40
- Located at `dev-pipeline/scripts/`:
40
+ Located at `.prizmkit/dev-pipeline/scripts/`:
41
41
 
42
42
  | Script | Purpose |
43
43
  |--------|---------|
@@ -24,8 +24,11 @@ set -euo pipefail
24
24
  # ============================================================
25
25
 
26
26
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
28
- STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/bugfix"
27
+
28
+ # Source shared common helpers (exports PIPELINE_DIR/PRIZMKIT_DIR/PROJECT_ROOT)
29
+ source "$SCRIPT_DIR/lib/common.sh"
30
+
31
+ STATE_DIR="${PRIZMKIT_DIR}/state/bugfix"
29
32
  PID_FILE="$STATE_DIR/.pipeline.pid"
30
33
  LOG_FILE="$STATE_DIR/pipeline-daemon.log"
31
34
  RUN_SCRIPT="$SCRIPT_DIR/run-bugfix.sh"
@@ -24,8 +24,11 @@ set -euo pipefail
24
24
  # ============================================================
25
25
 
26
26
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
28
- STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/features"
27
+
28
+ # Source shared common helpers (exports PIPELINE_DIR/PRIZMKIT_DIR/PROJECT_ROOT)
29
+ source "$SCRIPT_DIR/lib/common.sh"
30
+
31
+ STATE_DIR="${PRIZMKIT_DIR}/state/features"
29
32
  PID_FILE="$STATE_DIR/.pipeline.pid"
30
33
  LOG_FILE="$STATE_DIR/pipeline-daemon.log"
31
34
  RUN_SCRIPT="$SCRIPT_DIR/run-feature.sh"
@@ -24,8 +24,11 @@ set -euo pipefail
24
24
  # ============================================================
25
25
 
26
26
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
28
- STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/refactor"
27
+
28
+ # Source shared common helpers (exports PIPELINE_DIR/PRIZMKIT_DIR/PROJECT_ROOT)
29
+ source "$SCRIPT_DIR/lib/common.sh"
30
+
31
+ STATE_DIR="${PRIZMKIT_DIR}/state/refactor"
29
32
  PID_FILE="$STATE_DIR/.pipeline.pid"
30
33
  LOG_FILE="$STATE_DIR/pipeline-daemon.log"
31
34
  RUN_SCRIPT="$SCRIPT_DIR/run-refactor.sh"
@@ -23,6 +23,37 @@ log_warn() { echo -e "${YELLOW}[WARN]${NC} $(date '+%Y-%m-%d %H:%M:%S') $*
23
23
  log_error() { echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') $*"; }
24
24
  log_success() { echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') $*"; }
25
25
 
26
+ # ============================================================
27
+ # Path resolution (single source of truth)
28
+ # ============================================================
29
+ # Exports three directories used throughout dev-pipeline scripts:
30
+ # PIPELINE_DIR — directory containing the dev-pipeline scripts
31
+ # PRIZMKIT_DIR — the .prizmkit/ runtime directory
32
+ # PROJECT_ROOT — the user's project root
33
+ #
34
+ # Layout detection (no override case):
35
+ # - If PIPELINE_DIR's parent is named ".prizmkit" → user-install layout
36
+ # (.prizmkit/dev-pipeline/). PRIZMKIT_DIR = parent.
37
+ # - Otherwise → framework repo source (<repo>/dev-pipeline/).
38
+ # PROJECT_ROOT = parent, PRIZMKIT_DIR = <repo>/.prizmkit.
39
+ #
40
+ # Callers (tests) may pre-set any of these env vars to override detection.
41
+ if [[ -z "${PIPELINE_DIR:-}" ]]; then
42
+ PIPELINE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
43
+ fi
44
+ if [[ -z "${PRIZMKIT_DIR:-}" || -z "${PROJECT_ROOT:-}" ]]; then
45
+ _pipeline_parent="$(dirname "$PIPELINE_DIR")"
46
+ if [[ "$(basename "$_pipeline_parent")" == ".prizmkit" ]]; then
47
+ : "${PRIZMKIT_DIR:=$_pipeline_parent}"
48
+ : "${PROJECT_ROOT:=$(dirname "$_pipeline_parent")}"
49
+ else
50
+ : "${PROJECT_ROOT:=$_pipeline_parent}"
51
+ : "${PRIZMKIT_DIR:=$PROJECT_ROOT/.prizmkit}"
52
+ fi
53
+ unset _pipeline_parent
54
+ fi
55
+ export PIPELINE_DIR PRIZMKIT_DIR PROJECT_ROOT
56
+
26
57
  # ============================================================
27
58
  # .env file loading
28
59
  # ============================================================
@@ -96,11 +127,9 @@ prizm_log_bootstrap_prompt() {
96
127
  # PLATFORM
97
128
  # PRIZMKIT_PLATFORM
98
129
  prizm_detect_cli_and_platform() {
99
- # Load .env from project root if it exists (does not override existing env vars)
100
- local _env_root
101
- _env_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." 2>/dev/null && pwd)" || true
102
- if [[ -n "$_env_root" ]]; then
103
- prizm_load_env "$_env_root/.env"
130
+ # Load .env from .prizmkit/.env if it exists (does not override existing env vars)
131
+ if [[ -n "${PRIZMKIT_DIR:-}" ]]; then
132
+ prizm_load_env "$PRIZMKIT_DIR/.env"
104
133
  fi
105
134
 
106
135
  local _raw_cli=""
@@ -43,8 +43,11 @@ set -euo pipefail
43
43
  # ============================================================
44
44
 
45
45
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
46
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
47
- STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/bugfix"
46
+
47
+ # Source shared common helpers (exports PIPELINE_DIR/PRIZMKIT_DIR/PROJECT_ROOT)
48
+ source "$SCRIPT_DIR/lib/common.sh"
49
+
50
+ STATE_DIR="${PRIZMKIT_DIR}/state/bugfix"
48
51
  SCRIPTS_DIR="$SCRIPT_DIR/scripts"
49
52
 
50
53
  # Colors
@@ -198,7 +201,6 @@ fi
198
201
  # Process each bug
199
202
  # ============================================================
200
203
 
201
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
202
204
  RESET_COUNT=0
203
205
  FAIL_COUNT=0
204
206
 
@@ -385,9 +387,9 @@ if [[ "$DO_RUN" == true && ${#BUG_IDS[@]} -eq 1 ]]; then
385
387
  echo ""
386
388
  exec "$SCRIPT_DIR/run-bugfix.sh" run "${BUG_IDS[0]}" "$BUG_LIST"
387
389
  else
388
- log_info " ./dev-pipeline/run-bugfix.sh run .prizmkit/plans/bug-fix-list.json # Resume pipeline from first pending"
390
+ log_info " ./.prizmkit/dev-pipeline/run-bugfix.sh run .prizmkit/plans/bug-fix-list.json # Resume pipeline from first pending"
389
391
  if [[ ${#BUG_IDS[@]} -eq 1 ]]; then
390
- log_info " ./dev-pipeline/run-bugfix.sh run ${BUG_IDS[0]} # Run single bug"
392
+ log_info " ./.prizmkit/dev-pipeline/run-bugfix.sh run ${BUG_IDS[0]} # Run single bug"
391
393
  fi
392
394
  fi
393
395
  echo ""
@@ -43,8 +43,11 @@ set -euo pipefail
43
43
  # ============================================================
44
44
 
45
45
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
46
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
47
- STATE_DIR="${PROJECT_ROOT}/.prizmkit/state/features"
46
+
47
+ # Source shared common helpers (exports PIPELINE_DIR/PRIZMKIT_DIR/PROJECT_ROOT)
48
+ source "$SCRIPT_DIR/lib/common.sh"
49
+
50
+ STATE_DIR="${PRIZMKIT_DIR}/state/features"
48
51
  SCRIPTS_DIR="$SCRIPT_DIR/scripts"
49
52
 
50
53
  # Colors
@@ -198,7 +201,6 @@ fi
198
201
  # Process each feature
199
202
  # ============================================================
200
203
 
201
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
202
204
  RESET_COUNT=0
203
205
  FAIL_COUNT=0
204
206
 
@@ -396,9 +398,9 @@ if [[ "$DO_RUN" == true && ${#FEATURE_IDS[@]} -eq 1 ]]; then
396
398
  echo ""
397
399
  exec "$SCRIPT_DIR/run-feature.sh" run "${FEATURE_IDS[0]}" "$FEATURE_LIST"
398
400
  else
399
- log_info " ./dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json # Resume pipeline from first pending"
401
+ log_info " ./.prizmkit/dev-pipeline/run-feature.sh run .prizmkit/plans/feature-list.json # Resume pipeline from first pending"
400
402
  if [[ ${#FEATURE_IDS[@]} -eq 1 ]]; then
401
- log_info " ./dev-pipeline/run-feature.sh run ${FEATURE_IDS[0]} # Run single feature"
403
+ log_info " ./.prizmkit/dev-pipeline/run-feature.sh run ${FEATURE_IDS[0]} # Run single feature"
402
404
  fi
403
405
  fi
404
406
  echo ""