@pennyfarthing/core 11.3.7 → 11.3.8

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 (106) hide show
  1. package/README.md +1 -1
  2. package/package.json +14 -16
  3. package/pennyfarthing-dist/pf/hooks/cyclist-pretooluse-hook.sh +0 -0
  4. package/pennyfarthing-dist/scripts/core/agent-session.sh +0 -0
  5. package/pennyfarthing-dist/scripts/core/check-context.sh +0 -0
  6. package/pennyfarthing-dist/scripts/core/dialogue-manager.sh +0 -0
  7. package/pennyfarthing-dist/scripts/core/pf.sh +0 -0
  8. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +0 -0
  9. package/pennyfarthing-dist/scripts/core/prime.sh +0 -0
  10. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +0 -0
  11. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +0 -0
  12. package/pennyfarthing-dist/scripts/git/git-status-all.sh +0 -0
  13. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +0 -0
  14. package/pennyfarthing-dist/scripts/git/release.sh +0 -0
  15. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +0 -0
  16. package/pennyfarthing-dist/scripts/health/drift-detection.sh +0 -0
  17. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +0 -0
  18. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -0
  19. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -0
  20. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
  21. package/pennyfarthing-dist/scripts/hooks/dispatcher-template.sh +0 -0
  22. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
  23. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -0
  24. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
  25. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
  26. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
  27. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +0 -0
  28. package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +0 -0
  29. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +0 -0
  30. package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -0
  31. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -0
  32. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +0 -0
  33. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +0 -0
  34. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +0 -0
  35. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +0 -0
  36. package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +0 -0
  37. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +0 -0
  38. package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +0 -0
  39. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +0 -0
  40. package/pennyfarthing-dist/scripts/lib/background-tasks.sh +0 -0
  41. package/pennyfarthing-dist/scripts/lib/checkpoint.sh +0 -0
  42. package/pennyfarthing-dist/scripts/lib/common.sh +0 -0
  43. package/pennyfarthing-dist/scripts/lib/env.sh +0 -0
  44. package/pennyfarthing-dist/scripts/lib/file-lock.sh +0 -0
  45. package/pennyfarthing-dist/scripts/lib/logging.sh +0 -0
  46. package/pennyfarthing-dist/scripts/lib/retry.sh +0 -0
  47. package/pennyfarthing-dist/scripts/lib/run-pf.sh +0 -0
  48. package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +0 -0
  49. package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +0 -0
  50. package/pennyfarthing-dist/scripts/misc/add-short-names.sh +0 -0
  51. package/pennyfarthing-dist/scripts/misc/add_short_names.py +0 -0
  52. package/pennyfarthing-dist/scripts/misc/backlog.sh +0 -0
  53. package/pennyfarthing-dist/scripts/misc/check-status.sh +0 -0
  54. package/pennyfarthing-dist/scripts/misc/find-related-work.sh +0 -0
  55. package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +0 -0
  56. package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +0 -0
  57. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +0 -0
  58. package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +0 -0
  59. package/pennyfarthing-dist/scripts/misc/repo-scan.sh +0 -0
  60. package/pennyfarthing-dist/scripts/misc/repo-utils.sh +0 -0
  61. package/pennyfarthing-dist/scripts/misc/run-ci.sh +0 -0
  62. package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +0 -0
  63. package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +0 -0
  64. package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +0 -0
  65. package/pennyfarthing-dist/scripts/misc/statusline.sh +0 -0
  66. package/pennyfarthing-dist/scripts/misc/uninstall.sh +0 -0
  67. package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +0 -0
  68. package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +0 -0
  69. package/pennyfarthing-dist/scripts/portraits/generate-tandem-portraits.sh +0 -0
  70. package/pennyfarthing-dist/scripts/story/create-story.sh +0 -0
  71. package/pennyfarthing-dist/scripts/story/size-story.sh +0 -0
  72. package/pennyfarthing-dist/scripts/story/story-template.sh +0 -0
  73. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
  74. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +0 -0
  75. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +0 -0
  76. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +0 -0
  77. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +0 -0
  78. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +0 -0
  79. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +0 -0
  80. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +0 -0
  81. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -0
  82. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -0
  83. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -0
  84. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -0
  85. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
  86. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +0 -0
  87. package/pennyfarthing-dist/scripts/theme/list-themes.sh +0 -0
  88. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -0
  89. package/pennyfarthing-dist/scripts/workflow/check.py +0 -0
  90. package/pennyfarthing-dist/scripts/workflow/check.sh +0 -0
  91. package/pennyfarthing-dist/scripts/workflow/complete-step.py +0 -0
  92. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +0 -0
  93. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +0 -0
  94. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +0 -0
  95. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +0 -0
  96. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +0 -0
  97. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +0 -0
  98. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +0 -0
  99. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +0 -0
  100. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +0 -0
  101. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +0 -0
  102. package/pennyfarthing-dist/skills/pf-story/scripts/create-story.sh +0 -0
  103. package/pennyfarthing-dist/skills/pf-story/scripts/size-story.sh +0 -0
  104. package/pennyfarthing-dist/skills/pf-story/scripts/story-template.sh +0 -0
  105. package/pennyfarthing-dist/workflows/release/steps/step-10-publish.md +41 -9
  106. package/scripts/README.md +0 -41
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Pennyfarthing
2
2
 
