@uzysjung/agent-harness 26.171.0 → 26.173.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/README.ko.md +5 -3
- package/README.md +5 -3
- package/dist/{chunk-U4X4Z333.js → chunk-JABFWW6X.js} +30 -7
- package/dist/chunk-JABFWW6X.js.map +1 -0
- package/dist/index.js +361 -286
- package/dist/index.js.map +1 -1
- package/dist/trust-tier-drift.js +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.md +3 -1
- package/templates/rules/htmx-fastapi-ui.md +36 -0
- package/templates/rules/htmx-fastify-ui.md +9 -0
- package/templates/rules/ship-checklist.md +2 -2
- package/templates/rules/test-policy.md +7 -4
- package/templates/skills/audit-harness-fit/references/apply.md +6 -1
- package/templates/skills/audit-harness-fit/references/verification.md +5 -0
- package/templates/skills/objective-brief/SKILL.md +3 -1
- package/templates/track-mcp-map.tsv +1 -1
- package/dist/chunk-U4X4Z333.js.map +0 -1
package/dist/trust-tier-drift.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uzysjung/agent-harness",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.173.0",
|
|
4
4
|
"description": "Curate vetted AI-coding skills & plugins by your tech stack — install only what you need, across Claude Code, Codex, OpenCode & Antigravity",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
package/templates/CLAUDE.md
CHANGED
|
@@ -90,7 +90,9 @@ Report what changed, what is supported by evidence, and material remaining gaps.
|
|
|
90
90
|
Work autonomously through the authorized outcome, without seeking repeated
|
|
91
91
|
confirmation for routine progress. Keep readiness and authority distinct:
|
|
92
92
|
preparing or validating a change does not authorize applying it to shared
|
|
93
|
-
systems or persistent application data.
|
|
93
|
+
systems or persistent application data. An explicit user correction of a recorded
|
|
94
|
+
procedure governs at once; before dependent work continues, align active plans and
|
|
95
|
+
delegations, and record a standing change in its project-owned source.
|
|
94
96
|
|
|
95
97
|
Reuse approval that covers the action and target. Obtain explicit approval for
|
|
96
98
|
destructive or privileged actions, deployment, and shared-state writes when
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.html"
|
|
4
|
+
- "**/*.jinja"
|
|
5
|
+
- "**/*.jinja2"
|
|
6
|
+
- "**/*.j2"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# htmx UI — FastAPI 템플릿
|
|
10
|
+
|
|
11
|
+
FastAPI 가 렌더하는 htmx 화면(Jinja·HTML)은 Tailwind v4 + daisyUI 클래스(`btn` · `card` · `bg-base-100`)로 만든다. 다른 CSS 체계나 Tailwind v3 이면 바꾸기 전에 묻는다. 없으면 첫 UI 작업 때 `https://daisyui.com/docs/install/` 대로 설치한다.
|
|
12
|
+
|
|
13
|
+
`@shadcn/lint` 는 템플릿을 못 읽으니 ast-grep(`pip install ast-grep-cli`)으로 검사한다. 없으면 아래 두 파일을 프로젝트 루트에 만들고 lint 명령에 `ast-grep scan` 을 더한다. UI 를 바꾼 뒤 돌려 보고된 줄을 고친다 — 오타·없는 클래스는 못 잡는다.
|
|
14
|
+
|
|
15
|
+
`sgconfig.yml`:
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
ruleDirs: [rules]
|
|
19
|
+
languageGlobs: { html: ["*.jinja", "*.jinja2", "*.j2"] }
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`rules/tailwind.yml`:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
id: tailwind-tokens
|
|
26
|
+
language: html
|
|
27
|
+
severity: error
|
|
28
|
+
message: 원색 팔레트·임의 값·인라인 style 대신 daisyUI 테마 색·스케일 값·클래스를 쓴다
|
|
29
|
+
rule:
|
|
30
|
+
any:
|
|
31
|
+
- kind: attribute_value
|
|
32
|
+
regex: (^|[^\w-])[a-z-]+-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(50|[1-9]00|950)(/\d+)?([^\w-]|$)
|
|
33
|
+
inside: &class { kind: attribute, has: { kind: attribute_name, regex: ^class$ }, stopBy: end }
|
|
34
|
+
- { kind: attribute_value, regex: '-\[[^\]]+\]', inside: *class }
|
|
35
|
+
- { kind: attribute, has: { kind: attribute_name, regex: ^style$ } }
|
|
36
|
+
```
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.tsx"
|
|
4
|
+
- "**/*.jsx"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# htmx UI — Fastify 서버 JSX
|
|
8
|
+
|
|
9
|
+
Fastify 가 렌더하는 htmx 화면은 서버 JSX 템플릿(`.tsx`, 예: `@kitajs/html`)으로 쓰고 Tailwind v4 + daisyUI 클래스(`btn` · `card` · `bg-base-100`)로 만든다 — 브라우저 React 가 아니라 shadcn/ui 는 안 쓴다. 다른 템플릿 엔진·CSS 체계나 Tailwind v3 이면 바꾸기 전에 묻는다. 없으면 첫 UI 작업 때 `https://daisyui.com/docs/install/` 대로 설치하고, 린터 `@shadcn/lint` 는 `https://github.com/shadcn-ui/lint/blob/main/SETUP.md` 대로 등록한 뒤 켤 규칙을 사용자와 정한다(`class` 속성도 검사하고 daisyUI 클래스를 안다). UI 를 바꾼 뒤 lint 를 돌려 고친다.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
무엇으로 검증할지는 이 저장소가 정한다. **어느 정도까지**는 Testing 룰이, 그 결과가 **언제** 있어야 하는지는 이 룰이 정한다.
|
|
4
4
|
|
|
5
|
-
- **검증의 리듬**: 구현 중에는 변경 부분의 빠른 검사만 한다. 사용자 씬의 수정분이 모였을 때가 독립 검토를 **판단하는** 시점이다 — 걸지는 아래 머지 전 기준으로 정한다. 수정이 끝난 뒤 통합 테스트 · 빌드 · 실제 사용자 흐름을 검증한다. 작은 수정마다 전체 검증을 반복하지 않고, 재검사는 영향받은 부분만 한다.
|
|
5
|
+
- **검증의 리듬**: 구현 중에는 변경 부분의 빠른 검사만 한다. 사용자 씬의 수정분이 모였을 때가 독립 검토를 **판단하는** 시점이다 — 걸지는 아래 머지 전 기준으로 정한다. 수정이 끝난 뒤 통합 테스트 · 빌드 · 실제 사용자 흐름을 검증한다. 작은 수정마다 전체 검증을 반복하지 않고, 재검사는 영향받은 부분만 한다. 계획·위임문에 적었다는 것만으로는 검증을 넓히지 않는다.
|
|
6
6
|
- **머지 전 독립 검증**은 핵심 사용자 기능 · 되돌리기 어려운 변경 · 돈·권한처럼 틀리면 큰 사고인 것에만 건다. UX 의 큰 변경은 사용자 페르소나 리뷰(선택). 그 밖(테스트 하네스 · 문서 · 리팩터 · 문구 · UI · 리뷰어 처방)은 리그레션 테스트로 들어온다. 독립 검증의 판정은 만든 쪽이 아니라 검증자가 요구사항·변경분·결과를 직접 확인하고 내린다. 어느 쪽이든 변경 위험에 맞는 검증을 **실행하고 결과를 확인한다** — high risk 는 더 많은 증거를 갖고 들어오고, **실행하지 않은 상태는 통과가 아니다.** 필수 보안 · 데이터 보호 검사는 유지한다.
|
|
7
7
|
- **배포**: 배포 전에 풀 테스트 · E2E 를 거친다(Testing 룰의 CI/CD 일정 몫). 독립 검증은 **단계가 아니라** 머지 전과 같은 기준(영향 · 불확실성 · 복구 비용 · 이미 있는 증거)으로 판단한다 — 배포라는 이유로 다시 걸지 않는다. 머지 전에 검증된 것과 **같은 artifact** 를 내보내고, 배포 뒤 실제 환경에서 smoke · health · 핵심 기능을 확인한다.
|
|
8
|
-
- **머지·게시 경로가
|
|
8
|
+
- **머지·게시 경로가 위 기준대로 고른 검증과 저장소의 필수 체크 통과에 의존해야 한다.** 별개 경로면 아무도 우회하려 하지 않았는데 red 가 그대로 나간다. 의존하지 않는 상태를 발견하면 경로를 고치기 전에 먼저 보고한다.
|
|
9
9
|
- 변경분이 사용자에게 닿는 경로가 여럿이면 **경로마다 실행 증거를 따로** 확보한다. 한 경로의 증거를 다른 경로에 전용하지 않는다.
|
|
10
10
|
- 이 저장소가 정의한 **보안·취약점 검사도** 실행하고 결과를 확인한다 — 테스트만 돌리고 나가는 것이 기본값이 되기 쉽다.
|
|
11
11
|
- 추적 문서가 코드와 어긋난 채로 나가지 않게 한다. **이 하네스가 설치해 둔 검사기**를 쓴다(스스로는 존재를 알 수 없으므로 여기 적는다): `bash .uzys-agent-harness/spec-drift-check.sh ship` — **exit 2 면 차단**(동기화 후 재시도), 1 은 경고, 0 이 통과. 백로그는 `ship-gate:ignore` 구간으로 감싸 면제한다(표식이 안 닫히면 면제를 통째로 무시한다).
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
**How far** to verify scales with the risk of the change; **when** those results must exist
|
|
4
4
|
belongs to the Delivery rule.
|
|
5
5
|
|
|
6
|
-
- An ordinary change gets
|
|
7
|
-
|
|
8
|
-
proportion to what it touches and what
|
|
6
|
+
- An ordinary change gets static checks and regression across the affected scope — not the whole
|
|
7
|
+
suite merely because the repository's CI runs it; independent verification only where the
|
|
8
|
+
Delivery rule requires it. A high-risk one widens that in proportion to what it touches and what
|
|
9
|
+
its failure would cost.
|
|
9
10
|
- Preserve required outcomes with the least burdensome reliable protection.
|
|
10
11
|
Prefer fixing the cause and reusing or improving existing mechanisms within scope;
|
|
11
12
|
no new guard is needed when those suffice. Judge safeguards by credible risk,
|
|
@@ -29,4 +30,6 @@ belongs to the Delivery rule.
|
|
|
29
30
|
adding indiscriminate retries. Correct or consolidate tests when their expectations are
|
|
30
31
|
wrong, obsolete, or redundant; preserve coverage of the accepted contract and follow project
|
|
31
32
|
policy for changes to mandatory gates.
|
|
32
|
-
- If the affected scope cannot be established confidently,
|
|
33
|
+
- If the affected scope cannot be established confidently, widen along what the change shares
|
|
34
|
+
(callers, data, configuration), not to the whole suite by default. After an environment or CI
|
|
35
|
+
fix, rerun what failed and what the fix could affect.
|
|
@@ -38,7 +38,12 @@ markers/imports. Modify the canonical editable source within authorization. Pres
|
|
|
38
38
|
unrelated text, local customizations, headings, language, and formatting. Synchronize
|
|
39
39
|
mirrors only where ownership, synchronization contract, and scope are established.
|
|
40
40
|
When an installer would overwrite a local fix, report the source/integration change
|
|
41
|
-
needed; generator changes belong to a separately authorized task.
|
|
41
|
+
needed; generator changes belong to a separately authorized task. When re-applying
|
|
42
|
+
edits saved in an update backup, move them to a project-owned place that update leaves
|
|
43
|
+
alone and that gives the same behavior — such as the project's own part of CLAUDE.md /
|
|
44
|
+
AGENTS.md outside the harness block for guidance — and confirm the agent loads or runs it.
|
|
45
|
+
If no such place exists for that asset, report the limit. Not back into the harness-owned
|
|
46
|
+
file: the next update replaces it again and keeps the edit only as a backup.
|
|
42
47
|
|
|
43
48
|
Keep removed content recoverable. Clean tracked content can use existing history;
|
|
44
49
|
dirty or untracked content needs an authorized snapshot. Store snapshots outside
|
|
@@ -72,6 +72,11 @@ Explicit project policy can bind even without CI enforcement. Preserve those gat
|
|
|
72
72
|
route disproportionate mandatory requirements to a separate policy decision. Retain
|
|
73
73
|
an unclear gate pending clarification while continuing work independent of it.
|
|
74
74
|
Generic requests to "think again" are assessed for evidence value, not presumed gates.
|
|
75
|
+
Check project gates against the stage schedule: a merge gate that waits for every CI
|
|
76
|
+
check where CI runs the whole suite, or an evidence rule that voids every result when
|
|
77
|
+
the tree changes, turns each change into a full run. Report that conflict as a policy
|
|
78
|
+
decision without silently adding full-suite gates, standing a local run in for a required
|
|
79
|
+
remote check, or weakening protections.
|
|
75
80
|
Document-only effects normally need document checks unless policy or dependencies
|
|
76
81
|
require more. State checks not run and the resulting limits.
|
|
77
82
|
|
|
@@ -192,7 +192,9 @@ question nobody will answer.
|
|
|
192
192
|
**success_criteria** — prefer conditions someone else can check by running something or looking at
|
|
193
193
|
something. Counts and numbers inside the criteria get compared literally, so verify them against
|
|
194
194
|
reality before writing them; a criterion that says "all 12 cases pass" when there are 11 cases
|
|
195
|
-
makes the worker either invent a case or report failure.
|
|
195
|
+
makes the worker either invent a case or report failure. Verification items follow the
|
|
196
|
+
project's policy for that stage; add checks for the task's risk or the user's request, not
|
|
197
|
+
broader gates.
|
|
196
198
|
|
|
197
199
|
**verification / communication** — the `[N줄]` caps are meant to be replaced with a real number.
|
|
198
200
|
Leaving the placeholder in tells the worker nothing, and an uncapped handoff drifts into a report
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# 신규 MCP 추가 시: 이 파일에 1줄 추가만 하면 setup-harness.sh 수정 불필요.
|
|
17
17
|
# 주석 (#) 라인은 무시.
|
|
18
18
|
context7 * npx ["-y", "@upstash/context7-mcp@latest"]
|
|
19
|
-
railway-mcp-server csr-supabase|csr-fastify|csr-fastapi|ssr-htmx|full url {"url":"https://mcp.railway.com"}
|
|
19
|
+
railway-mcp-server csr-supabase|csr-fastify|csr-fastapi|ssr-htmx|ssr-htmx-fastify|full url {"url":"https://mcp.railway.com"}
|
|
20
20
|
supabase csr-supabase|full url {"url":"https://mcp.supabase.com/mcp"}
|
|
21
21
|
chrome-devtools csr-*|ssr-*|full npx ["-y", "chrome-devtools-mcp@latest", "--no-usage-statistics"]
|
|
22
22
|
vercel - url {"url":"https://mcp.vercel.com"}
|