jhste-skills 0.3.4 → 0.3.6
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 +24 -0
- package/README.ja.md +1 -0
- package/README.ko.md +1 -0
- package/README.md +1 -0
- package/README.zh.md +1 -0
- package/package.json +1 -1
- package/scripts/smoke/connect-scenarios.mjs +2 -2
- package/scripts/smoke/install-scenarios.mjs +2 -2
- package/scripts/smoke/mode-scenarios.mjs +2 -2
- package/skills/jhste-long-running-work-loop/SKILL.md +143 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.6 - 2026-06-28
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Clarified that `jhste-long-running-work-loop` is triggered by state-loss risk rather than elapsed time alone, including same-day external wait states.
|
|
7
|
+
- Updated README skill summaries to describe durable state preservation instead of implying only long-duration work.
|
|
8
|
+
|
|
9
|
+
### Validation
|
|
10
|
+
- `npm test` passed.
|
|
11
|
+
- `jhste-skills guard --scope changed --format text --fail-on error` passed with 0 warnings/errors.
|
|
12
|
+
- `git diff --check` passed.
|
|
13
|
+
- `npm pack --dry-run` completed for `jhste-skills@0.3.6`.
|
|
14
|
+
|
|
15
|
+
## 0.3.5 - 2026-06-28
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- 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.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- Updated smoke-test expected skill counts now that the bundled/core skill set includes the new long-running work loop skill.
|
|
22
|
+
|
|
23
|
+
### Validation
|
|
24
|
+
- `npm test` passed.
|
|
25
|
+
- `jhste-skills guard --scope changed --format text --fail-on error` passed with 0 warnings/errors.
|
|
26
|
+
|
|
3
27
|
## 0.3.4 - 2026-06-26
|
|
4
28
|
|
|
5
29
|
### Changed
|
package/README.ja.md
CHANGED
|
@@ -168,6 +168,7 @@ Custom - 効果ベースの質問でセットアップ範囲を選択
|
|
|
168
168
|
| [`jhste-db-api-boundary`](skills/jhste-db-api-boundary/SKILL.md)<br>API route、service、repository、SQL 間の責任と data contract を確認する boundary skill | API、controller、service、repository、SQL、persistence code を触るとき | Fat route, unsafe SQL, missing auth/data scoping, leaky DTO |
|
|
169
169
|
| [`jhste-crawler-automation`](skills/jhste-crawler-automation/SKILL.md)<br>crawler/scraper/worker/scheduler の producer-consumer boundary と side effect を確認する automation skill | crawler、scraper、worker、scheduler、browser automation を触るとき | Fragile automation, unclear producer/consumer boundary, hidden side effect |
|
|
170
170
|
| [`jhste-red-team-review`](skills/jhste-red-team-review/SKILL.md)<br>完了前に変更コードを攻撃的に再確認する read-only red-team code review skill | non-trivial code work の完了宣言前 | Premature “done”, missed null/auth/env/write/API/performance risk |
|
|
171
|
+
| [`jhste-long-running-work-loop`](skills/jhste-long-running-work-loop/SKILL.md)<br>session、待ち状態、durable decision をまたいで作業状態を保つための狭い orchestration skill | 状態喪失が誤り、重複、不安全、または再開困難な作業につながるとき: 複数セッションの作業、繰り返し review、当日または複数日の外部待ち状態、複数 repo への影響、PRD→issue→implementation→review の流れ、durable decision | Lost context, stale scratchpad, unclear approval boundary, unsafe resume point |
|
|
171
172
|
|
|
172
173
|
## Bundled workflow skills
|
|
173
174
|
|
package/README.ko.md
CHANGED
|
@@ -171,6 +171,7 @@ Custom - 효과 중심 질문을 통해 설치 범위를 직접 선택
|
|
|
171
171
|
| [`jhste-db-api-boundary`](skills/jhste-db-api-boundary/SKILL.md)<br>API route, service, repository, SQL 사이의 책임 경계와 데이터 계약을 점검하는 boundary 스킬 | API, controller, service, repository, SQL, persistence code를 만질 때 | fat route, unsafe SQL, missing auth/data scoping, leaky DTO |
|
|
172
172
|
| [`jhste-crawler-automation`](skills/jhste-crawler-automation/SKILL.md)<br>crawler, scraper, worker, scheduler의 producer/consumer boundary와 side effect를 점검하는 자동화 스킬 | crawler, scraper, worker, scheduler, browser automation을 만질 때 | fragile automation, unclear producer/consumer boundary, hidden side effect |
|
|
173
173
|
| [`jhste-red-team-review`](skills/jhste-red-team-review/SKILL.md)<br>완료 선언 전 변경 코드를 공격적으로 재검토하는 read-only red-team code review 스킬 | non-trivial code work 완료 선언 전 | premature “done”, missing consumer-path proof, 놓치기 쉬운 null/auth/env/write/API/performance risk |
|
|
174
|
+
| [`jhste-long-running-work-loop`](skills/jhste-long-running-work-loop/SKILL.md)<br>세션, 대기 상태, durable decision 사이의 작업 상태를 보존하는 좁은 orchestration 스킬 | 상태 손실이 잘못된 작업, 중복 작업, unsafe resume, 재개 어려움으로 이어질 수 있을 때: 여러 세션 작업, 반복 리뷰, 당일 또는 다일 외부 대기 상태, 여러 repo 영향, PRD→issue→구현→리뷰 흐름, durable decision | lost context, stale scratchpad, unclear approval boundary, unsafe resume point |
|
|
174
175
|
|
|
175
176
|
## Bundled workflow skills
|
|
176
177
|
|
package/README.md
CHANGED
|
@@ -171,6 +171,7 @@ These are the jhste-authored guardrail skills. They are installed by default as
|
|
|
171
171
|
| [`jhste-db-api-boundary`](skills/jhste-db-api-boundary/SKILL.md)<br>A boundary skill that checks responsibility and data contracts across API routes, services, repositories, and SQL | Touching API, controller, service, repository, SQL, or persistence code | Fat routes, unsafe SQL, missing auth/data scoping, leaky DTOs |
|
|
172
172
|
| [`jhste-crawler-automation`](skills/jhste-crawler-automation/SKILL.md)<br>An automation skill for crawler/scraper/worker/scheduler producer-consumer boundaries and side effects | Touching crawlers, scrapers, workers, schedulers, or browser automation | Fragile automation, unclear producer/consumer boundaries, hidden side effects |
|
|
173
173
|
| [`jhste-red-team-review`](skills/jhste-red-team-review/SKILL.md)<br>A read-only red-team code review skill that aggressively re-checks changed code before completion | Before declaring non-trivial code work complete | Premature “done”, missing consumer-path proof, missed null/auth/env/write/API/performance risks |
|
|
174
|
+
| [`jhste-long-running-work-loop`](skills/jhste-long-running-work-loop/SKILL.md)<br>A narrow orchestration skill for preserving work state across sessions, wait states, and durable decisions | Losing state could make work wrong, duplicated, unsafe, or hard to resume: multi-session work, recurring reviews, same-day or multi-day external wait states, multiple repos, PRD→issue→implementation→review flows, or durable decisions | Lost context, stale scratchpads, unclear approval boundaries, unsafe resume points |
|
|
174
175
|
|
|
175
176
|
## Bundled workflow skills
|
|
176
177
|
|
package/README.zh.md
CHANGED
|
@@ -168,6 +168,7 @@ Custom - 通过面向效果的问题自定义安装范围
|
|
|
168
168
|
| [`jhste-db-api-boundary`](skills/jhste-db-api-boundary/SKILL.md)<br>检查 API route、service、repository、SQL 之间职责和 data contract 的 boundary skill | 修改 API、controller、service、repository、SQL、persistence code 时 | Fat route, unsafe SQL, missing auth/data scoping, leaky DTO |
|
|
169
169
|
| [`jhste-crawler-automation`](skills/jhste-crawler-automation/SKILL.md)<br>检查 crawler/scraper/worker/scheduler 的 producer-consumer boundary 和 side effect 的 automation skill | 修改 crawler、scraper、worker、scheduler、browser automation 时 | Fragile automation, unclear producer/consumer boundary, hidden side effect |
|
|
170
170
|
| [`jhste-red-team-review`](skills/jhste-red-team-review/SKILL.md)<br>read-only red-team code review skill,在完成前主动攻击性复查变更代码 | non-trivial code work 完成声明前 | Premature “done”, missed null/auth/env/write/API/performance risk |
|
|
171
|
+
| [`jhste-long-running-work-loop`](skills/jhste-long-running-work-loop/SKILL.md)<br>用于在 session、等待状态和 durable decision 间保留工作状态的窄 orchestration skill | 状态丢失可能导致错误、重复、不安全或难以恢复的工作时:多会话工作、重复 review、当天或多天外部等待状态、多 repo 影响、PRD→issue→implementation→review 流程或 durable decision | Lost context, stale scratchpad, unclear approval boundary, unsafe resume point |
|
|
171
172
|
|
|
172
173
|
## Bundled workflow skills
|
|
173
174
|
|
package/package.json
CHANGED
|
@@ -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
|
|
|
@@ -268,7 +268,7 @@ function runSkillSetScenarios({ root, tmp }) {
|
|
|
268
268
|
fs.writeFileSync(path.join(allRepo, 'AGENTS.md'), '# All skill repo\n');
|
|
269
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 });
|
|
270
270
|
const allSkillDirs = skillDirs(allSkillsDir);
|
|
271
|
-
if (allSkillDirs.length !==
|
|
271
|
+
if (allSkillDirs.length !== 21) fail(`--skill-set all should copy 21 skills, got ${allSkillDirs.length}`);
|
|
272
272
|
if (!allSkillDirs.includes('jhste-red-team-review') || !allSkillDirs.includes('improve-codebase-architecture')) fail('--skill-set all missing core or vendored skill');
|
|
273
273
|
}
|
|
274
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');
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jhste-long-running-work-loop
|
|
3
|
+
description: "Coordinate durable work loops when losing state would make work unsafe or hard to resume. 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 when the main risk is losing important work state, not merely because the task may take a long time. 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 where losing state would likely cause wrong, unsafe, duplicated, or hard-to-resume work across time, tools, repositories, or sessions:
|
|
15
|
+
|
|
16
|
+
- multi-session implementation or review work;
|
|
17
|
+
- recurring review/check-in loops;
|
|
18
|
+
- same-day or multi-day 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 durable loop is unnecessary.
|
|
35
|
+
|
|
36
|
+
## Contract
|
|
37
|
+
|
|
38
|
+
1. **Decide if a durable loop is actually warranted.**
|
|
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
|
+
## Durable 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 durable 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.
|