3
- **v11.3.7** | *The outer loop goes once, the inner loop goes many times.*
3
+ **v11.3.8** | *The outer loop goes once, the inner loop goes many times.*
4
4
 
5
5
  <img src="pennyfarthing.png" alt="Pennyfarthing Logo" width="75" style="float:left; margin:10px">
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pennyfarthing/core",
3
- "version": "11.3.7",
3
+ "version": "11.3.8",
4
4
  "description": "Claude Code agent framework with TDD workflow and persona system",
5
5
  "type": "module",
6
6
  "main": "./packages/core/dist/index.js",
@@ -45,19 +45,6 @@
45
45
  "bugs": {
46
46
  "url": "https://github.com/1898andCo/pennyfarthing/issues"
47
47
  },
48
- "scripts": {
49
- "prepublishOnly": "find pennyfarthing-dist/scripts -name '*.sh' ! -name 'find-root.sh' -exec chmod +x {} +",
50
- "postinstall": "node scripts/postinstall.cjs",
51
- "build": "pnpm --filter @pennyfarthing/shared build && pnpm --filter @pennyfarthing/core build && pnpm --filter @pennyfarthing/cyclist build && ./scripts/generate-skill-docs.sh",
52
- "docs": "./scripts/generate-skill-docs.sh",
53
- "dev": "pnpm -r --parallel dev",
54
- "test": "pnpm -r test",
55
- "lint": "eslint 'packages/*/src/**/*.ts' --max-warnings 0",
56
- "lint:md": "markdownlint-cli2 'pennyfarthing-dist/**/*.md'",
57
- "validate:refs": "node scripts/validate-refs.js",
58
- "test:validate-refs": "node --test scripts/validate-refs.test.js",
59
- "clean": "pnpm -r clean"
60
- },
61
48
  "dependencies": {
62
49
  "@pennyfarthing/shared": "^10.0.3",
63
50
  "chalk": "^5.3.0",
@@ -78,5 +65,16 @@
78
65
  "engines": {
79
66
  "node": ">=18.0.0"
80
67
  },
81
- "packageManager": "pnpm@9.0.0"
82
- }
68
+ "scripts": {
69
+ "postinstall": "node scripts/postinstall.cjs",
70
+ "build": "pnpm --filter @pennyfarthing/shared build && pnpm --filter @pennyfarthing/core build && pnpm --filter @pennyfarthing/cyclist build && ./scripts/generate-skill-docs.sh",
71
+ "docs": "./scripts/generate-skill-docs.sh",
72
+ "dev": "pnpm -r --parallel dev",
73
+ "test": "pnpm -r test",
74
+ "lint": "eslint 'packages/*/src/**/*.ts' --max-warnings 0",
75
+ "lint:md": "markdownlint-cli2 'pennyfarthing-dist/**/*.md'",
76
+ "validate:refs": "node scripts/validate-refs.js",
77
+ "test:validate-refs": "node --test scripts/validate-refs.test.js",
78
+ "clean": "pnpm -r clean"
79
+ }
80
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,20 +1,29 @@
1
1
  # Step 10: Publish to npm
2
2
 
3
3
  <purpose>
4
- Publish all Pennyfarthing packages to the npm registry. Verifies authentication, checks for conflicts, publishes each package, and verifies registry state.
4
+ Publish all Pennyfarthing packages to the npm registry. Uses `pnpm publish` to
5
+ resolve `workspace:*` dependencies to real version numbers. Verifies authentication,
6
+ checks for conflicts, publishes each package, and verifies registry state.
5
7
  </purpose>
6
8
 
9
+ <critical>
10
+ **MUST use `pnpm publish`** — not `npm publish`. Packages use `workspace:*` protocol
11
+ for inter-package dependencies. `pnpm publish` resolves these to actual version numbers
12
+ at publish time. `npm publish` does NOT — it publishes the literal `workspace:*` string,
13
+ which breaks consumer installs.
14
+ </critical>
15
+
7
16
  <instructions>
8
17
  1. Verify npm authentication
9
18
  2. Check that versions aren't already published
10
- 3. Publish @pennyfarthing/core (root package)
11
- 4. Publish @pennyfarthing/cyclist
12
- 5. Publish all theme packs
13
- 6. Verify published versions on registry
19
+ 3. Publish @pennyfarthing/core (root package) via pnpm
20
+ 4. Publish workspace packages via pnpm
21
+ 5. Verify published versions and resolved dependencies on registry
14
22
  </instructions>
15
23
 
16
24
  <output>
17
- npm publish results for each package, plus registry verification.
25
+ pnpm publish results for each package, plus registry verification including
26
+ dependency resolution check (no workspace:* in published metadata).
18
27
  </output>
