@hecer/yoke 1.5.1 → 1.6.0
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 +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +29 -14
- package/README.md +56 -35
- package/canon/context/GLOSSARY.md +11 -0
- package/canon/manifest.yaml +36 -30
- package/canon/skills/ATTRIBUTION.md +28 -0
- package/canon/skills/codebase-design/DEEPENING.md +15 -0
- package/canon/skills/codebase-design/DESIGN-IT-TWICE.md +12 -0
- package/canon/skills/codebase-design/SKILL.md +39 -0
- package/canon/skills/document-release/SKILL.md +5 -0
- package/canon/skills/domain-modeling/ADR-FORMAT.md +19 -0
- package/canon/skills/domain-modeling/CONTEXT-FORMAT.md +39 -0
- package/canon/skills/domain-modeling/SKILL.md +35 -0
- package/canon/skills/no-ai-slop/SKILL.md +103 -0
- package/canon/skills/no-ai-slop/eval.md +43 -0
- package/canon/skills/resolving-merge-conflicts/SKILL.md +18 -0
- package/canon/skills/writing-for-agents/SKILL-MECHANICS.md +27 -0
- package/canon/skills/writing-for-agents/SKILL.md +42 -0
- package/dist/canon/manifest.js +2 -0
- package/dist/canon/skill-package.js +113 -0
- package/dist/canon/validate.js +16 -1
- package/dist/context/command.js +4 -1
- package/dist/context/context.js +6 -0
- package/dist/loop/dispatcher.js +1 -1
- package/dist/loop/loop.js +26 -0
- package/dist/loop/parallel-command.js +3 -0
- package/dist/loop/run-command.js +11 -0
- package/dist/loop/watchdog.js +28 -11
- package/dist/loop/worker.js +11 -0
- package/dist/retrofit/apply.js +22 -7
- package/dist/retrofit/command.js +4 -1
- package/dist/retrofit/config.js +4 -0
- package/dist/retrofit/context-actions.js +1 -1
- package/dist/retrofit/detect.js +2 -0
- package/dist/retrofit/planners/claude.js +2 -6
- package/dist/retrofit/planners/codex.js +3 -7
- package/dist/retrofit/planners/gemini.js +11 -1
- package/dist/retrofit/report.js +5 -0
- package/dist/retrofit/skill-actions.js +66 -0
- package/dist/retrofit/ui-detect.js +83 -0
- package/dist/scan/gate.js +36 -0
- package/docs/PUBLISHING.md +2 -2
- package/docs/superpowers/plans/2026-08-20-automatic-ui-design-gate.md +59 -0
- package/docs/superpowers/plans/2026-08-20-capability-skills-and-context.md +51 -0
- package/docs/superpowers/plans/2026-08-20-complete-skill-packages-and-invocation.md +59 -0
- package/docs/superpowers/plans/2026-08-20-windows-reliability-and-release.md +67 -0
- package/docs/superpowers/specs/2026-08-20-skill-capabilities-and-reliability-design.md +391 -0
- package/gemini-extension.json +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Windows Reliability and 1.6.0 Release Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan.
|
|
4
|
+
|
|
5
|
+
**Goal:** Make provider-process termination and cleanup reliable under Windows suite load, then document, package, and publish the verified 1.6.0 release.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Preserve scoped PID ownership and fail-closed records. Treat `taskkill` success as a termination request, then confirm that the recorded PID is gone with a bounded wait before removing ownership evidence or allowing cleanup. Release only one commit through the documented GitHub and npm channels.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** Node child processes, Windows `taskkill`, Vitest, npm, GitHub CLI, Git.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Task 1: Reproduce and pin the Windows race
|
|
14
|
+
|
|
15
|
+
**Files:** `tests/agents/provider-process.test.ts`, `tests/agents/provider-process-record-failure.test.ts`, `tests/loop/watchdog.test.ts`
|
|
16
|
+
|
|
17
|
+
1. Record the isolated baseline: both provider-process files pass together, establishing that the failure depends on suite load rather than basic semantics.
|
|
18
|
+
2. Run the affected files repeatedly and run the full suite with verbose failure output. Capture whether time is spent before `close`, during `taskkill`, or in temporary-directory removal.
|
|
19
|
+
3. Add a failing watchdog unit test where `taskkill` returns zero while the injected liveness probe remains true for two polls; termination must not yet be confirmed.
|
|
20
|
+
4. Add a failing provider test that completion after cancellation leaves neither a live recorded PID nor a removable-directory race.
|
|
21
|
+
|
|
22
|
+
## Task 2: Confirm termination before releasing ownership
|
|
23
|
+
|
|
24
|
+
**Files:** `src/loop/watchdog.ts`, `src/agents/process.ts`, `tests/loop/watchdog.test.ts`, `tests/agents/provider-process.test.ts`
|
|
25
|
+
|
|
26
|
+
1. Extend `killProcessTreeForCleanup` on Windows with an injectable liveness probe and bounded 25 ms polling after successful `taskkill`.
|
|
27
|
+
2. Return `true` only when the PID is confirmed absent; return `false` when the bounded confirmation expires. Keep POSIX process-group behavior unchanged.
|
|
28
|
+
3. In `startProviderProcess`, preserve the ownership record whenever confirmation is false; remove it only on natural close without requested termination or confirmed termination.
|
|
29
|
+
4. Ensure stdin is closed before the first termination request and force escalation remains bounded and PID-scoped.
|
|
30
|
+
5. Run watchdog and provider-process tests ten times. Do not add a process-name kill or unconditional record deletion.
|
|
31
|
+
|
|
32
|
+
## Task 3: Run the complete quality ladder
|
|
33
|
+
|
|
34
|
+
**Files:** all changed source and tests
|
|
35
|
+
|
|
36
|
+
1. Run focused Canon, Retrofit, context, scan, loop, and agent suites.
|
|
37
|
+
2. Run `rtk npm run lint` and `rtk npm run yoke -- validate canon`.
|
|
38
|
+
3. Run `rtk npm test` at least twice on Windows and check for remaining `yoke-provider-*` temporary directories or owned provider processes after each run.
|
|
39
|
+
4. Fix only attributable failures and repeat the narrowest failing test before returning to the full suite.
|
|
40
|
+
|
|
41
|
+
## Task 4: Update release documentation with the new prose skills
|
|
42
|
+
|
|
43
|
+
**Files:** `README.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `docs/PUBLISHING.md`
|
|
44
|
+
|
|
45
|
+
1. Update README behavior, examples, skill count/table, complete-package installation, invocation policy, `unslop-ui` versus `no-ai-slop`, UI auto detection, and glossary context.
|
|
46
|
+
2. Document package resources and invocation-policy authoring in CONTRIBUTING; add a 1.6.0 changelog entry and only adjust publishing guidance when the actual workflow changed.
|
|
47
|
+
3. Run `no-ai-slop` Detect mode over changed prose, make only supported voice-preserving edits, then run the global read-only provenance audit.
|
|
48
|
+
4. Run `rtk npm run docs:update` and `rtk npm run docs:check`.
|
|
49
|
+
|
|
50
|
+
## Task 5: Synchronize and verify 1.6.0 metadata
|
|
51
|
+
|
|
52
|
+
**Files:** `package.json`, `package-lock.json`, `canon/manifest.yaml`, `.claude-plugin/plugin.json`, `.codex-plugin/plugin.json`, `gemini-extension.json`, generated README metadata
|
|
53
|
+
|
|
54
|
+
1. Set every documented release field to `1.6.0` and regenerate lock and documentation metadata through project scripts.
|
|
55
|
+
2. Run `rtk npm run prepublishOnly` and inspect `npm pack --dry-run` output for required skill resources, especially `no-ai-slop/eval.md`.
|
|
56
|
+
3. Review `rtk git diff --check`, `rtk git status`, and the release diff; exclude `.omo/` and unrelated user files.
|
|
57
|
+
4. Commit the verified implementation and metadata on `main`.
|
|
58
|
+
|
|
59
|
+
## Task 6: Publish and verify both channels
|
|
60
|
+
|
|
61
|
+
**Files:** no further source edits after the release commit
|
|
62
|
+
|
|
63
|
+
1. Push `main`, create annotated tag `v1.6.0` at the verified commit, and push the tag.
|
|
64
|
+
2. Create the GitHub Release from that tag and verify its URL and commit.
|
|
65
|
+
3. Publish `@hecer/yoke@1.6.0` to npm. If npm alone requires an operator OTP, stop that channel and report it precisely.
|
|
66
|
+
4. Verify `git ls-remote`, the GitHub Release, `npm view @hecer/yoke version`, and package contents all resolve to 1.6.0.
|
|
67
|
+
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
# Yoke skill capabilities and reliability design
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-08-20
|
|
4
|
+
**Target release:** 1.6.0
|
|
5
|
+
**Status:** Approved design, awaiting written-spec review
|
|
6
|
+
|
|
7
|
+
## Goal
|
|
8
|
+
|
|
9
|
+
Yoke 1.6.0 will improve how skills are packaged, selected, and applied without removing an
|
|
10
|
+
existing capability or changing existing projects silently. The release will add a writing
|
|
11
|
+
quality skill, stronger domain and codebase design guidance, automatic UI quality checks for
|
|
12
|
+
detected UI projects, and a focused fix for the Windows provider-process test failures.
|
|
13
|
+
|
|
14
|
+
The work is split into independently verified layers. A layer may proceed only after its focused
|
|
15
|
+
tests pass. Release checks cover the integrated result.
|
|
16
|
+
|
|
17
|
+
## User outcomes
|
|
18
|
+
|
|
19
|
+
1. A skill can contain references, templates, assets, and scripts instead of being limited to one
|
|
20
|
+
`SKILL.md` file.
|
|
21
|
+
2. Skill authors can state whether a skill may be selected automatically or must be started by the
|
|
22
|
+
user.
|
|
23
|
+
3. Claude, Codex, and Gemini receive the closest native form of the same Canon policy.
|
|
24
|
+
4. Writers can invoke `no-ai-slop` to edit or inspect prose while keeping their meaning and voice.
|
|
25
|
+
5. UI projects receive `unslop-ui` checks automatically after Yoke detects a supported UI stack,
|
|
26
|
+
unless the project disables or adjusts the check.
|
|
27
|
+
6. Agents use a shared domain vocabulary and design code through small, deliberate interfaces.
|
|
28
|
+
7. Merge conflicts are resolved from the intent of both changes and verified before completion.
|
|
29
|
+
8. Windows provider processes stop and release temporary directories within deterministic test
|
|
30
|
+
bounds.
|
|
31
|
+
9. Users can install Yoke 1.6.0 through every existing release channel.
|
|
32
|
+
|
|
33
|
+
## Non-goals
|
|
34
|
+
|
|
35
|
+
- Importing every skill from `mattpocock/skills`.
|
|
36
|
+
- Adding an automatic upstream synchronization job.
|
|
37
|
+
- Claiming that prose was written by AI or assigning an AI probability score.
|
|
38
|
+
- Making qualitative prose style a build-blocking gate.
|
|
39
|
+
- Replacing Yoke's existing TDD, debugging, review, planning, or release skills.
|
|
40
|
+
- Redesigning the provider-process subsystem beyond the reproduced Windows failure.
|
|
41
|
+
- Changing the behavior of an installed project until the user runs a 1.6.0 setup, retrofit, or
|
|
42
|
+
configuration command.
|
|
43
|
+
|
|
44
|
+
## Layer 1: complete skill packages
|
|
45
|
+
|
|
46
|
+
### Canon structure
|
|
47
|
+
|
|
48
|
+
Each manifest entry continues to point at a directory containing one required `SKILL.md`. Any
|
|
49
|
+
regular file below that directory belongs to the skill package. Nested directories are allowed.
|
|
50
|
+
Symbolic links are rejected so a package cannot escape its Canon directory.
|
|
51
|
+
|
|
52
|
+
The skill entry gains an invocation field:
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
- id: no-ai-slop
|
|
56
|
+
path: skills/no-ai-slop
|
|
57
|
+
kind: methodology
|
|
58
|
+
invocation: auto
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Valid values are `auto` and `manual`. Omitted values resolve to `auto`, which preserves the current
|
|
62
|
+
manifest behavior. Before release, every Canon entry receives an explicit value so its intent is
|
|
63
|
+
reviewable.
|
|
64
|
+
|
|
65
|
+
### Package enumeration
|
|
66
|
+
|
|
67
|
+
One shared package enumerator will serve validation and all three Retrofit planners. It will:
|
|
68
|
+
|
|
69
|
+
1. Resolve the declared directory below the Canon root.
|
|
70
|
+
2. Walk entries in stable lexical order.
|
|
71
|
+
3. Reject symbolic links, sockets, devices, and paths outside the declared directory.
|
|
72
|
+
4. Return relative POSIX-style paths plus file bytes and whether the source file is executable.
|
|
73
|
+
5. Include dotfiles inside the skill package.
|
|
74
|
+
|
|
75
|
+
The action model will accept text or byte content and an optional executable flag. Existing text
|
|
76
|
+
actions remain valid. On POSIX systems, executable package files are written with user execution
|
|
77
|
+
permission. Windows ignores that flag. Existing backup, preserve-block, and idempotency behavior
|
|
78
|
+
continues to apply per generated file.
|
|
79
|
+
|
|
80
|
+
### Validation
|
|
81
|
+
|
|
82
|
+
`yoke validate canon` will fail when:
|
|
83
|
+
|
|
84
|
+
- `SKILL.md` is missing or is not a regular file;
|
|
85
|
+
- frontmatter lacks `name` or `description`;
|
|
86
|
+
- `invocation` has an unknown value;
|
|
87
|
+
- a package contains a symbolic link or unsupported file type;
|
|
88
|
+
- a relative Markdown reference points to a missing package file or escapes the package;
|
|
89
|
+
- two package files would map to the same target path.
|
|
90
|
+
|
|
91
|
+
External HTTP links are not fetched during validation. Markdown anchors are not validated. These
|
|
92
|
+
checks would make local validation depend on the network without protecting Retrofit integrity.
|
|
93
|
+
|
|
94
|
+
### Provider adapters
|
|
95
|
+
|
|
96
|
+
- **Claude:** Copy the complete package to `.claude/skills/<id>/`. For manual skills, emit
|
|
97
|
+
`disable-model-invocation: true` in generated frontmatter. Canon source remains provider-neutral.
|
|
98
|
+
- **Codex:** Copy the complete package to `.agents/skills/<id>/`. Generate or merge
|
|
99
|
+
`agents/openai.yaml` with `policy.allow_implicit_invocation` derived from the Canon invocation
|
|
100
|
+
value. If a Canon package already provides that file, validation requires it to agree with the
|
|
101
|
+
manifest.
|
|
102
|
+
- **Gemini:** Copy package resources next to the generated command and keep one command per skill.
|
|
103
|
+
Manual skills remain command-only. Auto skills are listed in a short generated context index so
|
|
104
|
+
Gemini can select the relevant command without loading every skill body into every turn.
|
|
105
|
+
|
|
106
|
+
`auto` means eligible for automatic selection where the provider supports it. It does not promise
|
|
107
|
+
identical provider internals. `manual` is strict: Yoke must not advertise that skill for automatic
|
|
108
|
+
selection.
|
|
109
|
+
|
|
110
|
+
## Layer 2: new and adapted capabilities
|
|
111
|
+
|
|
112
|
+
### `no-ai-slop`
|
|
113
|
+
|
|
114
|
+
Yoke will add an adapted copy of Peter Yang's MIT-licensed `no-ai-slop` package:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
canon/skills/no-ai-slop/
|
|
118
|
+
├── SKILL.md
|
|
119
|
+
└── eval.md
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The package keeps its two modes:
|
|
123
|
+
|
|
124
|
+
- **Edit:** Make the minimum useful change, preserve the writer's meaning and voice, then report
|
|
125
|
+
what changed.
|
|
126
|
+
- **Detect:** Name each observed pattern, quote the affected passage, and suggest a short fix
|
|
127
|
+
without rewriting, scoring, or guessing authorship.
|
|
128
|
+
|
|
129
|
+
Yoke will preserve established technical terms and product names when they are precise. For
|
|
130
|
+
example, "coding harness" is part of Yoke's product language and must not be replaced merely
|
|
131
|
+
because "harness" can be empty marketing language elsewhere. The adaptation will document this
|
|
132
|
+
domain-term exception and otherwise retain the upstream workflow and evaluation checklist.
|
|
133
|
+
|
|
134
|
+
The skill is `auto`. Its description limits automatic selection to prose editing or inspection.
|
|
135
|
+
Code-only work does not trigger it. `document-release`, documentation-focused roles, and Yoke's
|
|
136
|
+
release-writing instructions will point to its evaluation checklist. Prose style remains advisory.
|
|
137
|
+
|
|
138
|
+
Attribution will name Peter Yang, link the source repository, state the MIT license, and describe
|
|
139
|
+
the Yoke-specific adaptation. The imported package and the completed local package will receive
|
|
140
|
+
read-only provenance audits. Missing provenance or watermark signals will be reported as unknown,
|
|
141
|
+
never as evidence of human authorship.
|
|
142
|
+
|
|
143
|
+
### `domain-modeling`
|
|
144
|
+
|
|
145
|
+
This `auto` skill will sharpen project terminology and record it in durable context. It will:
|
|
146
|
+
|
|
147
|
+
- distinguish reading an existing glossary from changing the domain model;
|
|
148
|
+
- challenge overloaded or contradictory terms;
|
|
149
|
+
- test relationships with concrete scenarios;
|
|
150
|
+
- compare stated behavior with the code;
|
|
151
|
+
- update a glossary when a term is settled;
|
|
152
|
+
- create an ADR only for a hard-to-reverse choice that is surprising without context and reflects
|
|
153
|
+
a real trade-off.
|
|
154
|
+
|
|
155
|
+
Yoke keeps `.yoke/context/` as the source of truth. The existing `PROJECT.md`, `DECISIONS.md`, and
|
|
156
|
+
`KNOWLEDGE.md` files remain. The context layer gains `GLOSSARY.md` and optional `CONTEXT-MAP.md` for
|
|
157
|
+
projects with more than one domain context. `maintaining-context` owns persistence; this skill owns
|
|
158
|
+
the quality of domain language and ADR decisions.
|
|
159
|
+
|
|
160
|
+
### `codebase-design`
|
|
161
|
+
|
|
162
|
+
This `auto` reference skill will add a stable vocabulary for module, interface, implementation,
|
|
163
|
+
seam, adapter, depth, locality, and caller value. It will guide design toward:
|
|
164
|
+
|
|
165
|
+
- more behavior behind smaller interfaces;
|
|
166
|
+
- tests through the public interface;
|
|
167
|
+
- injected dependencies at real seams;
|
|
168
|
+
- a new seam only when at least two adapters or another demonstrated variation exists;
|
|
169
|
+
- designs that keep change and verification local.
|
|
170
|
+
|
|
171
|
+
The skill informs planning, TDD, architecture review, and code review. It does not mandate a
|
|
172
|
+
refactor unrelated to the current task.
|
|
173
|
+
|
|
174
|
+
### `writing-for-agents`
|
|
175
|
+
|
|
176
|
+
This `auto` reference skill will make instructions easier for coding agents to execute without
|
|
177
|
+
weakening their technical content. It will favor explicit triggers, observable outcomes, concrete
|
|
178
|
+
paths and commands, bounded context, and examples that test the intended behavior. It will also
|
|
179
|
+
separate durable rules from task-specific guidance and remove duplicated or contradictory
|
|
180
|
+
instructions.
|
|
181
|
+
|
|
182
|
+
The skill applies to agent-facing Markdown such as `AGENTS.md`, skills, role prompts, and workflow
|
|
183
|
+
documentation. It complements `no-ai-slop`: `writing-for-agents` checks executability and context
|
|
184
|
+
economy, while `no-ai-slop` checks prose habits and preserves the author's voice. Neither skill may
|
|
185
|
+
silently discard a safety rule, acceptance criterion, or precise domain term.
|
|
186
|
+
|
|
187
|
+
### `resolving-merge-conflicts`
|
|
188
|
+
|
|
189
|
+
This `auto` skill triggers only during an in-progress merge or rebase conflict. It will inspect the
|
|
190
|
+
current operation, trace both sides to commits and available issue or spec evidence, preserve both
|
|
191
|
+
intents where compatible, and avoid inventing new behavior. It then runs discovered project checks
|
|
192
|
+
and completes the current merge or rebase. It will not abort an operation unless the user requests
|
|
193
|
+
that destructive reversal explicitly.
|
|
194
|
+
|
|
195
|
+
## Layer 3: automatic UI quality checks
|
|
196
|
+
|
|
197
|
+
### Configuration
|
|
198
|
+
|
|
199
|
+
The configuration gains:
|
|
200
|
+
|
|
201
|
+
```yaml
|
|
202
|
+
design:
|
|
203
|
+
mode: auto
|
|
204
|
+
max: 4
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
`mode` accepts `off`, `auto`, or `on`.
|
|
208
|
+
|
|
209
|
+
- `off` skips the integrated design scan.
|
|
210
|
+
- `auto` runs it only when Yoke detects a supported UI project.
|
|
211
|
+
- `on` runs it regardless of detection.
|
|
212
|
+
|
|
213
|
+
Missing configuration keeps current behavior and does not add a gate. `yoke new` and a 1.6.0
|
|
214
|
+
setup or retrofit write `mode: auto` only when detection succeeds. Users can change `max` or set
|
|
215
|
+
`mode: off` before running the loop.
|
|
216
|
+
|
|
217
|
+
### UI detection
|
|
218
|
+
|
|
219
|
+
Detection is deterministic and local. A project qualifies when at least one of these signals is
|
|
220
|
+
present:
|
|
221
|
+
|
|
222
|
+
- a framework dependency such as React, Next.js, Vue, Nuxt, Svelte, SvelteKit, Astro, Angular, or
|
|
223
|
+
a supported UI build plugin;
|
|
224
|
+
- a source file with `.tsx`, `.jsx`, `.vue`, `.svelte`, or `.astro` below a normal source root;
|
|
225
|
+
- an existing smoke-flow configuration.
|
|
226
|
+
|
|
227
|
+
Generated directories, dependencies, fixtures, and Yoke runtime directories are ignored. The
|
|
228
|
+
detector returns the evidence it used so setup output and tests can explain the decision.
|
|
229
|
+
|
|
230
|
+
### Gate behavior
|
|
231
|
+
|
|
232
|
+
The loop runs the existing design scanner as a named gate after ordinary verification and before
|
|
233
|
+
browser smoke flows. Failure output uses the existing bounded-preview and artifact rules. The
|
|
234
|
+
standalone `yoke design-scan` command remains unchanged.
|
|
235
|
+
|
|
236
|
+
The gate does not rewrite UI code. Its finding names and weighted score remain stable. A legitimate
|
|
237
|
+
design can raise the configured budget or disable the gate. Future per-rule suppression is outside
|
|
238
|
+
this release because no current use case requires another configuration format.
|
|
239
|
+
|
|
240
|
+
## Layer 4: Windows provider-process reliability
|
|
241
|
+
|
|
242
|
+
The existing failures must first be reproduced in focused tests. The diagnosis will distinguish:
|
|
243
|
+
|
|
244
|
+
- a child process that did not receive or honor termination;
|
|
245
|
+
- a parent that reports termination before the process tree exits;
|
|
246
|
+
- stdin or inherited handles that keep the child alive;
|
|
247
|
+
- Windows delaying directory release after process exit;
|
|
248
|
+
- a test timeout too short for the documented termination contract.
|
|
249
|
+
|
|
250
|
+
The fix must retain Yoke's ownership checks and fail-closed behavior. It may add bounded retries or
|
|
251
|
+
wait for confirmed process exit, but it may not kill by process-name pattern or remove a worktree
|
|
252
|
+
whose process ownership is uncertain.
|
|
253
|
+
|
|
254
|
+
Focused acceptance requires each affected test to pass repeatedly, including cleanup. The complete
|
|
255
|
+
suite must then pass without leftover provider processes or temporary directories.
|
|
256
|
+
|
|
257
|
+
## Data flow
|
|
258
|
+
|
|
259
|
+
```text
|
|
260
|
+
Canon manifest + complete skill directory
|
|
261
|
+
│
|
|
262
|
+
▼
|
|
263
|
+
validate and enumerate package
|
|
264
|
+
│
|
|
265
|
+
┌────────┼────────┐
|
|
266
|
+
▼ ▼ ▼
|
|
267
|
+
Claude Codex Gemini
|
|
268
|
+
package package command + resources
|
|
269
|
+
│ │ │
|
|
270
|
+
└────────┴────────┘
|
|
271
|
+
│
|
|
272
|
+
▼
|
|
273
|
+
project setup / retrofit
|
|
274
|
+
│
|
|
275
|
+
┌────────┴────────┐
|
|
276
|
+
▼ ▼
|
|
277
|
+
durable skills detected UI config
|
|
278
|
+
│ │
|
|
279
|
+
▼ ▼
|
|
280
|
+
interactive use loop design gate
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Error handling and compatibility
|
|
284
|
+
|
|
285
|
+
- Package validation fails before Retrofit writes any project file.
|
|
286
|
+
- Retrofit continues to plan all actions before applying them, so an invalid package cannot leave
|
|
287
|
+
a partial installation.
|
|
288
|
+
- Existing project files keep their backup and preserve-block behavior.
|
|
289
|
+
- A missing optional provider feature degrades to an explicit command and a documented warning.
|
|
290
|
+
- Existing manifests without `invocation` remain readable.
|
|
291
|
+
- Existing projects without `design` configuration keep their current verification behavior.
|
|
292
|
+
- No imported skill may run network commands during setup or Retrofit.
|
|
293
|
+
- New files are included in npm package checks and plugin manifests before release.
|
|
294
|
+
|
|
295
|
+
## Testing strategy
|
|
296
|
+
|
|
297
|
+
### Canon and package tests
|
|
298
|
+
|
|
299
|
+
- one-file skill remains valid;
|
|
300
|
+
- nested text and binary resources enumerate in stable order;
|
|
301
|
+
- executable metadata is preserved where supported;
|
|
302
|
+
- missing relative reference fails validation;
|
|
303
|
+
- external URL does not trigger a network request;
|
|
304
|
+
- path escape, symbolic link, and duplicate target fail closed;
|
|
305
|
+
- repeated Retrofit is idempotent.
|
|
306
|
+
|
|
307
|
+
### Provider tests
|
|
308
|
+
|
|
309
|
+
- Claude receives every package file and the correct manual frontmatter;
|
|
310
|
+
- Codex receives every package file and matching `agents/openai.yaml` policy;
|
|
311
|
+
- Gemini receives every package resource, command, and compact auto index entry;
|
|
312
|
+
- manual skills are not advertised for automatic selection;
|
|
313
|
+
- `no-ai-slop/eval.md` exists after all three Retrofit paths.
|
|
314
|
+
|
|
315
|
+
### Capability tests
|
|
316
|
+
|
|
317
|
+
- the manifest registers all five new skills;
|
|
318
|
+
- each skill has valid frontmatter and resolvable references;
|
|
319
|
+
- context initialization creates or safely introduces the glossary structure;
|
|
320
|
+
- existing context files remain unchanged unless their content requires an update;
|
|
321
|
+
- attribution covers every imported or adapted source.
|
|
322
|
+
|
|
323
|
+
### UI detection and gate tests
|
|
324
|
+
|
|
325
|
+
- supported dependencies and source files produce explained detection;
|
|
326
|
+
- non-UI TypeScript projects do not qualify;
|
|
327
|
+
- ignored directories and test fixtures do not qualify;
|
|
328
|
+
- missing design config preserves old behavior;
|
|
329
|
+
- `auto`, `on`, `off`, and custom budgets select the expected gate behavior;
|
|
330
|
+
- design failures use bounded output and preserve full artifacts.
|
|
331
|
+
|
|
332
|
+
### Windows tests
|
|
333
|
+
|
|
334
|
+
- targeted timeout, cancellation, and record-publication cases pass repeatedly;
|
|
335
|
+
- cleanup confirms process exit before removing directories;
|
|
336
|
+
- no broad process kill is introduced;
|
|
337
|
+
- the full suite passes on Windows.
|
|
338
|
+
|
|
339
|
+
### Release checks
|
|
340
|
+
|
|
341
|
+
The release requires:
|
|
342
|
+
|
|
343
|
+
```text
|
|
344
|
+
npm run lint
|
|
345
|
+
npm run yoke -- validate canon
|
|
346
|
+
npm test
|
|
347
|
+
npm run docs:update
|
|
348
|
+
npm run docs:check
|
|
349
|
+
npm run prepublishOnly
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
The focused suites run before the full suite so failures stay attributable.
|
|
353
|
+
|
|
354
|
+
## Documentation and release
|
|
355
|
+
|
|
356
|
+
README updates will explain complete skill packages, invocation modes, the difference between
|
|
357
|
+
`unslop-ui` and `no-ai-slop`, automatic UI detection, new context files, and the expanded skill
|
|
358
|
+
table. `CHANGELOG.md` will describe behavior changes and the default-preserving migration path.
|
|
359
|
+
`CONTRIBUTING.md` will document how to add package resources and choose an invocation mode.
|
|
360
|
+
|
|
361
|
+
The release version is 1.6.0 because the work adds user-facing capabilities without removing a
|
|
362
|
+
compatible interface. Version fields will be synchronized in the package, lockfile, Canon,
|
|
363
|
+
Claude plugin, Codex plugin, Gemini extension, and README metadata.
|
|
364
|
+
|
|
365
|
+
After checks pass, release actions are:
|
|
366
|
+
|
|
367
|
+
1. Commit the implementation and release metadata.
|
|
368
|
+
2. Push `main`.
|
|
369
|
+
3. Create and push `v1.6.0` at the verified release commit.
|
|
370
|
+
4. Create the GitHub Release.
|
|
371
|
+
5. Publish `@hecer/yoke@1.6.0` to npm.
|
|
372
|
+
6. Verify the GitHub release, remote tag, npm version, and packaged files.
|
|
373
|
+
|
|
374
|
+
If npm requires an interactive one-time password, implementation and GitHub publication may finish
|
|
375
|
+
first, but npm publication remains incomplete until the operator supplies the credential. Yoke
|
|
376
|
+
must report that state plainly rather than claiming the release is complete.
|
|
377
|
+
|
|
378
|
+
## Acceptance criteria
|
|
379
|
+
|
|
380
|
+
1. Existing one-file skills install exactly as before.
|
|
381
|
+
2. `no-ai-slop/SKILL.md` and `no-ai-slop/eval.md` install for Claude, Codex, and Gemini.
|
|
382
|
+
3. Every Canon skill has an explicit invocation policy and provider outputs reflect it.
|
|
383
|
+
4. New context, design, merge-resolution, and agent-writing skills are available without replacing
|
|
384
|
+
current workflow skills.
|
|
385
|
+
5. Detected UI projects configured by 1.6.0 run the design gate automatically; other projects do
|
|
386
|
+
not change behavior.
|
|
387
|
+
6. The reproduced Windows provider-process failures pass repeatedly and the full suite is green.
|
|
388
|
+
7. README, contributing guidance, changelog, attribution, package metadata, and plugin metadata
|
|
389
|
+
describe the delivered behavior accurately.
|
|
390
|
+
8. GitHub and npm both expose Yoke 1.6.0, unless npm is waiting only for an operator-provided OTP
|
|
391
|
+
that cannot be supplied through the active session.
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yoke",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Cross-agent coding harness: curated skill canon, mechanical safety gates, autonomous loop with proof artifacts. CLI: npm i -g @hecer/yoke",
|
|
5
5
|
"contextFileName": "GEMINI-EXTENSION.md"
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hecer/yoke",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "One harness, three agents, zero trust in \"done\" — cross-agent coding harness for Claude Code, Codex CLI, and Gemini CLI: one skill canon, mechanical safety gates, an autonomous loop with screenshot/video proofs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"gemini-extension.json",
|
|
15
15
|
"agents",
|
|
16
16
|
"hooks",
|
|
17
|
-
"bench/README.md",
|
|
18
|
-
"bench/output-compaction.mjs",
|
|
19
|
-
"bench/RESULTS.md",
|
|
17
|
+
"bench/README.md",
|
|
18
|
+
"bench/output-compaction.mjs",
|
|
19
|
+
"bench/RESULTS.md",
|
|
20
20
|
"bench/result-schema.mjs",
|
|
21
21
|
"bench/run.mjs",
|
|
22
22
|
"bench/run-large.mjs",
|