@hecer/yoke 1.6.0 → 1.6.2
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/.claude-plugin/plugin.json +13 -13
- package/.codex-plugin/plugin.json +7 -7
- package/CHANGELOG.md +304 -288
- package/README.md +874 -874
- package/TODOS.md +5 -5
- package/agents/docs.toml +6 -6
- package/agents/implementer.toml +6 -6
- package/agents/reviewer.toml +6 -6
- package/agents/security.toml +6 -6
- package/bench/README.md +86 -86
- package/bench/RESULTS.md +35 -35
- package/bench/output-compaction.mjs +65 -65
- package/bench/result-schema.mjs +12 -12
- package/bench/results/claude-2026-07-27T18-03-26.json +50 -50
- package/bench/results/codex-unavailable-1785175418318.json +15 -15
- package/bench/results/gemini-2026-07-27T18-03-44.json +46 -46
- package/bench/run-matrix.mjs +26 -26
- package/bench/run.mjs +106 -106
- package/canon/AGENTS.md +30 -30
- package/canon/context/DECISIONS.md +4 -4
- package/canon/context/GLOSSARY.md +11 -11
- package/canon/context/KNOWLEDGE.md +4 -4
- package/canon/context/PROJECT.md +15 -15
- package/canon/loop/loop-spec.md +65 -65
- package/canon/loop/prd.schema.md +43 -43
- package/canon/manifest.yaml +59 -59
- package/canon/policy/gates.md +7 -7
- package/canon/policy/roles.md +9 -9
- package/canon/skills/ATTRIBUTION.md +99 -99
- package/canon/skills/authoring-prd/SKILL.md +58 -58
- package/canon/skills/brainstorming/SKILL.md +164 -164
- package/canon/skills/codebase-design/DEEPENING.md +15 -15
- package/canon/skills/codebase-design/DESIGN-IT-TWICE.md +12 -12
- package/canon/skills/codebase-design/SKILL.md +39 -39
- package/canon/skills/dispatching-parallel-agents/SKILL.md +182 -182
- package/canon/skills/document-release/SKILL.md +302 -302
- package/canon/skills/domain-modeling/ADR-FORMAT.md +19 -19
- package/canon/skills/domain-modeling/CONTEXT-FORMAT.md +39 -39
- package/canon/skills/domain-modeling/SKILL.md +35 -35
- package/canon/skills/executing-plans/SKILL.md +70 -70
- package/canon/skills/finishing-a-development-branch/SKILL.md +200 -200
- package/canon/skills/health/SKILL.md +177 -177
- package/canon/skills/maintaining-context/SKILL.md +34 -34
- package/canon/skills/minimal-code/SKILL.md +21 -21
- package/canon/skills/no-ai-slop/SKILL.md +103 -103
- package/canon/skills/no-ai-slop/eval.md +43 -43
- package/canon/skills/plan-ceo-review/SKILL.md +541 -541
- package/canon/skills/plan-eng-review/SKILL.md +362 -362
- package/canon/skills/receiving-code-review/SKILL.md +213 -213
- package/canon/skills/requesting-code-review/SKILL.md +105 -105
- package/canon/skills/resolving-merge-conflicts/SKILL.md +18 -18
- package/canon/skills/retro/SKILL.md +397 -397
- package/canon/skills/review/SKILL.md +246 -246
- package/canon/skills/ship/SKILL.md +691 -691
- package/canon/skills/subagent-driven-development/SKILL.md +277 -277
- package/canon/skills/systematic-debugging/SKILL.md +296 -296
- package/canon/skills/tdd/SKILL.md +371 -371
- package/canon/skills/unslop-ui/SKILL.md +34 -34
- package/canon/skills/using-git-worktrees/SKILL.md +218 -218
- package/canon/skills/verification-before-completion/SKILL.md +139 -139
- package/canon/skills/visual-verification/SKILL.md +54 -54
- package/canon/skills/workflow/SKILL.md +22 -22
- package/canon/skills/writing-for-agents/SKILL-MECHANICS.md +27 -27
- package/canon/skills/writing-for-agents/SKILL.md +42 -42
- package/canon/skills/writing-plans/SKILL.md +152 -152
- package/canon/skills/writing-skills/SKILL.md +655 -655
- package/canon/skills/yoke-retrofit/SKILL.md +26 -26
- package/canon/skills/yoke-workflow/SKILL.md +20 -20
- package/canon/tools/codex-rtk-hook.mjs +35 -35
- package/canon/tools/graphify.md +3 -3
- package/canon/tools/playwright-mcp.md +3 -3
- package/canon/tools/rtk.md +7 -7
- package/canon/tools/serena.md +6 -6
- package/dist/agents/process.js +5 -0
- package/dist/agents/providers.js +1 -1
- package/dist/loop/cleanup.js +3 -0
- package/dist/loop/reporter.js +4 -1
- package/dist/loop/watchdog.js +3 -1
- package/dist/prd/command.js +17 -17
- package/dist/retrofit/planners/claude.js +14 -14
- package/dist/retrofit/preserve.js +2 -2
- package/docs/MIGRATING-TO-1.0.md +33 -33
- package/docs/MIGRATING-TO-1.1.md +27 -27
- package/docs/MIGRATING-TO-1.4.md +70 -70
- package/docs/PUBLISHING.md +114 -91
- package/docs/superpowers/plans/2026-06-28-baustein-e-context-layer.md +981 -981
- package/docs/superpowers/plans/2026-06-29-baustein-f-routing.md +258 -258
- package/docs/superpowers/plans/2026-06-29-baustein-g-loop-observability.md +1006 -1006
- package/docs/superpowers/plans/2026-06-29-baustein-h-loop-robustness.md +374 -374
- package/docs/superpowers/plans/2026-06-30-baustein-i-visual-design-verification.md +450 -450
- package/docs/superpowers/plans/2026-07-02-baustein-k-zero-to-100-bootstrap.md +1024 -1024
- package/docs/superpowers/plans/2026-07-02-baustein-m-flow-smoke-proofs.md +574 -574
- package/docs/superpowers/plans/2026-08-13-gauntlet-quality-loop.md +537 -537
- package/docs/superpowers/plans/2026-08-16-artifact-backed-output-compaction.md +329 -329
- package/docs/superpowers/specs/2026-06-28-baustein-e-context-layer-design.md +146 -146
- package/docs/superpowers/specs/2026-06-29-baustein-f-routing-design.md +106 -106
- package/docs/superpowers/specs/2026-06-29-baustein-g-loop-observability-design.md +186 -186
- package/docs/superpowers/specs/2026-06-29-baustein-h-loop-robustness-design.md +113 -113
- package/docs/superpowers/specs/2026-06-30-baustein-i-visual-design-verification-design.md +98 -98
- package/docs/superpowers/specs/2026-07-02-baustein-k-zero-to-100-bootstrap-design.md +200 -200
- package/docs/superpowers/specs/2026-07-02-baustein-m-flow-smoke-proofs-design.md +155 -155
- package/docs/superpowers/specs/2026-08-13-gauntlet-quality-loop-design.md +422 -422
- package/docs/superpowers/specs/2026-08-16-artifact-backed-output-compaction-design.md +166 -166
- package/gemini-extension.json +6 -6
- package/hooks/hooks.json +19 -19
- package/package.json +87 -87
package/docs/MIGRATING-TO-1.4.md
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
# Migrating to Yoke 1.4
|
|
2
|
-
|
|
3
|
-
Yoke 1.4 adds dependency-aware parallel workers, isolated candidate selection, and a reference-driven quality gauntlet. Existing projects remain serial and skip quality comparison unless you opt in.
|
|
4
|
-
|
|
5
|
-
Upgrade and refresh generated harness files:
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install -g @hecer/yoke@1.4.0
|
|
9
|
-
yoke retrofit .
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Parallel execution
|
|
13
|
-
|
|
14
|
-
Run dependency-ready stories concurrently with an explicit worker limit:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
yoke loop run . --isolate --parallel=3
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Parallel runs use isolated worktrees, leased claims, and a FIFO integration queue. Every candidate must pass its worker gates and the merged result must pass the project gates again. Adaptive routing is disabled during parallel and multi-candidate runs so each worker has one auditable provider identity.
|
|
21
|
-
|
|
22
|
-
Use `--candidates=N` to produce and mechanically gate multiple implementations before an identity-blind comparison selects the winner. Candidate mode supports up to five candidates.
|
|
23
|
-
|
|
24
|
-
## Reference-driven quality
|
|
25
|
-
|
|
26
|
-
Quality remains disabled by default. A story must declare a trusted reference, candidate artifacts, and a rubric:
|
|
27
|
-
|
|
28
|
-
```yaml
|
|
29
|
-
quality:
|
|
30
|
-
reference: { name: approved-home, source: design/home.png, kind: file }
|
|
31
|
-
candidate: { kind: screenshots, paths: [.yoke/proof/STORY-1/home.png] }
|
|
32
|
-
rubric: Match the approved layout, hierarchy, spacing, and states.
|
|
33
|
-
policy: blocking
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Project defaults can bound critic and repair work:
|
|
37
|
-
|
|
38
|
-
```yaml
|
|
39
|
-
quality:
|
|
40
|
-
enabled: false
|
|
41
|
-
policy: blocking
|
|
42
|
-
maxRounds: 3
|
|
43
|
-
maxMinutes: 60
|
|
44
|
-
consistencyChecks: 2
|
|
45
|
-
maxParallelCandidates: 2
|
|
46
|
-
critic: { agent: codex, model: gpt-5.6-sol } # model required for --candidates
|
|
47
|
-
repair: { agent: claude }
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Enable it for one run with:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
yoke loop run . --quality
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
`consistencyChecks` is fixed at `2`: Yoke runs the swapped-label pair needed to detect identity-sensitive critic output. Advisory mode records both verdicts without blocking; blocking mode permits bounded repairs and reruns all mechanical gates.
|
|
57
|
-
|
|
58
|
-
## Cleanup behavior
|
|
59
|
-
|
|
60
|
-
`yoke loop cleanup` now retains Yoke-created worktrees by default so failed candidates remain inspectable. Remove them explicitly when no longer needed:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
yoke loop cleanup . --remove-worktrees
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Cleanup still reaps only provider processes recorded for the current project and removes stale loop locks. It never kills providers by machine-wide process name.
|
|
67
|
-
|
|
68
|
-
## Review verdicts
|
|
69
|
-
|
|
70
|
-
Review verdict files now require `schemaVersion: 1` and provenance containing the provider, provider-reported model, review role, prompt version, and permission profile. Custom reviewer integrations must emit the contract printed in the reviewer prompt. Legacy verdict files without this envelope fail closed.
|
|
1
|
+
# Migrating to Yoke 1.4
|
|
2
|
+
|
|
3
|
+
Yoke 1.4 adds dependency-aware parallel workers, isolated candidate selection, and a reference-driven quality gauntlet. Existing projects remain serial and skip quality comparison unless you opt in.
|
|
4
|
+
|
|
5
|
+
Upgrade and refresh generated harness files:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @hecer/yoke@1.4.0
|
|
9
|
+
yoke retrofit .
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Parallel execution
|
|
13
|
+
|
|
14
|
+
Run dependency-ready stories concurrently with an explicit worker limit:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
yoke loop run . --isolate --parallel=3
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Parallel runs use isolated worktrees, leased claims, and a FIFO integration queue. Every candidate must pass its worker gates and the merged result must pass the project gates again. Adaptive routing is disabled during parallel and multi-candidate runs so each worker has one auditable provider identity.
|
|
21
|
+
|
|
22
|
+
Use `--candidates=N` to produce and mechanically gate multiple implementations before an identity-blind comparison selects the winner. Candidate mode supports up to five candidates.
|
|
23
|
+
|
|
24
|
+
## Reference-driven quality
|
|
25
|
+
|
|
26
|
+
Quality remains disabled by default. A story must declare a trusted reference, candidate artifacts, and a rubric:
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
quality:
|
|
30
|
+
reference: { name: approved-home, source: design/home.png, kind: file }
|
|
31
|
+
candidate: { kind: screenshots, paths: [.yoke/proof/STORY-1/home.png] }
|
|
32
|
+
rubric: Match the approved layout, hierarchy, spacing, and states.
|
|
33
|
+
policy: blocking
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Project defaults can bound critic and repair work:
|
|
37
|
+
|
|
38
|
+
```yaml
|
|
39
|
+
quality:
|
|
40
|
+
enabled: false
|
|
41
|
+
policy: blocking
|
|
42
|
+
maxRounds: 3
|
|
43
|
+
maxMinutes: 60
|
|
44
|
+
consistencyChecks: 2
|
|
45
|
+
maxParallelCandidates: 2
|
|
46
|
+
critic: { agent: codex, model: gpt-5.6-sol } # model required for --candidates
|
|
47
|
+
repair: { agent: claude }
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Enable it for one run with:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
yoke loop run . --quality
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`consistencyChecks` is fixed at `2`: Yoke runs the swapped-label pair needed to detect identity-sensitive critic output. Advisory mode records both verdicts without blocking; blocking mode permits bounded repairs and reruns all mechanical gates.
|
|
57
|
+
|
|
58
|
+
## Cleanup behavior
|
|
59
|
+
|
|
60
|
+
`yoke loop cleanup` now retains Yoke-created worktrees by default so failed candidates remain inspectable. Remove them explicitly when no longer needed:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
yoke loop cleanup . --remove-worktrees
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Cleanup still reaps only provider processes recorded for the current project and removes stale loop locks. It never kills providers by machine-wide process name.
|
|
67
|
+
|
|
68
|
+
## Review verdicts
|
|
69
|
+
|
|
70
|
+
Review verdict files now require `schemaVersion: 1` and provenance containing the provider, provider-reported model, review role, prompt version, and permission profile. Custom reviewer integrations must emit the contract printed in the reviewer prompt. Legacy verdict files without this envelope fail closed.
|
package/docs/PUBLISHING.md
CHANGED
|
@@ -1,91 +1,114 @@
|
|
|
1
|
-
# Publishing channels — status & playbook
|
|
2
|
-
|
|
3
|
-
Where Yoke is published, and how each channel gets updated. (Reviewed 2026-08-20.)
|
|
4
|
-
|
|
5
|
-
## Live
|
|
6
|
-
|
|
7
|
-
| Channel | How | Update path |
|
|
8
|
-
|---|---|---|
|
|
9
|
-
| **npm** — [`@hecer/yoke`](https://www.npmjs.com/package/@hecer/yoke) |
|
|
10
|
-
| **GitHub** — [HECer/yoke](https://github.com/HECer/yoke) | push + tag + GitHub Release | every release |
|
|
11
|
-
| **Claude Code plugin (self-marketplace)** | `.claude-plugin/plugin.json` + `marketplace.json` in this repo; users: `/plugin marketplace add HECer/yoke` → `/plugin install yoke@yoke` | bump `version` in `plugin.json` |
|
|
12
|
-
| **Gemini CLI extension** | `gemini-extension.json` + `GEMINI-EXTENSION.md` at repo root; users: `gemini extensions install https://github.com/HECer/yoke` | bump `version` in the manifest |
|
|
13
|
-
| **Codex project skills** | `npx @hecer/yoke setup .` writes the canon to `.agents/skills/` plus native Codex config/hooks; `.codex-plugin/plugin.json` is bundled for plugin-capable hosts | every npm release |
|
|
14
|
-
|
|
15
|
-
## GitHub release (required, not just a tag)
|
|
16
|
-
|
|
17
|
-
Before the release commit, update every user-facing version and README statistic, then require the
|
|
18
|
-
same checks npm will run:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm run docs:update
|
|
22
|
-
npm run docs:check
|
|
23
|
-
npm run prepublishOnly
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
`docs:update` synchronizes the README's package version, test count, skill count, and supported
|
|
27
|
-
agents from `package.json`, Vitest discovery, and `canon/manifest.yaml`. The version must also be
|
|
28
|
-
kept in sync in `package-lock.json`, `canon/manifest.yaml`, `.claude-plugin/plugin.json`,
|
|
29
|
-
`.codex-plugin/plugin.json`, and `gemini-extension.json`.
|
|
30
|
-
|
|
31
|
-
A pushed tag appears under **Tags**, but GitHub only shows an entry under **Releases** after a
|
|
32
|
-
release object is created. Use this idempotent check after the version commit reaches `main`:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
set -euo pipefail
|
|
36
|
-
VERSION=1.6.
|
|
37
|
-
TARGET=$(git rev-parse HEAD)
|
|
38
|
-
git fetch --tags origin
|
|
39
|
-
|
|
40
|
-
REMOTE=$(git ls-remote origin "refs/tags/v$VERSION^{}" | awk 'NR == 1 { print $1 }')
|
|
41
|
-
if [ -z "$REMOTE" ]; then
|
|
42
|
-
REMOTE=$(git ls-remote origin "refs/tags/v$VERSION" | awk 'NR == 1 { print $1 }')
|
|
43
|
-
fi
|
|
44
|
-
if [ -n "$REMOTE" ] && [ "$REMOTE" != "$TARGET" ]; then
|
|
45
|
-
echo "origin/v$VERSION already points at a different commit" >&2
|
|
46
|
-
exit 1
|
|
47
|
-
fi
|
|
48
|
-
|
|
49
|
-
if git rev-parse -q --verify "refs/tags/v$VERSION" >/dev/null; then
|
|
50
|
-
test "$(git rev-list -n 1 "v$VERSION")" = "$TARGET" || {
|
|
51
|
-
echo "v$VERSION already points at a different commit" >&2
|
|
52
|
-
exit 1
|
|
53
|
-
}
|
|
54
|
-
else
|
|
55
|
-
git tag "v$VERSION"
|
|
56
|
-
fi
|
|
57
|
-
git push origin "refs/tags/v$VERSION"
|
|
58
|
-
gh release view "v$VERSION" >/dev/null 2>&1 || \
|
|
59
|
-
gh release create "v$VERSION" --title "Yoke $VERSION" --generate-notes
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Verify both surfaces before publishing npm: `gh release view "v$VERSION"` and
|
|
63
|
-
`npm view @hecer/yoke version`.
|
|
64
|
-
|
|
65
|
-
##
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
1
|
+
# Publishing channels — status & playbook
|
|
2
|
+
|
|
3
|
+
Where Yoke is published, and how each channel gets updated. (Reviewed 2026-08-20.)
|
|
4
|
+
|
|
5
|
+
## Live
|
|
6
|
+
|
|
7
|
+
| Channel | How | Update path |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| **npm** — [`@hecer/yoke`](https://www.npmjs.com/package/@hecer/yoke) | GitHub OIDC trusted publishing | every release |
|
|
10
|
+
| **GitHub** — [HECer/yoke](https://github.com/HECer/yoke) | push + tag + GitHub Release | every release |
|
|
11
|
+
| **Claude Code plugin (self-marketplace)** | `.claude-plugin/plugin.json` + `marketplace.json` in this repo; users: `/plugin marketplace add HECer/yoke` → `/plugin install yoke@yoke` | bump `version` in `plugin.json` |
|
|
12
|
+
| **Gemini CLI extension** | `gemini-extension.json` + `GEMINI-EXTENSION.md` at repo root; users: `gemini extensions install https://github.com/HECer/yoke` | bump `version` in the manifest |
|
|
13
|
+
| **Codex project skills** | `npx @hecer/yoke setup .` writes the canon to `.agents/skills/` plus native Codex config/hooks; `.codex-plugin/plugin.json` is bundled for plugin-capable hosts | every npm release |
|
|
14
|
+
|
|
15
|
+
## GitHub release (required, not just a tag)
|
|
16
|
+
|
|
17
|
+
Before the release commit, update every user-facing version and README statistic, then require the
|
|
18
|
+
same checks npm will run:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm run docs:update
|
|
22
|
+
npm run docs:check
|
|
23
|
+
npm run prepublishOnly
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`docs:update` synchronizes the README's package version, test count, skill count, and supported
|
|
27
|
+
agents from `package.json`, Vitest discovery, and `canon/manifest.yaml`. The version must also be
|
|
28
|
+
kept in sync in `package-lock.json`, `canon/manifest.yaml`, `.claude-plugin/plugin.json`,
|
|
29
|
+
`.codex-plugin/plugin.json`, and `gemini-extension.json`.
|
|
30
|
+
|
|
31
|
+
A pushed tag appears under **Tags**, but GitHub only shows an entry under **Releases** after a
|
|
32
|
+
release object is created. Use this idempotent check after the version commit reaches `main`:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
set -euo pipefail
|
|
36
|
+
VERSION=1.6.2
|
|
37
|
+
TARGET=$(git rev-parse HEAD)
|
|
38
|
+
git fetch --tags origin
|
|
39
|
+
|
|
40
|
+
REMOTE=$(git ls-remote origin "refs/tags/v$VERSION^{}" | awk 'NR == 1 { print $1 }')
|
|
41
|
+
if [ -z "$REMOTE" ]; then
|
|
42
|
+
REMOTE=$(git ls-remote origin "refs/tags/v$VERSION" | awk 'NR == 1 { print $1 }')
|
|
43
|
+
fi
|
|
44
|
+
if [ -n "$REMOTE" ] && [ "$REMOTE" != "$TARGET" ]; then
|
|
45
|
+
echo "origin/v$VERSION already points at a different commit" >&2
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
if git rev-parse -q --verify "refs/tags/v$VERSION" >/dev/null; then
|
|
50
|
+
test "$(git rev-list -n 1 "v$VERSION")" = "$TARGET" || {
|
|
51
|
+
echo "v$VERSION already points at a different commit" >&2
|
|
52
|
+
exit 1
|
|
53
|
+
}
|
|
54
|
+
else
|
|
55
|
+
git tag "v$VERSION"
|
|
56
|
+
fi
|
|
57
|
+
git push origin "refs/tags/v$VERSION"
|
|
58
|
+
gh release view "v$VERSION" >/dev/null 2>&1 || \
|
|
59
|
+
gh release create "v$VERSION" --title "Yoke $VERSION" --generate-notes
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Verify both surfaces before publishing npm: `gh release view "v$VERSION"` and
|
|
63
|
+
`npm view @hecer/yoke version`.
|
|
64
|
+
|
|
65
|
+
## npm trusted publishing
|
|
66
|
+
|
|
67
|
+
The `publish-npm.yml` workflow publishes a stable package automatically when a GitHub Release is
|
|
68
|
+
published. It checks out that exact tag, requires the tag to match the version in `package.json`,
|
|
69
|
+
reruns `prepublishOnly` through `npm publish`, and skips a version that already exists. GitHub OIDC
|
|
70
|
+
provides a short-lived publishing identity; no `NPM_TOKEN` repository secret is used. npm adds
|
|
71
|
+
provenance automatically for this public repository.
|
|
72
|
+
|
|
73
|
+
One package-owner setup step is required on npmjs.com under the `@hecer/yoke` package settings:
|
|
74
|
+
|
|
75
|
+
- Publisher: GitHub Actions
|
|
76
|
+
- Organization or user: `HECer`
|
|
77
|
+
- Repository: `yoke`
|
|
78
|
+
- Workflow filename: `publish-npm.yml`
|
|
79
|
+
- Environment: leave empty
|
|
80
|
+
- Allowed action: `npm publish`
|
|
81
|
+
|
|
82
|
+
After the trusted publisher exists, the next GitHub Release publishes automatically. To publish an
|
|
83
|
+
already-created release such as `v1.6.1`, run the **Publish npm** workflow manually and provide that
|
|
84
|
+
existing tag. The workflow refuses tags without a published GitHub Release and refuses tag/version
|
|
85
|
+
mismatches. After the first successful OIDC publish, disable traditional token publishing and revoke
|
|
86
|
+
obsolete automation tokens in npm package settings.
|
|
87
|
+
|
|
88
|
+
## Submitted / pending
|
|
89
|
+
|
|
90
|
+
| Channel | How | Status |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| **Gemini extensions gallery** (geminicli.com/extensions) | automatic daily crawl: needs `gemini-extension.json` at repo root + `gemini-cli-extension` repo topic — both done | wait for crawler |
|
|
93
|
+
| **Anthropic community plugin directory** (`claude-community`, surfaced in `/plugin > Discover`) | form at **platform.claude.com/plugins/submit** (Console account, Developer role; submit the public repo URL; `claude plugin validate` runs in their pipeline — passes locally). After approval: pinned to a commit SHA, CI auto-bumps on push, catalog syncs nightly | **needs a human login** — see below |
|
|
94
|
+
|
|
95
|
+
### Anthropic directory submission (manual step)
|
|
96
|
+
|
|
97
|
+
1. Log in at https://platform.claude.com (free Console account is enough; role Developer+).
|
|
98
|
+
2. Open https://platform.claude.com/plugins/submit
|
|
99
|
+
3. Submit the public repo: `https://github.com/HECer/yoke`
|
|
100
|
+
4. Suggested description: *"Cross-agent coding harness: one curated skill canon (TDD,
|
|
101
|
+
brainstorming → spec → plan, systematic debugging, cross-model review, design
|
|
102
|
+
verification) plus mechanical safety gates and an autonomous loop via the yoke CLI."*
|
|
103
|
+
5. Category: development. Plugin name (immutable): `yoke`.
|
|
104
|
+
|
|
105
|
+
## Worth doing later (community lists, PR/issue-based)
|
|
106
|
+
|
|
107
|
+
- **awesome-claude-code** (hesreallyhim) — issue-form only, explicitly human-submitted, no PRs.
|
|
108
|
+
- **ComposioHQ/awesome-claude-plugins** — PR per template (high merge latency).
|
|
109
|
+
- **davila7/claude-code-templates** (aitmpl.com) — PR per CONTRIBUTING.md.
|
|
110
|
+
- **Codex plugin directory** — public directory submission remains a separate channel. Codex
|
|
111
|
+
users do not need it: the npm setup path installs native project skills deterministically.
|
|
112
|
+
- Auto-crawled directories (crossaitools.com etc.) pick the repo up on their own once the
|
|
113
|
+
marketplace manifest exists.
|
|
114
|
+
- Launch channels (Product Hunt, Show HN, r/ClaudeAI, r/ClaudeCode) — deliberate, human-led.
|