makdoong2-team 2.0.0 → 2.1.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/dist/config.d.ts CHANGED
@@ -84,7 +84,7 @@ export declare function loadConfig(): Makdoong2Config;
84
84
  *
85
85
  * `scripts/install-lib.mts` 의 `parseJsonc` 와 **동작이 같아야 한다** — 한쪽은
86
86
  * opencode.json 을 쓰고 한쪽은 읽으므로, 갈리면 install 이 성공했다고 보고한
87
- * 설정을 런타임이 못 읽는 상태가 된다. `test/opencode-json-read.test.mjs` 가
87
+ * 설정을 런타임이 못 읽는 상태가 된다. `test/opencode-json-read.test.ts` 가
88
88
  * 두 구현의 동치를 강제한다. (install-lib 은 `bin/cli` 의 dist-무의존 성질 때문에
89
89
  * dist 를 import 할 수 없어 공용 모듈로 합치지 못한다.)
90
90
  */
package/dist/config.js CHANGED
@@ -83,7 +83,7 @@ export function loadConfig() {
83
83
  *
84
84
  * `scripts/install-lib.mts` 의 `parseJsonc` 와 **동작이 같아야 한다** — 한쪽은
85
85
  * opencode.json 을 쓰고 한쪽은 읽으므로, 갈리면 install 이 성공했다고 보고한
86
- * 설정을 런타임이 못 읽는 상태가 된다. `test/opencode-json-read.test.mjs` 가
86
+ * 설정을 런타임이 못 읽는 상태가 된다. `test/opencode-json-read.test.ts` 가
87
87
  * 두 구현의 동치를 강제한다. (install-lib 은 `bin/cli` 의 dist-무의존 성질 때문에
88
88
  * dist 를 import 할 수 없어 공용 모듈로 합치지 못한다.)
89
89
  */
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // Lives in its own module rather than opencode-plugin.ts because opencode's
4
4
  // plugin loader invokes EVERY named export of the plugin entry file as a
5
- // plugin factory (see test/plugin-exports-shape.test.mjs). Helpers must be
5
+ // plugin factory (see test/plugin-exports-shape.test.ts). Helpers must be
6
6
  // imported, never re-exported from the entry file.
7
7
  //
8
8
  // 정책: makdoong2-issue-reporter 스킬의 유일한 트리거는 사용자의 직접 호출
@@ -298,7 +298,7 @@ export function looksLikeFileWrite(cmd) {
298
298
  // state.json 가드(WRITE_INDICATORS_RAW)는 `-c`/`-e` 자체를 통째로 막지만 여기는
299
299
  // 그러지 않는다 — 이 함수는 **모든 파일**에 대한 판정이고, 읽기 전용 인라인
300
300
  // 스크립트는 planner/analyzer 의 정상 능력으로 이미 허용돼 있다
301
- // (test/state-write-guard.test.mjs 가 고정). 대신 쓰기 API 목록을 넓힌다.
301
+ // (test/state-write-guard.test.ts 가 고정). 대신 쓰기 API 목록을 넓힌다.
302
302
  if (/\bpython3?\s+-c\s+["'][\s\S]*?(?:open\s*\([^)]*["']\s*,\s*["'][wax]|\.write_text\s*\(|\.write_bytes\s*\(|shutil\.(?:copy|move|rmtree)|os\.(?:remove|unlink|rename|replace|truncate)|json\.dump\s*\()/.test(cmd))
303
303
  return true;
304
304
  if (/\bnode\s+-e\s+["'][\s\S]*?(?:writeFileSync|writeFile\b|appendFileSync|appendFile\b|createWriteStream|renameSync|rmSync|unlinkSync|cpSync|copyFileSync|truncateSync|mkdirSync)/.test(cmd))
@@ -46,7 +46,7 @@ const HTTP_AUTH_HEADER_RE = /(authorization\s*:\s*(?:(?:bearer|basic|token|diges
46
46
  // 헤더 접두 없이 스킴만 나오는 형태. 8자 최소 길이만 두고 **의도적으로 과잉
47
47
  // 마스킹**한다 — 산문의 "Bearer strategy_here" 가 지워지는 것은 실제 토큰이
48
48
  // 새는 것보다 낫다는 것이 이 sanitizer 의 명시적 선택이다
49
- // (test/redact-secrets.test.mjs 의 "conservative: over-masking …" 케이스가 고정).
49
+ // (test/redact-secrets.test.ts 의 "conservative: over-masking …" 케이스가 고정).
50
50
  const HTTP_AUTH_BARE_RE = /\b(Bearer|Basic|Token|Digest)\s+([A-Za-z0-9+/=._~\-]{8,})/g;
51
51
  // `curl -u user:pass` / `--user user:pass`.
52
52
  const CURL_USERINFO_RE = /((?:^|\s)(?:-u|--user)(?:=|\s+))(?:"([^"]*)"|'([^']*)'|([^\s;&|)>]+))/g;
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // Why a separate module: the opencode plugin loader calls EVERY named export of
4
4
  // the entry file as a plugin factory (see ARCHITECTURE.md §2). New helpers must
5
- // live outside opencode-plugin.ts and be imported. `test/plugin-exports-shape.test.mjs`
5
+ // live outside opencode-plugin.ts and be imported. `test/plugin-exports-shape.test.ts`
6
6
  // pins the entry file's export set.
7
7
  //
8
8
  // Everything here is deterministic and side-effect free so the fan-out contract
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // Lives in its own module rather than opencode-plugin.ts because opencode's
4
4
  // plugin loader invokes EVERY named export of the plugin entry file as a
5
- // plugin factory (see test/plugin-exports-shape.test.mjs and the PROJ-40406
5
+ // plugin factory (see test/plugin-exports-shape.test.ts and the PROJ-40406
6
6
  // root-cause analysis). Helpers must therefore be imported, never re-exported
7
7
  // from the entry file.
8
8
  // dispatch_stage bounds retries with MAX_ATTEMPTS, but that budget lives
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // 왜 별도 모듈인가: opencode 플러그인 로더는 진입 파일(opencode-plugin.ts)의 모든
4
4
  // named export 를 plugin factory 로 호출한다 (ARCHITECTURE.md §2). 신규 helper 는
5
- // 이 파일에 두고 import 한다. `test/plugin-exports-shape.test.mjs` 가 진입 파일의
5
+ // 이 파일에 두고 import 한다. `test/plugin-exports-shape.test.ts` 가 진입 파일의
6
6
  // export 집합을 고정한다.
7
7
  //
8
8
  // ── 배경 (issue #5) ──
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makdoong2-team",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -50,7 +50,7 @@
50
50
  "license": "MIT",
51
51
  "engines": {
52
52
  "opencode": ">=1.18.0",
53
- "node": ">=20.0.0",
53
+ "node": ">=22.18.0",
54
54
  "tmux": ">=3.0"
55
55
  },
56
56
  "peerDependencies": {
@@ -68,12 +68,12 @@
68
68
  "build:entry": "tsc -p tsconfig.entry.json && node -e \"import('node:fs').then(({chmodSync})=>{for(const f of ['bin/cli.js','postinstall.mjs','scripts/run-tests.mjs','scripts/test-postinstall.mjs']) chmodSync(f, 0o755)})\"",
69
69
  "typecheck": "tsc -p tsconfig.json",
70
70
  "clean": "node -e \"import('node:fs').then(({rmSync})=>rmSync('dist',{recursive:true,force:true}))\"",
71
- "prepack": "npm run clean && npm run build && node --test test/entry-artifacts.test.mjs",
71
+ "prepack": "npm run clean && npm run build && node --test test/entry-artifacts.test.ts",
72
72
  "postinstall": "node postinstall.mjs",
73
73
  "prepare": "husky install",
74
74
  "test": "XDG_CONFIG_HOME=\"$(mktemp -d)\" XDG_CACHE_HOME=\"$(mktemp -d)\" npm run test:all",
75
75
  "test:all": "npm run build && node scripts/run-tests.mjs",
76
- "test:install": "node test/install-lib.test.mjs",
76
+ "test:install": "node test/install-lib.test.ts",
77
77
  "test:postinstall": "node scripts/test-postinstall.mjs",
78
78
  "test:ubuntu": "bash scripts/test-ubuntu.sh",
79
79
  "release": "bash scripts/release.sh",
@@ -10,7 +10,7 @@
10
10
  // **진단해야 할 그 설정 때문에 진단 도구가 죽는다**.
11
11
  //
12
12
  // 그래서 이 파일은 import 0개 · Node 내장 0개 · process 0개를 유지한다.
13
- // 정본과의 동치는 주석이 아니라 test/model-policy-parity.test.mjs 가 강제한다.
13
+ // 정본과의 동치는 주석이 아니라 test/model-policy-parity.test.ts 가 강제한다.
14
14
  //
15
15
  // 소비자:
16
16
  // - scripts/smoke-test.mts (체인 로직 테스트)
@@ -10,7 +10,7 @@
10
10
  // **진단해야 할 그 설정 때문에 진단 도구가 죽는다**.
11
11
  //
12
12
  // 그래서 이 파일은 import 0개 · Node 내장 0개 · process 0개를 유지한다.
13
- // 정본과의 동치는 주석이 아니라 test/model-policy-parity.test.mjs 가 강제한다.
13
+ // 정본과의 동치는 주석이 아니라 test/model-policy-parity.test.ts 가 강제한다.
14
14
  //
15
15
  // 소비자:
16
16
  // - scripts/smoke-test.mts (체인 로직 테스트)
@@ -31,7 +31,7 @@ git -C "$WT" reset --soft "$BASE"
31
31
  # 0xEA — the lead byte of the Hangul counter suffix that follows — as alnum in
32
32
  # UTF-8 locales. The name absorbs that byte, becomes unbound, and set -u aborts.
33
33
  # glibc keeps high bytes non-alnum, so this only bites on macOS.
34
- # Guarded by test/shell-portability.test.mjs.
34
+ # Guarded by test/shell-portability.test.ts.
35
35
  echo "[rollback] HEAD를 ${BASE} 로 soft-reset 완료 (취소된 커밋 ${N}개, working tree/index 변경은 보존됨)"
36
36
 
37
37
  # 3_delivery.commit 관련 state 초기화 (base_sha는 보존 — 동일 기준점으로 재커밋)
@@ -33,66 +33,66 @@ import { fileURLToPath } from "node:url";
33
33
  const REPO_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
34
34
  const STEPS = [
35
35
  "bash scripts/lint-agent-prompts.sh",
36
- "node --test test/shell-portability.test.mjs",
36
+ "node --test test/shell-portability.test.ts",
37
37
  "node scripts/smoke-test.mjs",
38
38
  "bash scripts/gate-policy-test.sh",
39
- "node test/install-lib.test.mjs",
40
- "node test/skill-mcp-registry.test.mjs",
41
- "node --test test/state-write-guard.test.mjs",
42
- "node --test test/state-access-guard.test.mjs",
43
- "node --test test/git-exclude-registration.test.mjs",
44
- "node --test test/issue-reporter-guard.test.mjs",
45
- "node --test test/release-confirm.test.mjs",
46
- "node --test test/state-sh-schema.test.mjs",
47
- "node --test test/state-sh-init-review-shape.test.mjs",
48
- "node --test test/doctor-phantom-scan.test.mjs",
49
- "node --test test/mcp-secret-injector.test.mjs",
50
- "node --test test/poll-sub-session.test.mjs",
51
- "node --test test/tmux-monitor.test.mjs",
52
- "node --test test/gate-already-done-block.test.mjs",
53
- "node --test test/gate-hybrid-first-entry.test.mjs",
54
- "node --test test/gate-post-pr-verify.test.mjs",
55
- "node --test test/gate-post-review-verify.test.mjs",
56
- "node --test test/gate-requirements-quality.test.mjs",
57
- "node --test test/worktree-sync-gate.test.mjs",
58
- "node --test test/planner-prompt-early-exit.test.mjs",
59
- "node --test test/plugin-bug-fixes.test.mjs",
60
- "node --test test/omo-tmux-detection.test.mjs",
61
- "node --test test/empty-output-done-override.test.mjs",
62
- "node --test test/tmux-monitor-orphan.test.mjs",
63
- "node --test test/poll-permission-scope.test.mjs",
64
- "node --test test/dispatch-review-fixes.test.mjs",
65
- "node --test test/dispatch-stage-redispatch.test.mjs",
66
- "node --test test/dispatch-stage-dev-resume-prompt.test.mjs",
67
- "node --test test/logger.test.mjs",
68
- "node --test test/redact-secrets.test.mjs",
69
- "node --test test/commit-atomicity-verify.test.mjs",
70
- "node --test test/verdict-reason-injection.test.mjs",
71
- "node --test test/verdict-hash-normalize.test.mjs",
72
- "node --test test/session-index-fallback.test.mjs",
73
- "node --test test/plugin-exports-shape.test.mjs",
74
- "node --test test/stale-worktree-recovery.test.mjs",
75
- "node --test test/rollback-commits.test.mjs",
76
- "node --test test/config-dir-home-fallback.test.mjs",
77
- "node --test test/state-path-migration.test.mjs",
78
- "node --test test/state-path-relative.test.mjs",
79
- "node --test test/with-fallback-no-bun.test.mjs",
80
- "node --test test/doctor-exit-code.test.mjs",
81
- "node --test test/example-config-portability.test.mjs",
82
- "node --test test/research-fanout.test.mjs",
83
- "node --test test/entry-artifacts.test.mjs",
84
- "node --test test/state-sh-write-atomicity.test.mjs",
85
- "node --test test/gate-locale-and-path.test.mjs",
86
- "node --test test/model-policy-parity.test.mjs",
39
+ "node test/install-lib.test.ts",
40
+ "node test/skill-mcp-registry.test.ts",
41
+ "node --test test/state-write-guard.test.ts",
42
+ "node --test test/state-access-guard.test.ts",
43
+ "node --test test/git-exclude-registration.test.ts",
44
+ "node --test test/issue-reporter-guard.test.ts",
45
+ "node --test test/release-confirm.test.ts",
46
+ "node --test test/state-sh-schema.test.ts",
47
+ "node --test test/state-sh-init-review-shape.test.ts",
48
+ "node --test test/doctor-phantom-scan.test.ts",
49
+ "node --test test/mcp-secret-injector.test.ts",
50
+ "node --test test/poll-sub-session.test.ts",
51
+ "node --test test/tmux-monitor.test.ts",
52
+ "node --test test/gate-already-done-block.test.ts",
53
+ "node --test test/gate-hybrid-first-entry.test.ts",
54
+ "node --test test/gate-post-pr-verify.test.ts",
55
+ "node --test test/gate-post-review-verify.test.ts",
56
+ "node --test test/gate-requirements-quality.test.ts",
57
+ "node --test test/worktree-sync-gate.test.ts",
58
+ "node --test test/planner-prompt-early-exit.test.ts",
59
+ "node --test test/plugin-bug-fixes.test.ts",
60
+ "node --test test/omo-tmux-detection.test.ts",
61
+ "node --test test/empty-output-done-override.test.ts",
62
+ "node --test test/tmux-monitor-orphan.test.ts",
63
+ "node --test test/poll-permission-scope.test.ts",
64
+ "node --test test/dispatch-review-fixes.test.ts",
65
+ "node --test test/dispatch-stage-redispatch.test.ts",
66
+ "node --test test/dispatch-stage-dev-resume-prompt.test.ts",
67
+ "node --test test/logger.test.ts",
68
+ "node --test test/redact-secrets.test.ts",
69
+ "node --test test/commit-atomicity-verify.test.ts",
70
+ "node --test test/verdict-reason-injection.test.ts",
71
+ "node --test test/verdict-hash-normalize.test.ts",
72
+ "node --test test/session-index-fallback.test.ts",
73
+ "node --test test/plugin-exports-shape.test.ts",
74
+ "node --test test/stale-worktree-recovery.test.ts",
75
+ "node --test test/rollback-commits.test.ts",
76
+ "node --test test/config-dir-home-fallback.test.ts",
77
+ "node --test test/state-path-migration.test.ts",
78
+ "node --test test/state-path-relative.test.ts",
79
+ "node --test test/with-fallback-no-bun.test.ts",
80
+ "node --test test/doctor-exit-code.test.ts",
81
+ "node --test test/example-config-portability.test.ts",
82
+ "node --test test/research-fanout.test.ts",
83
+ "node --test test/entry-artifacts.test.ts",
84
+ "node --test test/state-sh-write-atomicity.test.ts",
85
+ "node --test test/gate-locale-and-path.test.ts",
86
+ "node --test test/model-policy-parity.test.ts",
87
87
  // npm install -g 전 구간(pack → 전역 설치 → postinstall → doctor)을 검증하는
88
88
  // 유일한 테스트다. 종전에는 STEPS 에 없어서 `npm test` 가 한 번도 실행하지
89
89
  // 않았고, 그 사이 내용이 현행 구현과 반대로 썩어 있었다 (plugin ref 형식,
90
90
  // secrets.env 처리). 등록하지 않으면 같은 일이 반복된다.
91
- "node --test test/agent-permission-keys.test.mjs",
92
- "node --test test/gate-missing-state-sentinel.test.mjs",
93
- "node --test test/sync-state-commit-detection.test.mjs",
94
- "node --test test/skill-tls-config.test.mjs",
95
- "node --test test/opencode-json-read.test.mjs",
91
+ "node --test test/agent-permission-keys.test.ts",
92
+ "node --test test/gate-missing-state-sentinel.test.ts",
93
+ "node --test test/sync-state-commit-detection.test.ts",
94
+ "node --test test/skill-tls-config.test.ts",
95
+ "node --test test/opencode-json-read.test.ts",
96
96
  "node scripts/test-postinstall.mjs"
97
97
  ];
98
98
  const CYAN = "\u001b[36m", GREEN = "\u001b[32m", RED = "\u001b[31m", YELLOW = "\u001b[33m", OFF = "\u001b[0m";
@@ -36,66 +36,66 @@ const REPO_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
36
36
 
37
37
  const STEPS = [
38
38
  "bash scripts/lint-agent-prompts.sh",
39
- "node --test test/shell-portability.test.mjs",
39
+ "node --test test/shell-portability.test.ts",
40
40
  "node scripts/smoke-test.mjs",
41
41
  "bash scripts/gate-policy-test.sh",
42
- "node test/install-lib.test.mjs",
43
- "node test/skill-mcp-registry.test.mjs",
44
- "node --test test/state-write-guard.test.mjs",
45
- "node --test test/state-access-guard.test.mjs",
46
- "node --test test/git-exclude-registration.test.mjs",
47
- "node --test test/issue-reporter-guard.test.mjs",
48
- "node --test test/release-confirm.test.mjs",
49
- "node --test test/state-sh-schema.test.mjs",
50
- "node --test test/state-sh-init-review-shape.test.mjs",
51
- "node --test test/doctor-phantom-scan.test.mjs",
52
- "node --test test/mcp-secret-injector.test.mjs",
53
- "node --test test/poll-sub-session.test.mjs",
54
- "node --test test/tmux-monitor.test.mjs",
55
- "node --test test/gate-already-done-block.test.mjs",
56
- "node --test test/gate-hybrid-first-entry.test.mjs",
57
- "node --test test/gate-post-pr-verify.test.mjs",
58
- "node --test test/gate-post-review-verify.test.mjs",
59
- "node --test test/gate-requirements-quality.test.mjs",
60
- "node --test test/worktree-sync-gate.test.mjs",
61
- "node --test test/planner-prompt-early-exit.test.mjs",
62
- "node --test test/plugin-bug-fixes.test.mjs",
63
- "node --test test/omo-tmux-detection.test.mjs",
64
- "node --test test/empty-output-done-override.test.mjs",
65
- "node --test test/tmux-monitor-orphan.test.mjs",
66
- "node --test test/poll-permission-scope.test.mjs",
67
- "node --test test/dispatch-review-fixes.test.mjs",
68
- "node --test test/dispatch-stage-redispatch.test.mjs",
69
- "node --test test/dispatch-stage-dev-resume-prompt.test.mjs",
70
- "node --test test/logger.test.mjs",
71
- "node --test test/redact-secrets.test.mjs",
72
- "node --test test/commit-atomicity-verify.test.mjs",
73
- "node --test test/verdict-reason-injection.test.mjs",
74
- "node --test test/verdict-hash-normalize.test.mjs",
75
- "node --test test/session-index-fallback.test.mjs",
76
- "node --test test/plugin-exports-shape.test.mjs",
77
- "node --test test/stale-worktree-recovery.test.mjs",
78
- "node --test test/rollback-commits.test.mjs",
79
- "node --test test/config-dir-home-fallback.test.mjs",
80
- "node --test test/state-path-migration.test.mjs",
81
- "node --test test/state-path-relative.test.mjs",
82
- "node --test test/with-fallback-no-bun.test.mjs",
83
- "node --test test/doctor-exit-code.test.mjs",
84
- "node --test test/example-config-portability.test.mjs",
85
- "node --test test/research-fanout.test.mjs",
86
- "node --test test/entry-artifacts.test.mjs",
87
- "node --test test/state-sh-write-atomicity.test.mjs",
88
- "node --test test/gate-locale-and-path.test.mjs",
89
- "node --test test/model-policy-parity.test.mjs",
42
+ "node test/install-lib.test.ts",
43
+ "node test/skill-mcp-registry.test.ts",
44
+ "node --test test/state-write-guard.test.ts",
45
+ "node --test test/state-access-guard.test.ts",
46
+ "node --test test/git-exclude-registration.test.ts",
47
+ "node --test test/issue-reporter-guard.test.ts",
48
+ "node --test test/release-confirm.test.ts",
49
+ "node --test test/state-sh-schema.test.ts",
50
+ "node --test test/state-sh-init-review-shape.test.ts",
51
+ "node --test test/doctor-phantom-scan.test.ts",
52
+ "node --test test/mcp-secret-injector.test.ts",
53
+ "node --test test/poll-sub-session.test.ts",
54
+ "node --test test/tmux-monitor.test.ts",
55
+ "node --test test/gate-already-done-block.test.ts",
56
+ "node --test test/gate-hybrid-first-entry.test.ts",
57
+ "node --test test/gate-post-pr-verify.test.ts",
58
+ "node --test test/gate-post-review-verify.test.ts",
59
+ "node --test test/gate-requirements-quality.test.ts",
60
+ "node --test test/worktree-sync-gate.test.ts",
61
+ "node --test test/planner-prompt-early-exit.test.ts",
62
+ "node --test test/plugin-bug-fixes.test.ts",
63
+ "node --test test/omo-tmux-detection.test.ts",
64
+ "node --test test/empty-output-done-override.test.ts",
65
+ "node --test test/tmux-monitor-orphan.test.ts",
66
+ "node --test test/poll-permission-scope.test.ts",
67
+ "node --test test/dispatch-review-fixes.test.ts",
68
+ "node --test test/dispatch-stage-redispatch.test.ts",
69
+ "node --test test/dispatch-stage-dev-resume-prompt.test.ts",
70
+ "node --test test/logger.test.ts",
71
+ "node --test test/redact-secrets.test.ts",
72
+ "node --test test/commit-atomicity-verify.test.ts",
73
+ "node --test test/verdict-reason-injection.test.ts",
74
+ "node --test test/verdict-hash-normalize.test.ts",
75
+ "node --test test/session-index-fallback.test.ts",
76
+ "node --test test/plugin-exports-shape.test.ts",
77
+ "node --test test/stale-worktree-recovery.test.ts",
78
+ "node --test test/rollback-commits.test.ts",
79
+ "node --test test/config-dir-home-fallback.test.ts",
80
+ "node --test test/state-path-migration.test.ts",
81
+ "node --test test/state-path-relative.test.ts",
82
+ "node --test test/with-fallback-no-bun.test.ts",
83
+ "node --test test/doctor-exit-code.test.ts",
84
+ "node --test test/example-config-portability.test.ts",
85
+ "node --test test/research-fanout.test.ts",
86
+ "node --test test/entry-artifacts.test.ts",
87
+ "node --test test/state-sh-write-atomicity.test.ts",
88
+ "node --test test/gate-locale-and-path.test.ts",
89
+ "node --test test/model-policy-parity.test.ts",
90
90
  // npm install -g 전 구간(pack → 전역 설치 → postinstall → doctor)을 검증하는
91
91
  // 유일한 테스트다. 종전에는 STEPS 에 없어서 `npm test` 가 한 번도 실행하지
92
92
  // 않았고, 그 사이 내용이 현행 구현과 반대로 썩어 있었다 (plugin ref 형식,
93
93
  // secrets.env 처리). 등록하지 않으면 같은 일이 반복된다.
94
- "node --test test/agent-permission-keys.test.mjs",
95
- "node --test test/gate-missing-state-sentinel.test.mjs",
96
- "node --test test/sync-state-commit-detection.test.mjs",
97
- "node --test test/skill-tls-config.test.mjs",
98
- "node --test test/opencode-json-read.test.mjs",
94
+ "node --test test/agent-permission-keys.test.ts",
95
+ "node --test test/gate-missing-state-sentinel.test.ts",
96
+ "node --test test/sync-state-commit-detection.test.ts",
97
+ "node --test test/skill-tls-config.test.ts",
98
+ "node --test test/opencode-json-read.test.ts",
99
99
  "node scripts/test-postinstall.mjs"
100
100
  ];
101
101
 
@@ -3,7 +3,7 @@
3
3
  // 산출물은 같은 자리의 scripts/smoke-test.mjs 다 (`npm run build:entry`).
4
4
  //
5
5
  // 주의: 이 파일은 **미러(scripts/model-policy.mts)만** 검증한다. 정본
6
- // src/model-fallback-policy.ts 와의 동치는 test/model-policy-parity.test.mjs
6
+ // src/model-fallback-policy.ts 와의 동치는 test/model-policy-parity.test.ts
7
7
  // 따로 강제한다 — 예전 주석은 이 파일이 정본까지 검증한다고 적었으나 거짓이었다.
8
8
  //
9
9
  // Run: node scripts/smoke-test.mjs
@@ -3,7 +3,7 @@
3
3
  // 산출물은 같은 자리의 scripts/smoke-test.mjs 다 (`npm run build:entry`).
4
4
  //
5
5
  // 주의: 이 파일은 **미러(scripts/model-policy.mts)만** 검증한다. 정본
6
- // src/model-fallback-policy.ts 와의 동치는 test/model-policy-parity.test.mjs
6
+ // src/model-fallback-policy.ts 와의 동치는 test/model-policy-parity.test.ts
7
7
  // 따로 강제한다 — 예전 주석은 이 파일이 정본까지 검증한다고 적었으나 거짓이었다.
8
8
  //
9
9
  // Run: node scripts/smoke-test.mjs
@@ -18,7 +18,7 @@
18
18
  # (macOS 용 node_modules 를 덮어쓰지 않기 위함 — 네이티브 바이너리가 다르다)
19
19
  # - 호스트 uid 를 담은 /etc/passwd 를 만들어 넣는다. 이게 없으면 os.homedir()
20
20
  # 가 HOME 미설정 시 getpwuid 폴백에서 ENOENT 로 죽어 실제 Ubuntu 장비에서는
21
- # 나지 않는 실패가 발생한다 (test/config-dir-home-fallback.test.mjs).
21
+ # 나지 않는 실패가 발생한다 (test/config-dir-home-fallback.test.ts).
22
22
  # - package-lock.json 이 바뀐 경우에만 npm ci 를 다시 돌린다.
23
23
  # - 호스트 uid/gid 로 실행해 root 소유 파일이 생기지 않게 한다.
24
24
  #