@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.
- package/README.md +1 -1
- package/package.json +14 -16
- package/pennyfarthing-dist/pf/hooks/cyclist-pretooluse-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/core/agent-session.sh +0 -0
- package/pennyfarthing-dist/scripts/core/check-context.sh +0 -0
- package/pennyfarthing-dist/scripts/core/dialogue-manager.sh +0 -0
- package/pennyfarthing-dist/scripts/core/pf.sh +0 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +0 -0
- package/pennyfarthing-dist/scripts/core/prime.sh +0 -0
- package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +0 -0
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +0 -0
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +0 -0
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +0 -0
- package/pennyfarthing-dist/scripts/git/release.sh +0 -0
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +0 -0
- package/pennyfarthing-dist/scripts/health/drift-detection.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/dispatcher-template.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +0 -0
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/background-tasks.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/common.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/env.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/file-lock.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/logging.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/retry.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/run-pf.sh +0 -0
- package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +0 -0
- package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/add-short-names.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/add_short_names.py +0 -0
- package/pennyfarthing-dist/scripts/misc/backlog.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/check-status.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/find-related-work.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +0 -0
- package/pennyfarthing-dist/scripts/misc/repo-scan.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/repo-utils.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/run-ci.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/statusline.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/uninstall.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +0 -0
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +0 -0
- package/pennyfarthing-dist/scripts/portraits/generate-tandem-portraits.sh +0 -0
- package/pennyfarthing-dist/scripts/story/create-story.sh +0 -0
- package/pennyfarthing-dist/scripts/story/size-story.sh +0 -0
- package/pennyfarthing-dist/scripts/story/story-template.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +0 -0
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/check.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/check.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/complete-step.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +0 -0
- package/pennyfarthing-dist/skills/pf-story/scripts/create-story.sh +0 -0
- package/pennyfarthing-dist/skills/pf-story/scripts/size-story.sh +0 -0
- package/pennyfarthing-dist/skills/pf-story/scripts/story-template.sh +0 -0
- package/pennyfarthing-dist/workflows/release/steps/step-10-publish.md +41 -9
- package/scripts/README.md +0 -41
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Pennyfarthing
|
|
2
2
|
|
|
3
|
-
**v11.3.
|
|
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.
|
|
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
|
-
"
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
12
|
-
5.
|
|
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
|
-
|
|
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
|
-
|
|
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" &&
|
|
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.
|