19
28
 
20
29
  ## Execution
@@ -69,7 +78,7 @@ fi
69
78
 
70
79
  ```bash
71
80
  echo "Publishing @pennyfarthing/core@{new_version}..."
72
- npm publish --access public $NPM_TAG
81
+ pnpm publish --access public --no-git-checks $NPM_TAG
73
82
  ```
74
83
 
75
84
  ### 10.5 Publish Workspace Packages
@@ -79,17 +88,20 @@ for pkg_dir in packages/cyclist packages/shared packages/themes-*; do
79
88
  if [[ -f "$pkg_dir/package.json" ]]; then
80
89
  PKG_NAME=$(node -e "console.log(require('./$pkg_dir/package.json').name)")
81
90
  echo "Publishing $PKG_NAME@{new_version}..."
82
- (cd "$pkg_dir" && npm publish --access public $NPM_TAG) || echo "WARNING: Failed to publish $PKG_NAME"
91
+ (cd "$pkg_dir" && pnpm publish --access public --no-git-checks $NPM_TAG) || echo "WARNING: Failed to publish $PKG_NAME"
83
92
  fi
84
93
  done
85
94
  ```
86
95
 
87
- ### 10.6 Verify Published
96
+ ### 10.6 Verify Published (including workspace:* resolution)
88
97
 
89
98
  ```bash
90
99
  echo "=== Registry Verification ==="
91
100
  echo "Waiting 10s for registry propagation..."
92
101
  sleep 10
102
+
103
+ echo ""
104
+ echo "=== Version Check ==="
93
105
  for PKG_JSON in package.json packages/*/package.json; do
94
106
  PKG_NAME=$(node -e "console.log(require('./$PKG_JSON').name)")
95
107
  npm view "$PKG_NAME@{new_version}" version 2>/dev/null \
@@ -97,6 +109,26 @@ for PKG_JSON in package.json packages/*/package.json; do
97
109
  || echo " ✗ $PKG_NAME@{new_version} NOT FOUND"
98
110
  done
99
111
 
112
+ echo ""
113
+ echo "=== Dependency Resolution Check ==="
114
+ echo "Verifying no workspace:* references leaked to npm..."
115
+ LEAKED=0
116
+ for PKG_JSON in package.json packages/*/package.json; do
117
+ PKG_NAME=$(node -e "console.log(require('./$PKG_JSON').name)")
118
+ DEPS=$(npm view "$PKG_NAME@{new_version}" dependencies --json 2>/dev/null || echo "{}")
119
+ if echo "$DEPS" | grep -q "workspace:"; then
120
+ echo " ✗ $PKG_NAME has workspace: refs in published dependencies!"
121
+ echo "$DEPS" | grep "workspace:"
122
+ LEAKED=1
123
+ else
124
+ echo " ✓ $PKG_NAME — no workspace: refs"
125
+ fi
126
+ done
127
+ if [[ $LEAKED -eq 1 ]]; then
128
+ echo ""
129
+ echo "ERROR: workspace:* references leaked to npm. Deprecate affected versions and re-publish."
130
+ fi
131
+
100
132
  if [[ "$IS_PRERELEASE" == "true" ]]; then
101
133
  echo ""
102
134
  echo "=== Dist-Tag Verification ==="
package/scripts/README.md DELETED
@@ -1,41 +0,0 @@
1
- # Meta Scripts
2
-
3
- **These scripts are NOT distributed to users.** They are for Pennyfarthing framework development only.
4
-
5
- ## Contents
6
-
7
- | Script | Purpose |
8
- |--------|---------|
9
- | `deploy.sh` | Release Pennyfarthing (version bump, tag, push, GitHub release) |
10
- | `cyclist-debug.mjs` | Debug Cyclist connection |
11
- | `handoff-cli.{sh,js}` | Test handoff flow |
12
- | `verify-visual-mapping.js` | Verify theme visual mappings |
13
- | `migrate-assets-to-slug.sh` | One-time migration script |
14
- | `resize-portraits.sh` | Resize portrait images |
15
- | `resolve-portrait.mjs` | Portrait resolution logic |
16
- | `validate-refs.js` | Validate internal references |
17
-
18
- > Benchmark scripts have been moved to `packages/benchmark/`.
19
-
20
- ## Usage
21
-
22
- Run from pennyfarthing repo root:
23
-
24
- ```bash
25
- # Release a new version
26
- ./scripts/deploy.sh --dry-run patch
27
- ./scripts/deploy.sh patch
28
- ```
29
-
30
- ## Where Should My Script Go?
31
-
32
- **Put it here if:**
33
- - It's for framework development/CI only
34
- - Users should NOT have access to it
35
- - It uses GPU/heavy dependencies (keep in meta, not distributed)
36
-
37
- **Put it in `pennyfarthing-dist/scripts/` if:**
38
- - Users need it for their workflows
39
- - It's part of the sprint/story/jira tooling
40
-
41
- See `CLAUDE.md` for the full decision tree.