jhste-skills 0.3.3 → 0.3.5
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/CHANGELOG.md +23 -0
- package/README.ja.md +7 -0
- package/README.ko.md +7 -0
- package/README.md +7 -0
- package/README.zh.md +7 -0
- package/cli/sync-core.mjs +9 -5
- package/docs/CLI.md +4 -0
- package/package.json +1 -1
- package/scripts/docs-check-data.mjs +1 -1
- package/scripts/smoke/connect-scenarios.mjs +2 -2
- package/scripts/smoke/install-scenarios.mjs +29 -3
- package/scripts/smoke/mode-scenarios.mjs +2 -2
- package/skills/codebase-design/SKILL.md +1 -1
- package/skills/grill-me/SKILL.md +1 -1
- package/skills/grill-with-docs/SKILL.md +1 -1
- package/skills/grilling/SKILL.md +1 -1
- package/skills/improve-codebase-architecture/SKILL.md +1 -1
- package/skills/jhste-architecture-review/SKILL.md +1 -1
- package/skills/jhste-architecture-review/references/architecture-review.md +1 -2
- package/skills/jhste-code-quality/SKILL.md +1 -0
- package/skills/jhste-code-quality/references/code-quality.md +2 -2
- package/skills/jhste-crawler-automation/references/crawler-automation.md +1 -1
- package/skills/jhste-db-api-boundary/SKILL.md +3 -1
- package/skills/jhste-engineering-groundwork/SKILL.md +4 -2
- package/skills/jhste-long-running-work-loop/SKILL.md +143 -0
- package/skills/jhste-red-team-review/SKILL.md +3 -3
- package/skills/jhste-red-team-review/references/red-team-review.md +3 -0
- package/skills/to-issues/SKILL.md +1 -1
- package/skills/to-prd/SKILL.md +1 -1
- package/skills/triage/SKILL.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.5 - 2026-06-28
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Added `jhste-long-running-work-loop`, a narrow orchestration skill for multi-session and long-running work that preserves goals, phases, approval boundaries, resume points, and durable-state routing without replacing code-quality, PRD, issue, triage, or handoff workflows.
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- Updated smoke-test expected skill counts now that the bundled/core skill set includes the new long-running work loop skill.
|
|
10
|
+
|
|
11
|
+
### Validation
|
|
12
|
+
- `npm test` passed.
|
|
13
|
+
- `jhste-skills guard --scope changed --format text --fail-on error` passed with 0 warnings/errors.
|
|
14
|
+
|
|
15
|
+
## 0.3.4 - 2026-06-26
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Shifted groundwork and red-team review guidance away from fixed checklist axes and toward context-based failure-mode review of the changed execution path.
|
|
19
|
+
- Tightened DB/API and code-quality skill guidance around caller-appropriate response shapes, storage-backed invariants, authorization/data-isolation paths, and understandable failure behavior without turning those examples into a mandatory checklist.
|
|
20
|
+
- Clarified red-team review versus red-team questioning/interrogation triggers while preserving the red-team wording and intent.
|
|
21
|
+
- Clarified architecture, PRD, issue-slicing, and triage skill trigger boundaries to reduce accidental over-triggering.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- Added `sync`/`update --skills-only` to refresh installed skill files without touching repository profiles, bridge blocks, hooks, or deep-scan outputs.
|
|
25
|
+
|
|
3
26
|
## 0.3.3 - 2026-06-26
|
|
4
27
|
|
|
5
28
|
### Removed
|
package/README.ja.md
CHANGED
|
@@ -36,6 +36,7 @@ AI コーディングエージェントは高速ですが、失敗パターン
|
|
|
36
36
|
```text
|
|
37
37
|
non-trivial code change の前:
|
|
38
38
|
goal、premise、ownership boundary、data contract、failure path、SOLID-informed review lens を確認
|
|
39
|
+
固定 checklist を埋めるのではなく、changed execution path で本当に重要な failure mode を文脈に合わせて確認
|
|
39
40
|
|
|
40
41
|
編集中:
|
|
41
42
|
repo-local instructions を権威として扱う
|
|
@@ -107,6 +108,12 @@ changed-file guard を手動で実行するには:
|
|
|
107
108
|
jhste-skills guard --scope changed --format text --fail-on error
|
|
108
109
|
```
|
|
109
110
|
|
|
111
|
+
このリポジトリを最新化した後、プロジェクトの bridge、profile、hook、scan output には触れず、インストール済み skill ファイルだけを更新するには:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
jhste-skills update --yes --skills-only
|
|
115
|
+
```
|
|
116
|
+
|
|
110
117
|
任意で repo-wide advisory scan を実行するには:
|
|
111
118
|
|
|
112
119
|
```bash
|
package/README.ko.md
CHANGED
|
@@ -37,6 +37,7 @@ AI 코딩 에이전트는 빠르지만, 반복적으로 비슷한 방식으로
|
|
|
37
37
|
```text
|
|
38
38
|
non-trivial code change 전:
|
|
39
39
|
목표, 전제, ownership boundary, data contract, failure path, final behavior predicate, SOLID-informed review lens 확인
|
|
40
|
+
고정 체크리스트를 채우기보다 변경된 실행 경로에서 실제로 중요한 실패 모드를 맥락에 맞게 확인
|
|
40
41
|
|
|
41
42
|
수정 중:
|
|
42
43
|
repo-local instructions를 권위로 취급
|
|
@@ -108,6 +109,12 @@ npx jhste-skills install --skill-set core
|
|
|
108
109
|
jhste-skills guard --scope changed --format text --fail-on error
|
|
109
110
|
```
|
|
110
111
|
|
|
112
|
+
이 저장소를 최신으로 당긴 뒤 프로젝트 bridge, profile, hook, scan output은 건드리지 않고 설치된 skill 파일만 새로고침하려면:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
jhste-skills update --yes --skills-only
|
|
116
|
+
```
|
|
117
|
+
|
|
111
118
|
선택적으로 repo-wide advisory scan을 실행하려면:
|
|
112
119
|
|
|
113
120
|
```bash
|
package/README.md
CHANGED
|
@@ -37,6 +37,7 @@ AI coding agents are fast, but they fail in predictable ways:
|
|
|
37
37
|
```text
|
|
38
38
|
Before a non-trivial code change:
|
|
39
39
|
check the goal, premise, ownership boundary, data contract, failure path, final behavior predicates, and SOLID-informed review lens
|
|
40
|
+
identify the failure modes that matter for the changed execution path instead of filling out a fixed checklist
|
|
40
41
|
|
|
41
42
|
While editing:
|
|
42
43
|
treat repo-local instructions as the authority
|
|
@@ -108,6 +109,12 @@ To run the changed-file guard manually:
|
|
|
108
109
|
jhste-skills guard --scope changed --format text --fail-on error
|
|
109
110
|
```
|
|
110
111
|
|
|
112
|
+
To refresh only the installed skill files after pulling this repository, without touching a project bridge, profile, hook, or scan output:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
jhste-skills update --yes --skills-only
|
|
116
|
+
```
|
|
117
|
+
|
|
111
118
|
To run an optional repo-wide advisory scan:
|
|
112
119
|
|
|
113
120
|
```bash
|
package/README.zh.md
CHANGED
|
@@ -36,6 +36,7 @@ AI 编程代理很快,但经常以可预测的方式失败:
|
|
|
36
36
|
```text
|
|
37
37
|
在 non-trivial code change 前:
|
|
38
38
|
检查目标、前提、ownership boundary、data contract、failure path、SOLID-informed review lens
|
|
39
|
+
不填写固定 checklist,而是根据 changed execution path 找出真正重要的 failure mode
|
|
39
40
|
|
|
40
41
|
修改过程中:
|
|
41
42
|
将 repo-local instructions 视为权威
|
|
@@ -107,6 +108,12 @@ npx jhste-skills install --skill-set core
|
|
|
107
108
|
jhste-skills guard --scope changed --format text --fail-on error
|
|
108
109
|
```
|
|
109
110
|
|
|
111
|
+
拉取本仓库最新内容后,如果只想刷新已安装的 skill 文件,不触碰项目 bridge、profile、hook 或 scan output:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
jhste-skills update --yes --skills-only
|
|
115
|
+
```
|
|
116
|
+
|
|
110
117
|
选择性运行 repo-wide advisory scan:
|
|
111
118
|
|
|
112
119
|
```bash
|
package/cli/sync-core.mjs
CHANGED
|
@@ -22,11 +22,13 @@ function usage(command = 'sync') {
|
|
|
22
22
|
console.log(`jhste-skills ${command}
|
|
23
23
|
Usage:
|
|
24
24
|
jhste-skills ${command} [--repo <path>] [--skills-dir <path>] [--yes] [--force]
|
|
25
|
+
jhste-skills ${command} [--skills-only] [--skills-dir <path>] [--yes]
|
|
25
26
|
jhste-skills ${command} [--skill-set core|vendor|all] [--skip-hooks] [--no-bridge] [--allow-profile-overwrite]
|
|
26
27
|
Notes:
|
|
27
28
|
${command} reconciles installed skills and already-managed repo outputs using the current local jhste-skills source.
|
|
28
29
|
It does not self-update the jhste-skills source or run git pull automatically.
|
|
29
30
|
Installed skill directories are refreshed by default when they differ from the current source.
|
|
31
|
+
--skills-only refreshes installed skills without touching repo profile, bridge files, hooks, or deep-scan outputs.
|
|
30
32
|
--force refreshes generated/managed profiles; modified profiles need --force --allow-profile-overwrite.
|
|
31
33
|
Unmanaged skill directories require --allow-unmanaged-skill-overwrite.
|
|
32
34
|
`);
|
|
@@ -52,7 +54,7 @@ function normalizeSyncOptions(argv, cwd) {
|
|
|
52
54
|
const args = parseArgs(argv);
|
|
53
55
|
if (args.help || args.h) return { help: true, errors: [] };
|
|
54
56
|
const errors = [];
|
|
55
|
-
const supported = new Set(['repo', 'skills-dir', 'yes', 'y', 'force', 'skill-set', 'skip-hooks', 'no-bridge', 'allow-unmanaged-skill-overwrite', 'allow-profile-overwrite', 'help', 'h', '_']);
|
|
57
|
+
const supported = new Set(['repo', 'skills-dir', 'yes', 'y', 'force', 'skill-set', 'skills-only', 'skip-hooks', 'no-bridge', 'allow-unmanaged-skill-overwrite', 'allow-profile-overwrite', 'help', 'h', '_']);
|
|
56
58
|
for (const key of Object.keys(args)) {
|
|
57
59
|
if (!supported.has(key)) errors.push(`unknown option --${key}.`);
|
|
58
60
|
}
|
|
@@ -60,6 +62,7 @@ function normalizeSyncOptions(argv, cwd) {
|
|
|
60
62
|
|
|
61
63
|
const force = readBooleanOption(args, 'force', errors);
|
|
62
64
|
const yes = readBooleanOption(args, 'yes', errors) || readBooleanOption(args, 'y', errors);
|
|
65
|
+
const skillsOnly = readBooleanOption(args, 'skills-only', errors);
|
|
63
66
|
const skipHooks = readBooleanOption(args, 'skip-hooks', errors);
|
|
64
67
|
const noBridge = readBooleanOption(args, 'no-bridge', errors);
|
|
65
68
|
const allowUnmanagedSkillOverwrite = readBooleanOption(args, 'allow-unmanaged-skill-overwrite', errors);
|
|
@@ -95,6 +98,7 @@ function normalizeSyncOptions(argv, cwd) {
|
|
|
95
98
|
repoInfo: findGitRootInfo(repoStart),
|
|
96
99
|
repoStart,
|
|
97
100
|
skipHooks,
|
|
101
|
+
skillsOnly,
|
|
98
102
|
skillSet,
|
|
99
103
|
skillsDir,
|
|
100
104
|
yes,
|
|
@@ -177,8 +181,8 @@ function buildSyncPlan(options, command) {
|
|
|
177
181
|
? skillNamesForSet(options.skillSet)
|
|
178
182
|
: (installedSkills.length > 0 ? installedSkills : skillNamesForSet('all'));
|
|
179
183
|
const repoRoot = options.repoInfo.isGitRepo ? options.repoInfo.repoRoot : null;
|
|
180
|
-
const managedRepo = repoLooksManaged(repoRoot);
|
|
181
|
-
const hooks = detectSyncHooks(repoRoot, options.skipHooks);
|
|
184
|
+
const managedRepo = !options.skillsOnly && repoLooksManaged(repoRoot);
|
|
185
|
+
const hooks = options.skillsOnly ? [] : detectSyncHooks(repoRoot, options.skipHooks);
|
|
182
186
|
|
|
183
187
|
const plan = {
|
|
184
188
|
command,
|
|
@@ -190,7 +194,7 @@ function buildSyncPlan(options, command) {
|
|
|
190
194
|
allowProfileOverwrite: options.allowProfileOverwrite,
|
|
191
195
|
forceSkills: true,
|
|
192
196
|
installMissing: false,
|
|
193
|
-
overrides: [],
|
|
197
|
+
overrides: options.skillsOnly ? ['--skills-only'] : [],
|
|
194
198
|
skillSet: options.skillSet || (installedSkills.length > 0 ? 'detected' : 'all'),
|
|
195
199
|
skillNames,
|
|
196
200
|
installSkills: true,
|
|
@@ -200,7 +204,7 @@ function buildSyncPlan(options, command) {
|
|
|
200
204
|
repoInfo: options.repoInfo,
|
|
201
205
|
repoRoot,
|
|
202
206
|
connectRepo: managedRepo,
|
|
203
|
-
repoSkippedReason: managedRepo ? null : 'not managed by jhste-skills yet',
|
|
207
|
+
repoSkippedReason: options.skillsOnly ? 'skills-only requested; not touching repo outputs' : (managedRepo ? null : 'not managed by jhste-skills yet'),
|
|
204
208
|
writeProfile: managedRepo,
|
|
205
209
|
writeBridge: managedRepo && !options.noBridge,
|
|
206
210
|
hooks,
|
package/docs/CLI.md
CHANGED
|
@@ -88,6 +88,7 @@ Safety contract:
|
|
|
88
88
|
```bash
|
|
89
89
|
jhste-skills sync --yes --repo /path/to/repo
|
|
90
90
|
jhste-skills sync --yes --repo /path/to/repo --skills-dir /path/to/skills
|
|
91
|
+
jhste-skills sync --yes --skills-only
|
|
91
92
|
jhste-skills sync --yes --skill-set all
|
|
92
93
|
jhste-skills sync --yes --force --allow-profile-overwrite
|
|
93
94
|
```
|
|
@@ -98,6 +99,7 @@ Stable contract:
|
|
|
98
99
|
- only refreshes repo outputs that already look managed by jhste-skills (generated/legacy-generated `.jhste/profile.yaml`, managed bridge markers, or managed hooks);
|
|
99
100
|
- does not bootstrap unmanaged repositories; use `install` or `connect` for first-time setup;
|
|
100
101
|
- preserves non-managed hooks and does not touch source files, CI, `package.json`, or lockfiles;
|
|
102
|
+
- `--skills-only` refreshes installed skills only and never writes repo profile, bridge blocks, hooks, or deep-scan outputs, even when `--repo` points at a managed repo;
|
|
101
103
|
- `--force` refreshes generated/managed profiles but does not overwrite modified profiles unless `--allow-profile-overwrite` is also passed; unmanaged differing skill directories require `--allow-unmanaged-skill-overwrite`;
|
|
102
104
|
- `sync`/`update` may adopt additional known jhste skills into an already managed skills directory and refresh them without the extra overwrite flag.
|
|
103
105
|
|
|
@@ -107,9 +109,11 @@ Stable contract:
|
|
|
107
109
|
|
|
108
110
|
```bash
|
|
109
111
|
jhste-skills update --yes --repo /path/to/repo
|
|
112
|
+
jhste-skills update --yes --skills-only
|
|
110
113
|
```
|
|
111
114
|
|
|
112
115
|
It is meant for the common workflow of pulling the latest `jhste-skills` source first, then reconciling local installed copies and managed repo outputs. It does not self-update the package or run `git pull` for you.
|
|
116
|
+
Use `--skills-only` when you want the latest skill files in the local skills directory but do not want to touch the current repository's managed profile, bridge block, hooks, or deep-scan outputs.
|
|
113
117
|
|
|
114
118
|
## `deep-scan`
|
|
115
119
|
|
package/package.json
CHANGED
|
@@ -74,7 +74,7 @@ export const recipeRequirements = {
|
|
|
74
74
|
'skills/grilling/SKILL.md': ['read-only by default'],
|
|
75
75
|
'skills/grill-me/SKILL.md': ['read-only by default'],
|
|
76
76
|
'skills/improve-codebase-architecture/SKILL.md': ['Default to a concise Markdown architecture review', 'HTML/Tailwind/Mermaid report only when requested'],
|
|
77
|
-
'skills/jhste-engineering-groundwork/SKILL.md': ['Senior-quality pre-edit gate', '
|
|
77
|
+
'skills/jhste-engineering-groundwork/SKILL.md': ['Senior-quality pre-edit gate', 'recovery or rollback expectation', 'Adjacent-code scope creep', 'Changed responsibility', 'bounded fix', 'Final behavior predicates'],
|
|
78
78
|
'skills/jhste-red-team-review/SKILL.md': ['Severity rubric and path tracing', 'changed execution path', 'changes required', 'actual consumer', 'residual risk'],
|
|
79
79
|
'skills/jhste-red-team-review/references/red-team-review.md': ['Severity rubric', 'Trace at least one changed execution path', 'one main reason to change', 'Current proof'],
|
|
80
80
|
};
|
|
@@ -13,7 +13,7 @@ export function runConnectScenarios({ root, tmp, skillsDir }) {
|
|
|
13
13
|
fs.mkdirSync(nonGitCwd, { recursive: true });
|
|
14
14
|
run(process.execPath, [path.join(root, 'cli/install.mjs'), '--yes', '--skills-dir', nonGitCwdSkills, '--skip-deep-scan'], { cwd: nonGitCwd });
|
|
15
15
|
if (fs.existsSync(path.join(nonGitCwd, '.jhste'))) fail('install outside git repo created .jhste');
|
|
16
|
-
if (skillDirs(nonGitCwdSkills).length !==
|
|
16
|
+
if (skillDirs(nonGitCwdSkills).length !== 21) fail('install outside git repo did not install 21 bundled skills');
|
|
17
17
|
|
|
18
18
|
const explicitNonGitRepo = path.join(tmp, 'explicit-non-git-repo');
|
|
19
19
|
const explicitNonGitSkills = path.join(tmp, 'explicit-non-git-skills');
|
|
@@ -42,6 +42,6 @@ export function runConnectScenarios({ root, tmp, skillsDir }) {
|
|
|
42
42
|
if (connectMissing.status !== 3) fail(`connect missing skills should exit 3, got ${connectMissing.status}`);
|
|
43
43
|
if (fs.existsSync(path.join(connectMissingRepo, '.jhste'))) fail('connect missing skills created .jhste');
|
|
44
44
|
run(process.execPath, [path.join(root, 'cli/connect.mjs'), '--mode', 'normal', '--yes', '--repo', connectMissingRepo, '--skills-dir', connectMissingSkills, '--skip-deep-scan', '--install-missing'], { cwd: connectMissingRepo });
|
|
45
|
-
if (skillDirs(connectMissingSkills).length !==
|
|
45
|
+
if (skillDirs(connectMissingSkills).length !== 21) fail('connect --install-missing did not install 21 bundled skills');
|
|
46
46
|
if (!fs.existsSync(path.join(connectMissingRepo, '.jhste', 'profile.yaml'))) fail('connect --install-missing did not create profile');
|
|
47
47
|
}
|
|
@@ -112,7 +112,7 @@ function runDefaultInstall(ctx) {
|
|
|
112
112
|
const manifest = readManagedSkillsManifest(skillsDir);
|
|
113
113
|
if (manifest.managed_by !== 'jhste-skills' || !manifest.skills?.['jhste-red-team-review']?.digest) fail('skills manifest missing managed skill digest');
|
|
114
114
|
const defaultSkillDirs = skillDirs(skillsDir);
|
|
115
|
-
if (defaultSkillDirs.length !==
|
|
115
|
+
if (defaultSkillDirs.length !== 21) fail(`default install should copy 21 bundled skills, got ${defaultSkillDirs.length}`);
|
|
116
116
|
if (!defaultSkillDirs.includes('improve-codebase-architecture')) fail('default install should copy vendored workflow skills');
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -171,7 +171,33 @@ run_jhste_skills guard --scope staged --format text --fail-on warning
|
|
|
171
171
|
|
|
172
172
|
const managedManifest = readManagedSkillsManifest(skillsDir);
|
|
173
173
|
if (!managedManifest.skills?.[adoptedSkillName]?.digest) fail('update did not record adopted known skill in manifest');
|
|
174
|
-
|
|
174
|
+
const profilePath = path.join(repo, '.jhste', 'profile.yaml');
|
|
175
|
+
const profileBeforeSkillsOnly = fs.readFileSync(profilePath, 'utf8');
|
|
176
|
+
fs.writeFileSync(skillPath, '# stale local copy for skills-only\n');
|
|
177
|
+
fs.writeFileSync(agentsPath, updatedAgents.replace(
|
|
178
|
+
'Repo-local instructions in this file remain authoritative.',
|
|
179
|
+
'Bridge text that skills-only must not replace.',
|
|
180
|
+
));
|
|
181
|
+
fs.writeFileSync(preCommitPath, `#!/usr/bin/env sh
|
|
182
|
+
# jhste-skills managed hook start
|
|
183
|
+
# mode=blocking hook=pre-commit scope=staged
|
|
184
|
+
echo "skills-only must not replace hook"
|
|
185
|
+
run_jhste_skills guard --scope staged --format text --fail-on warning
|
|
186
|
+
# jhste-skills managed hook end
|
|
187
|
+
`, { mode: 0o755 });
|
|
188
|
+
run(process.execPath, [path.join(root, 'cli/update.mjs'), '--yes', '--repo', repo, '--skills-dir', skillsDir, '--skills-only'], { cwd: repo });
|
|
189
|
+
if (fs.readFileSync(skillPath, 'utf8') !== fs.readFileSync(sourceSkillPath, 'utf8')) {
|
|
190
|
+
fail('update --skills-only did not refresh an installed skill');
|
|
191
|
+
}
|
|
192
|
+
if (!fs.readFileSync(agentsPath, 'utf8').includes('Bridge text that skills-only must not replace.')) {
|
|
193
|
+
fail('update --skills-only rewrote a managed bridge block');
|
|
194
|
+
}
|
|
195
|
+
if (!fs.readFileSync(preCommitPath, 'utf8').includes('skills-only must not replace hook')) {
|
|
196
|
+
fail('update --skills-only rewrote a managed hook');
|
|
197
|
+
}
|
|
198
|
+
if (fs.readFileSync(profilePath, 'utf8') !== profileBeforeSkillsOnly) {
|
|
199
|
+
fail('update --skills-only rewrote a managed profile');
|
|
200
|
+
}
|
|
175
201
|
let migratedManifest = assertLegacySkillRenameMigration({
|
|
176
202
|
root, repo, skillsDir, manifest: managedManifest, legacyName: 'diagnose', canonicalName: 'diagnosing-bugs', digest: 'legacy-digest',
|
|
177
203
|
});
|
|
@@ -242,7 +268,7 @@ function runSkillSetScenarios({ root, tmp }) {
|
|
|
242
268
|
fs.writeFileSync(path.join(allRepo, 'AGENTS.md'), '# All skill repo\n');
|
|
243
269
|
run(process.execPath, [path.join(root, 'cli/install.mjs'), '--yes', '--repo', allRepo, '--skills-dir', allSkillsDir, '--skip-deep-scan', '--skip-hooks', '--skill-set', 'all'], { cwd: allRepo });
|
|
244
270
|
const allSkillDirs = skillDirs(allSkillsDir);
|
|
245
|
-
if (allSkillDirs.length !==
|
|
271
|
+
if (allSkillDirs.length !== 21) fail(`--skill-set all should copy 21 skills, got ${allSkillDirs.length}`);
|
|
246
272
|
if (!allSkillDirs.includes('jhste-red-team-review') || !allSkillDirs.includes('improve-codebase-architecture')) fail('--skill-set all missing core or vendored skill');
|
|
247
273
|
}
|
|
248
274
|
|
|
@@ -27,7 +27,7 @@ function runCustomAndMinimalScenarios({ root, tmp }) {
|
|
|
27
27
|
fs.writeFileSync(path.join(minimalRepo, 'AGENTS.md'), '# Minimal repo\n');
|
|
28
28
|
run(process.execPath, [path.join(root, 'cli/install.mjs'), '--mode', 'minimal', '--yes', '--repo', minimalRepo, '--skills-dir', minimalSkillsDir, '--skip-deep-scan'], { cwd: minimalRepo });
|
|
29
29
|
const minimalSkillDirs = skillDirs(minimalSkillsDir);
|
|
30
|
-
if (minimalSkillDirs.length !==
|
|
30
|
+
if (minimalSkillDirs.length !== 8) fail(`--mode minimal should copy 8 core skills, got ${minimalSkillDirs.length}`);
|
|
31
31
|
if (fs.existsSync(path.join(minimalRepo, '.jhste'))) fail('--mode minimal created .jhste');
|
|
32
32
|
if (fs.existsSync(path.join(minimalRepo, '.git', 'hooks', 'pre-commit'))) fail('--mode minimal created pre-commit hook');
|
|
33
33
|
if (fs.readFileSync(path.join(minimalRepo, 'AGENTS.md'), 'utf8') !== '# Minimal repo\n') fail('--mode minimal modified AGENTS.md');
|
|
@@ -47,7 +47,7 @@ function runFullModeScenarios({ root, tmp }) {
|
|
|
47
47
|
fs.writeFileSync(path.join(fullModeRepo, 'AGENTS.md'), '# Full mode repo\n');
|
|
48
48
|
run(process.execPath, [path.join(root, 'cli/install.mjs'), '--mode', 'full', '--yes', '--repo', fullModeRepo, '--skills-dir', fullModeSkillsDir, '--skip-deep-scan'], { cwd: fullModeRepo });
|
|
49
49
|
const fullModeSkillDirs = skillDirs(fullModeSkillsDir);
|
|
50
|
-
if (fullModeSkillDirs.length !==
|
|
50
|
+
if (fullModeSkillDirs.length !== 21) fail(`--mode full should copy 21 skills, got ${fullModeSkillDirs.length}`);
|
|
51
51
|
const fullPreCommit = path.join(fullModeRepo, '.git', 'hooks', 'pre-commit');
|
|
52
52
|
const fullPrePush = path.join(fullModeRepo, '.git', 'hooks', 'pre-push');
|
|
53
53
|
if (!fs.existsSync(fullPreCommit) || !fs.existsSync(fullPrePush)) fail('--mode full did not install pre-commit and pre-push');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codebase-design
|
|
3
|
-
description: Shared vocabulary for designing deep modules. Use when
|
|
3
|
+
description: Shared vocabulary for designing deep modules and module interfaces. Use when designing or improving a module interface, deciding where a boundary goes, making code more testable or AI-navigable, or when another skill needs deep-module vocabulary. For repo-wide refactor candidate discovery, use improve-codebase-architecture.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|
package/skills/grill-me/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: grill-me
|
|
3
|
-
description: Direct
|
|
3
|
+
description: Direct red-team interrogation of the user's own plan or reasoning. Use when the user asks to be grilled, challenged, pressure-tested, red-teamed, or questioned aggressively about their plan. Not for reviewing an already-changed code diff; use jhste-red-team-review for that.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: grill-with-docs
|
|
3
|
-
description:
|
|
3
|
+
description: Red-team questioning of a plan against project domain language, then recording resulting decisions in CONTEXT.md or ADRs. Use when the user wants grilling plus documentation, ADR, glossary, or CONTEXT updates. Not for reviewing an already-changed code diff; use jhste-red-team-review for that.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|
package/skills/grilling/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: grilling
|
|
3
|
-
description:
|
|
3
|
+
description: Red-team questioning for plans and designs before implementation. Use when the user asks to challenge, pressure-test, red-team, grill, interrogate, or find gaps in a plan, without requesting documentation updates. Not for reviewing an already-changed code diff; use jhste-red-team-review for that.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: improve-codebase-architecture
|
|
3
|
-
description:
|
|
3
|
+
description: Repo-wide or area-wide architecture review to find deepening/refactoring opportunities, informed by CONTEXT.md and docs/adr/. Use when the user wants broad architecture improvement, refactoring opportunities, consolidation of tightly-coupled modules, or better testability and AI-navigability. Not for every local code change; use jhste-architecture-review for the current diff.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jhste-architecture-review
|
|
3
|
-
description: Advisory architecture review
|
|
3
|
+
description: Advisory architecture review for current code changes touching module boundaries, app structure, side-effect placement, responsibility splits, or pass-through abstraction. Use during or after local code changes; for repo-wide architecture improvement use improve-codebase-architecture, and for module interface vocabulary use codebase-design.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# jhste-architecture-review
|
|
@@ -23,7 +23,7 @@ When reviewing a proposed change, ask:
|
|
|
23
23
|
|
|
24
24
|
- Bad: `route.ts` performs auth, schema parsing, business rules, database queries, error mapping, and response DTO shaping inline.
|
|
25
25
|
- Better: route/controller does request parsing and response mapping; a usecase owns business invariants; a repository/query owns persistence; errors are mapped through a small public-error boundary.
|
|
26
|
-
- Why: caller contracts, authorization,
|
|
26
|
+
- Why: caller contracts, authorization, failure behavior, and test boundaries are easier to inspect from entrypoint to side effect.
|
|
27
27
|
|
|
28
28
|
### React client path split
|
|
29
29
|
|
|
@@ -82,4 +82,3 @@ Change adjacent code only when it sits on the changed execution path and leaving
|
|
|
82
82
|
- Bad: a caller accepts a broad config, interface, or props bag while using only a small slice, creating unrelated coupling.
|
|
83
83
|
- Better: depend on the smallest useful contract, while keeping cohesive public contracts together when they are read and changed together.
|
|
84
84
|
- Why: ISP should reduce coupling, not fragment a contract that always moves as one unit.
|
|
85
|
-
|
|
@@ -16,6 +16,7 @@ Use repo-local instructions first. Treat this skill as shared advisory guidance
|
|
|
16
16
|
- Do not log secrets, tokens, passwords, cookies, authorization headers, sessions, or raw sensitive payloads.
|
|
17
17
|
- Tests should verify observable behavior through the module interface, not implementation details, function-name existence, or incidental strings.
|
|
18
18
|
- Do not stop at happy-path-only coverage for changed behavior; include the most relevant edge, failure, side-effect, idempotency, or regression case.
|
|
19
|
+
- For code with side effects or multi-step work, make the failure behavior understandable to callers and users; do not let the code silently imply success when the changed path did not complete safely.
|
|
19
20
|
- Mock external boundaries, not internal collaborators you control.
|
|
20
21
|
- Before adding a new helper, type, or shape, check for the existing source of truth.
|
|
21
22
|
- Use SOLID-informed coding discipline as advisory guidance for concrete maintenance and failure risks: one responsibility, extension boundaries only when variants force repeated edits, stable caller contracts, right-sized interfaces, and visible side-effect dependencies. Do not add abstraction only to satisfy a SOLID label.
|
|
@@ -48,8 +48,8 @@ When code crosses async UI, env, or persistence paths, be skeptical of fragile a
|
|
|
48
48
|
### Mutation write safety
|
|
49
49
|
|
|
50
50
|
- Bad: a route loops over writes and returns success after the first non-throwing path.
|
|
51
|
-
- Better: define the
|
|
52
|
-
- Why: duplicate execution, retry, and
|
|
51
|
+
- Better: define the write rule at the layer that can enforce it, check the outcome that matters to callers, and report unsafe or incomplete results instead of implying success.
|
|
52
|
+
- Why: duplicate execution, retry, and recovery behavior are observable instead of assumed.
|
|
53
53
|
|
|
54
54
|
### Import/ops script
|
|
55
55
|
|
|
@@ -7,5 +7,5 @@ Routine validation should use fixtures, dry runs, or focused smoke checks. Live
|
|
|
7
7
|
## Producer / consumer recipe
|
|
8
8
|
|
|
9
9
|
- Bad: a crawler fetches pages, normalizes fields, deduplicates, writes the database, and sends notifications in one loop.
|
|
10
|
-
- Better: the producer emits a versioned artifact; the consumer validates, deduplicates, persists, and reports
|
|
10
|
+
- Better: the producer emits a versioned artifact; the consumer validates, deduplicates, persists, and reports write outcomes with a resumable cursor.
|
|
11
11
|
- Why: flaky network behavior is separated from write safety, fixtures can replay artifacts, and duplicate writes are easier to prevent.
|
|
@@ -15,7 +15,9 @@ Use this skill for API and persistence boundary changes. Repo-local API contract
|
|
|
15
15
|
- Use parameter binding or a safe query abstraction for SQL.
|
|
16
16
|
- Keep request and response contracts explicit enough that caller drift is visible before runtime.
|
|
17
17
|
- Validate database rows or third-party records before treating them as domain objects when shape matters.
|
|
18
|
-
-
|
|
18
|
+
- Map storage rows to response shapes that match the caller's permission and purpose; do not let internal or higher-privilege data leak through convenient reuse.
|
|
19
|
+
- Make write safety visible at the layer that actually preserves the rule; do not rely on app-side checks alone when storage behavior can contradict them.
|
|
20
|
+
- For authorization or data-isolation changes, inspect the actual policy and execution path instead of trusting a single route, role, or helper as proof.
|
|
19
21
|
- Return public-safe errors; do not leak raw database, stack, or secret-like details.
|
|
20
22
|
- For API or persistence changes, verification should prefer the actual contract surface when feasible: route handler behavior, request/response shape, auth or tenant scoping, SQL binding behavior, migration/application path, or service boundary used by callers.
|
|
21
23
|
|
|
@@ -43,7 +43,9 @@ For non-trivial code changes, check these before editing:
|
|
|
43
43
|
10. **Verification plan** — tests, guards, builds, or manual checks to run, plus any checks likely to be skipped.
|
|
44
44
|
11. **Final behavior predicates** — concrete public behavior that must change, public/API/DB/UI shape that must not change, expected error behavior, persistence or side-effect expectations, and backward-compatibility constraints.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
For changes touching user data, API/DB, permissions, files, external calls, batch writes, async UI actions, exports, or lifecycle state, do not reduce review to a fixed checklist. Follow the changed execution path and use repo-local rules, domain invariants, caller expectations, persistence behavior, side effects, user-visible states, operational impact, and verification evidence to identify the failure modes that matter for this change. Prefer concrete risk statements over named frameworks or exhaustive lists.
|
|
47
|
+
|
|
48
|
+
Keep the full evidence available internally, but do not make the user read it every time. User-facing output should usually be one or two plain sentences covering:
|
|
47
49
|
|
|
48
50
|
- scope checked;
|
|
49
51
|
- main risks;
|
|
@@ -82,7 +84,7 @@ Avoid: "Should I create an issue?" without supporting reasoning.
|
|
|
82
84
|
|
|
83
85
|
## Senior-quality pre-edit gate
|
|
84
86
|
|
|
85
|
-
For non-trivial code changes, compare at least two plausible shapes before editing: the smallest local patch and one cleaner boundary-preserving alternative. State the invariant that must remain true, the changed class/module/function responsibility, the caller contract entering and leaving the boundary, the test boundary that will prove behavior, the rejected alternative, and the
|
|
87
|
+
For non-trivial code changes, compare at least two plausible shapes before editing: the smallest local patch and one cleaner boundary-preserving alternative. State the invariant that must remain true, the changed class/module/function responsibility, the caller contract entering and leaving the boundary, the test boundary that will prove behavior, the rejected alternative, and the recovery or rollback expectation for failure after a side effect. Keep this quiet for docs-only, comment-only, formatting-only, and trivial rename-only work.
|
|
86
88
|
|
|
87
89
|
Adjacent-code scope creep is allowed only when the adjacent code is on the changed execution path and leaving it untouched creates a concrete failure mode. Otherwise emit an Issue candidate rather than widening the change.
|
|
88
90
|
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jhste-long-running-work-loop
|
|
3
|
+
description: "Coordinate multi-session or long-running work while preserving state, approval boundaries, and resume points. Use when work spans sessions, wait states, recurring reviews, multiple repos, or durable decisions; does not replace code-quality, PRD, issue, triage, or handoff skills."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# jhste-long-running-work-loop
|
|
7
|
+
|
|
8
|
+
Use this skill to decide whether a task needs a durable work loop, then keep the loop small, reviewable, and safe. Repo-local instructions remain authoritative.
|
|
9
|
+
|
|
10
|
+
This is an orchestration skill. Do not reimplement code quality review, PRD writing, issue breakdown, triage, or handoff workflows. Route to the narrower skill when that is the actual task.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
Use for work that is likely to lose important state across time, tools, repositories, or sessions:
|
|
15
|
+
|
|
16
|
+
- multi-session implementation or review work;
|
|
17
|
+
- recurring review/check-in loops;
|
|
18
|
+
- external waiting states such as CI, preview deploys, reviewer replies, approvals, vendor/API responses, or customer input;
|
|
19
|
+
- workflows spanning PRD, issues, implementation, review, and release notes;
|
|
20
|
+
- work that touches multiple repositories or external systems;
|
|
21
|
+
- hard-to-reverse design decisions that need a durable decision record;
|
|
22
|
+
- tasks where the next session or next agent must resume safely.
|
|
23
|
+
|
|
24
|
+
Skip for:
|
|
25
|
+
|
|
26
|
+
- simple Q&A;
|
|
27
|
+
- typo fixes;
|
|
28
|
+
- formatting-only work;
|
|
29
|
+
- small README edits;
|
|
30
|
+
- small single-file fixes that can finish in one session;
|
|
31
|
+
- direct requests that are only PRD drafting, issue breakdown, triage, or handoff;
|
|
32
|
+
- work where the changed code path can be handled by `jhste-engineering-groundwork`, guard, and `jhste-red-team-review` alone.
|
|
33
|
+
|
|
34
|
+
When skipping, use the narrower workflow. If useful, briefly note that a long-running loop is unnecessary.
|
|
35
|
+
|
|
36
|
+
## Contract
|
|
37
|
+
|
|
38
|
+
1. **Decide if this is actually long-running.**
|
|
39
|
+
If not, route to the smallest applicable skill or workflow.
|
|
40
|
+
|
|
41
|
+
2. **Define the work loop before expanding scope.**
|
|
42
|
+
Capture only:
|
|
43
|
+
- current goal;
|
|
44
|
+
- current phase;
|
|
45
|
+
- definition of done;
|
|
46
|
+
- explicit out-of-scope items;
|
|
47
|
+
- open decisions;
|
|
48
|
+
- external blockers or wait states;
|
|
49
|
+
- approval boundaries;
|
|
50
|
+
- next checkpoint;
|
|
51
|
+
- required review gates.
|
|
52
|
+
|
|
53
|
+
3. **Preserve context only when it will reduce future failure.**
|
|
54
|
+
Do not turn project docs into scratchpads. Do not persist raw thought, private reasoning, secrets, or noisy progress logs.
|
|
55
|
+
|
|
56
|
+
4. **Choose the right durable surface.**
|
|
57
|
+
- Domain vocabulary or stable domain context -> `CONTEXT.md`.
|
|
58
|
+
- Hard-to-reverse design decision with real trade-offs -> ADR.
|
|
59
|
+
- Active work state, blockers, acceptance, and next action -> issue or PR notes.
|
|
60
|
+
- Next-session or next-agent continuation only -> `handoff`.
|
|
61
|
+
- Ephemeral, obvious, or soon-stale state -> do not persist.
|
|
62
|
+
|
|
63
|
+
5. **Resume by verifying, not trusting.**
|
|
64
|
+
On resume, re-check the current repo, branch, issue/PR, CI, deployment, or external state before relying on old notes. Mark stale assumptions as not checked.
|
|
65
|
+
|
|
66
|
+
6. **Respect approval boundaries.**
|
|
67
|
+
Proceed without asking for reading, searching, summarizing, planning, drafting, review notes, and issue candidates when repo-local instructions allow it.
|
|
68
|
+
Ask before send, push, merge, deploy, delete, publish, production data changes, secret exposure, cost-bearing actions, broad tracker edits, or destructive/irreversible changes.
|
|
69
|
+
|
|
70
|
+
7. **Delegate to existing skills.**
|
|
71
|
+
- Before non-trivial code changes, use `jhste-engineering-groundwork`.
|
|
72
|
+
- After non-trivial code changes, run the configured guard when available and use `jhste-red-team-review`.
|
|
73
|
+
- For PRDs, use `to-prd`.
|
|
74
|
+
- For issue breakdown, use `to-issues`.
|
|
75
|
+
- For tracker triage, use `triage`.
|
|
76
|
+
- For next-agent/session summaries, use `handoff`.
|
|
77
|
+
- For domain glossary or ADR work, use `grill-with-docs` or the repo's domain-documentation workflow.
|
|
78
|
+
|
|
79
|
+
## Minimal loop note
|
|
80
|
+
|
|
81
|
+
When a durable loop is warranted, keep the note compact:
|
|
82
|
+
|
|
83
|
+
```md
|
|
84
|
+
## Long-running work loop
|
|
85
|
+
|
|
86
|
+
Goal:
|
|
87
|
+
- ...
|
|
88
|
+
|
|
89
|
+
Current phase:
|
|
90
|
+
- ...
|
|
91
|
+
|
|
92
|
+
Definition of done:
|
|
93
|
+
- ...
|
|
94
|
+
|
|
95
|
+
Out of scope:
|
|
96
|
+
- ...
|
|
97
|
+
|
|
98
|
+
Open decisions:
|
|
99
|
+
- ...
|
|
100
|
+
|
|
101
|
+
External blockers / wait states:
|
|
102
|
+
- ...
|
|
103
|
+
|
|
104
|
+
Approval required before:
|
|
105
|
+
- ...
|
|
106
|
+
|
|
107
|
+
Durable state location:
|
|
108
|
+
- ...
|
|
109
|
+
|
|
110
|
+
Next checkpoint:
|
|
111
|
+
- ...
|
|
112
|
+
|
|
113
|
+
Review gates:
|
|
114
|
+
- ...
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Prefer referencing existing artifacts by path or URL over duplicating their contents.
|
|
118
|
+
|
|
119
|
+
## Context storage rules
|
|
120
|
+
|
|
121
|
+
Unless repo-local docs define another role, treat `CONTEXT.md` as stable domain context, not a work log. Use it only for glossary or domain context that future agents need to understand the project correctly.
|
|
122
|
+
|
|
123
|
+
Create or update an ADR only when all are true:
|
|
124
|
+
|
|
125
|
+
1. the decision is hard to reverse;
|
|
126
|
+
2. future readers would wonder why it was chosen;
|
|
127
|
+
3. there were real alternatives and trade-offs.
|
|
128
|
+
|
|
129
|
+
Use issue or PR notes for active work state because that state naturally expires when the work closes.
|
|
130
|
+
|
|
131
|
+
Use handoff for continuation context that helps the next session but does not deserve permanent repo documentation.
|
|
132
|
+
|
|
133
|
+
Record nothing when the information is trivial, already obvious from code/tests/diff, likely to go stale quickly, or not useful to future work.
|
|
134
|
+
|
|
135
|
+
## Output style
|
|
136
|
+
|
|
137
|
+
Be brief. Report:
|
|
138
|
+
|
|
139
|
+
- whether the long-running loop is warranted;
|
|
140
|
+
- the chosen durable surface, if any;
|
|
141
|
+
- the next checkpoint;
|
|
142
|
+
- any action that requires approval;
|
|
143
|
+
- which narrower skill should handle the next concrete step.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jhste-red-team-review
|
|
3
|
-
description: Read-only
|
|
3
|
+
description: Read-only red-team code review for actual diffs or changed files after implementation, with issue-candidate handoff for residual risks. Use before declaring non-trivial code work complete. For pre-implementation red-team questioning or interrogation of a plan, use grilling, grill-me, or grill-with-docs.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# jhste-red-team-review
|
|
7
7
|
|
|
8
|
-
Use this skill after non-trivial code changes and before reporting completion. Repo-local instructions remain authoritative.
|
|
8
|
+
Use this skill after non-trivial code changes and before reporting completion. This is red-team code review for changed code, not plan interrogation. Repo-local instructions remain authoritative.
|
|
9
9
|
|
|
10
10
|
## Automation and side effects
|
|
11
11
|
|
|
@@ -37,7 +37,7 @@ Perform the changed-code review, inspect guard/test output, and run bounded fix/
|
|
|
37
37
|
|
|
38
38
|
## Severity rubric and path tracing
|
|
39
39
|
|
|
40
|
-
For non-trivial code changes, name the main responsibility of changed classes/modules/functions, apply the SOLID-informed review lens where relevant, trace at least one changed execution path from entrypoint through validation/auth/state to the side effect or result, and state any changed paths not checked. Use `changes required` for new guard or review warnings on changed files that can be fixed within the changed execution path, and for P0/P1 issues that can cause data loss, security/privacy exposure, misleading success, broken runtime behavior, or failed documented acceptance. Use `residual risk` when the bounded review completed but lower-severity, heuristic, environmental, or out-of-scope risks remain. Use `pass` only after inspecting the relevant diff and finding no material follow-up, with current proof for the changed public behavior or a clear explanation of why consumer-path proof was not feasible.
|
|
40
|
+
For non-trivial code changes, name the main responsibility of changed classes/modules/functions, apply the SOLID-informed review lens where relevant, trace at least one changed execution path from entrypoint through validation/auth/state to the side effect or result, and state any changed paths not checked. Do not stop at a fixed checklist; attack the changed path in the way most likely to reveal real failures for this repo, domain, caller, and runtime. Use `changes required` for new guard or review warnings on changed files that can be fixed within the changed execution path, and for P0/P1 issues that can cause data loss, security/privacy exposure, misleading success, broken runtime behavior, or failed documented acceptance. Use `residual risk` when the bounded review completed but lower-severity, heuristic, environmental, or out-of-scope risks remain. Use `pass` only after inspecting the relevant diff and finding no material follow-up, with current proof for the changed public behavior or a clear explanation of why consumer-path proof was not feasible.
|
|
41
41
|
|
|
42
42
|
## Issue candidate protocol
|
|
43
43
|
|
|
@@ -13,7 +13,10 @@ Use an objective red-team checklist. Prefer concrete findings over broad praise.
|
|
|
13
13
|
- Failure handling is observable and does not silently pretend success.
|
|
14
14
|
- Type expectations, API contracts, and caller assumptions still line up after the change.
|
|
15
15
|
- Auth, permission, and user-data isolation risks are called out when relevant.
|
|
16
|
+
- API and persistence contracts are checked through the public shape and caller expectations that matter for the changed path.
|
|
16
17
|
- Create/update/delete paths do not appear vulnerable to data loss, duplicate writes, or misleading success states.
|
|
18
|
+
- Mutation and side-effect safety are reviewed through the real write path, including what callers and users see if the path is repeated, interrupted, or only partly succeeds.
|
|
19
|
+
- State transitions are reviewed where stale or inconsistent state would mislead users, leak access, or break the domain rule.
|
|
17
20
|
- Build, import, env, route, and runtime assumptions that could break deployment are called out when relevant.
|
|
18
21
|
- Actual consumer-path proof is preferred when feasible: public API route, CLI command, UI route, worker/scheduler path, service entrypoint, fresh-client flow, or documented acceptance path.
|
|
19
22
|
- Performance risks such as duplicate requests, avoidable rerenders, or obviously heavy work on hot paths are called out when relevant.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: to-issues
|
|
3
|
-
description: Break
|
|
3
|
+
description: Break an existing plan, spec, or PRD into issue-ready vertical implementation slices. Use when the user wants implementation tickets, issue breakdown, or work breakdown from known requirements. For drafting product requirements from conversation context, use to-prd; create tracker issues only when directly requested or when repo-local workflow gives standing approval.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|
package/skills/to-prd/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: to-prd
|
|
3
|
-
description: Draft a PRD from the current conversation context and make it ready for the project's normal PRD workflow. Use when the user
|
|
3
|
+
description: Draft a PRD from the current conversation context and make it ready for the project's normal PRD workflow. Use when the user asks for a PRD or product requirements document. For issue-ready implementation slices from an existing plan or PRD, use to-issues; publish/create tracker items only when directly requested or when repo-local workflow gives standing approval.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|
package/skills/triage/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: triage
|
|
3
|
-
description: Triage issues through a state machine driven by triage roles. Use when user wants to create
|
|
3
|
+
description: Triage existing or newly requested issues through a state machine driven by triage roles. Use when the user wants to create a specific issue, triage issues, review incoming bugs or feature requests, prepare issues for an AFK agent, or manage issue workflow. For PRDs use to-prd; for bulk implementation slice generation from a plan use to-issues.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## jhste compatibility
|