seokang-sk 0.6.2 → 0.7.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.
Files changed (29) hide show
  1. package/README.MD +15 -11
  2. package/docs/playbooks/backend-implementation.md +9 -0
  3. package/docs/playbooks/harness-workflow.md +9 -5
  4. package/docs/policies/context-and-track.md +8 -8
  5. package/docs/policies/core-safety.md +30 -51
  6. package/docs/setup/fork-contributor-guide.md +13 -12
  7. package/docs/setup/github-free-collaboration.md +6 -4
  8. package/docs/setup/sk-cli-guide.md +19 -21
  9. package/docs/templates/impact-map.md +2 -2
  10. package/docs/templates/task-contract.md +3 -3
  11. package/package.json +3 -2
  12. package/profiles/seokang/backend.json +5 -14
  13. package/scripts/check_db_execution_boundary.mjs +208 -0
  14. package/scripts/check_db_execution_boundary_smoke.mjs +142 -0
  15. package/scripts/check_deploy_actor_guard.mjs +101 -29
  16. package/scripts/check_docs_integrity.mjs +21 -21
  17. package/scripts/check_fork_contribution.mjs +10 -7
  18. package/scripts/check_git_secret_guard.mjs +2 -2
  19. package/scripts/check_git_secret_guard_smoke.mjs +4 -0
  20. package/scripts/check_operator_guard.mjs +31 -43
  21. package/scripts/check_sk_cli_smoke.mjs +95 -120
  22. package/scripts/check_work_start_preflight.mjs +11 -10
  23. package/scripts/operator_identity.mjs +23 -43
  24. package/scripts/sk.mjs +93 -50
  25. package/starters/backend/build.gradle +0 -1
  26. package/starters/backend/src/main/resources/application.properties +1 -0
  27. package/starters/backend/src/test/kotlin/__PACKAGE_PATH__/{SecurityIntegrationTest.kt → SecurityWebSliceTest.kt} +7 -7
  28. package/starters/backend/src/test/kotlin/__PACKAGE_PATH__/ApplicationContextTest.kt +0 -12
  29. package/starters/backend/src/test/resources/application-test.properties +0 -6
package/README.MD CHANGED
@@ -12,7 +12,7 @@
12
12
  - [Node.js](https://nodejs.org/) 20 이상
13
13
  - [Git](https://git-scm.com/downloads)
14
14
 
15
- Git write, 배포, DB 영향 구현을 수행하려면 [GitHub CLI](https://cli.github.com/)도 설치하고 `gh auth login`으로 계정을 연결해야 합니다. 숫자형 GitHub user ID로 OWNER/NON_OWNER를 구분하며, 미인증 상태나 GitHub CLI가 없는 환경은 write/deploy가 자동 차단됩니다.
15
+ 개인 fork push와 PR을 만들 때는 [GitHub CLI](https://cli.github.com/)를 설치하고 `gh auth login`으로 계정을 연결합니다. GitHub CLI가 없거나 session이 만료되어도 local 코드·DB 코드 작성과 commit은 계속할 수 있으며, push/PR만 복구 뒤 이어서 진행합니다.
16
16
 
17
17
  Windows에서는 Git을 설치할 때 함께 제공되는 **Git Bash**를 사용하세요. macOS에서는 **터미널**을 사용하면 됩니다.
18
18
 
@@ -63,7 +63,7 @@ sk help
63
63
 
64
64
  GitHub Free에서는 repository별 최소 권한을 적용합니다. `km-*` 4개는 접근 없음, `seokang-codex-setting`은 Read 전용·fork 금지, 나머지 승인된 4개만 개인 private fork와 PR을 허용합니다. SeoKang OWNER는 `fork-contributors` team에 넣지 않습니다.
65
65
 
66
- 새 스레드의 첫 작업에서는 OWNER가 열린 원본 PR을 먼저 확인하고, NON_OWNER는 `selink-lab` upstream default branch를 `--ff-only`로 갱신합니다. `$sk-git`은 NON_OWNER branch의 기존 PR을 확인한 뒤 없으면 제목·본문을 만들어 PR까지 자동 생성합니다.
66
+ 새 스레드의 첫 작업에서는 local remote topology와 worktree를 먼저 확인합니다. 개인 fork 작업자는 `selink-lab` upstream default branch를 `--ff-only`로 갱신하고, `$sk-git`은 기존 PR을 확인한 뒤 없으면 제목·본문을 만들어 PR까지 자동 생성합니다.
67
67
 
68
68
  `$sk-git`은 add 전 worktree와 commit 전 staged index를 검사하며, 새 secret 파일이나 고신뢰 token을 탐지하면 로컬 파일을 삭제하지 않고 commit/push를 hard-fail합니다.
69
69
 
@@ -260,12 +260,14 @@ Windows Git Bash에서는 사용자 경로에 맞춰 `cd /c/Users/<user>/.agents
260
260
  - `sk help <command>`: 명령별 옵션과 예시 확인
261
261
  - `sk init --cwd /path/to/project`: 다른 프로젝트 초기화
262
262
  - `sk status --cwd /path/to/project`: 다른 프로젝트 상태 확인
263
- - `sk identity status`: 현재 GitHub operator 상태 확인
264
- - `sk guard implementation --db-impact`: DB 영향 구현 owner preflight
265
- - `sk guard git --action push --branch <name> --repo <name>`: repository/branch/action별 Git write preflight
263
+ - `sk identity status`: 선택적 GitHub operator 진단 정보 확인
264
+ - `sk guard implementation --db-impact`: 이전 버전 호환용 안내. DB 코드 작성은 허용하고 실행은 금지
265
+ - `sk guard db-execution`: local test/CI/build/deploy 전에 production DB 자동 실행 경로 검사
266
+ - `sk guard git --action push --branch <name> --repo <name>`: OWNER main push와 NON_OWNER 작업 branch/PR 경계 확인
266
267
  - `sk guard stage pre-add|pre-commit <path ...>`: intended commit path와 Git index 일치 검사
267
268
  - `sk guard secrets --worktree` / `--staged` / `--outbound --remote origin`: add, commit, push 직전 secret hard-fail
268
- - `sk guard deploy --environment <name> --artifact <type> --action <action> --db-impact-status <status>`: 배포 권한 preflight
269
+ - `sk guard deploy --environment <name> --artifact <type> --action <action> --db-impact-status <status>`: 배포 credential 및 DB 무실행 경계 안내
270
+ - 구현/commit/작업 branch는 identity 확인이나 cache를 요구하지 않는다. OWNER의 canonical `main`/`master` 직접 push와 배포는 GitHub ACL·OWNER credential을 실제 경계로 사용하고, NON_OWNER는 개인 fork PR까지만 진행한다.
269
271
  - [상세 CLI 가이드](docs/setup/sk-cli-guide.md)를 기준 문서로 사용
270
272
 
271
273
  ---
@@ -410,13 +412,15 @@ sk search "reviewer"
410
412
  - 일반 서버 프로젝트: 원격 서버/NAS 업로드 + 재시작
411
413
  - `.agents/skills` 같은 `seokang-skill` 프로젝트: `npm publish`
412
414
 
413
- 배포 권한은 아래처럼 분리합니다.
415
+ 권한은 아래처럼 분리합니다.
414
416
 
415
- - NON_OWNER: 개인 private fork의 작업 branch push와 `selink-lab` 원본 PR까지만 허용. 모든 배포 mutation 차단
416
- - OWNER: main/master write와 merge, production 배포, npm publish, rollback, tag/release 허용
417
- - UNKNOWN: Git write와 모든 배포 차단
417
+ - contributor: DB 코드와 SQL까지 개인 private fork의 작업 branch에 작성·push하고 `selink-lab` 원본 PR 생성
418
+ - OWNER: canonical `main`/`master` 직접 push, contributor PR 검토·merge, production 배포, npm publish, rollback, tag/release
419
+ - NON_OWNER: canonical `main`/`master` push와 모든 배포 mutation 금지, 개인 fork 작업 branch와 원본 PR까지만 허용
418
420
 
419
- 모든 배포 스크립트는 build/upload/restart/publish 전에 `sk guard deploy`를 실행합니다. local/preview/staging/production 구분과 관계없이 실제 배포 mutation은 OWNER만 진행합니다. `DEPLOY_ISOLATED`와 `DEPLOY_ISOLATION_EVIDENCE`는 기존 local config 호환 필드이며 NON_OWNER 권한을 열지 않습니다.
421
+ 모든 배포 스크립트는 build/upload/restart/publish 전에 `sk guard deploy`와 DB execution boundary를 확인합니다. 실제 배포는 OWNER만 보유한 SSH/npm/API/CDN credential이 있어야 진행되며 GitHub session은 권한 근거로 쓰지 않습니다.
422
+
423
+ 별도 테스트/개발/로컬 DB는 없습니다. DB 코드·SQL·migration 파일은 작성하고 PR로 검토할 수 있지만 Codex, local test, CI, deploy, start/restart script는 migration/DDL/DML/backfill/seed를 실행하지 않습니다. 실제 반영은 OWNER 사용자가 별도 IDE/DB 도구에서 수동 실행합니다.
420
424
 
421
425
  이 로컬 guard는 실수 방지층입니다. GitHub Free private 저장소의 실제 차단은 `selink-lab` 원본 Read 권한, 개인 private fork/PR, OWNER만 보유한 SSH/npm/DB/API/CDN credential로 구성합니다. fork PR Actions에는 write token, secrets, variables를 전달하지 않고 OWNER 승인 후 workflow를 실행합니다.
422
426
 
@@ -47,6 +47,15 @@
47
47
  - 복잡한 분기 이유
48
48
  - 위험한 query 의도
49
49
 
50
+ ## 3-1. Production-Only DB Boundary
51
+
52
+ - SeoKang 환경에는 별도 테스트/개발/로컬 DB가 없으므로 모든 DB 연결 target을 production으로 간주한다.
53
+ - repository/query/SQL/migration 코드는 작성할 수 있지만 local test, CI, runtime verification에서 실제 DB에 실행하지 않는다.
54
+ - DB 영향 검증은 compile/typecheck, mock 단위 테스트, SQL 정적 lint/comment 검토로 제한한다.
55
+ - local compile/test/build 전에는 `sk guard db-execution`을 통과하고, CI에서도 test/build보다 먼저 같은 검사를 실행한다.
56
+ - Flyway/Liquibase, ORM schema sync, seed/backfill, startup migration을 실행하지 않는다.
57
+ - 실제 schema/data 변경은 `$sk-db` 산출물을 OWNER 사용자가 별도 IDE/DB 도구에서 수동 실행한다.
58
+
50
59
  ## 4. Cleanup And Naming
51
60
 
52
61
  - 변경 범위 안의 미사용 service/helper/query/config 코드는 같은 턴에 제거한다.
@@ -36,14 +36,18 @@
36
36
 
37
37
  ## 3. Deterministic Check Selection
38
38
 
39
- - impact map에서 DB 영향이 `있음` 또는 `미확인`이면 파일 수정 전에 아래 preflight를 먼저 실행한다.
40
- - `sk guard implementation --db-impact`
41
- - 결과가 `NON_OWNER`, `UNKNOWN`, `DENY`이면 구현 파일을 수정하지 않는다.
39
+ - impact map에서 DB 영향이 `있음` 또는 `미확인`이어도 GitHub actor/cache 상태로 코드나 SQL 파일 작성을 차단하지 않는다.
40
+ - DB 영향 검증은 production DB 연결 없이 compile/typecheck, mock test, SQL 정적 검사로 제한한다.
41
+ - local test/build를 선택했다면 실행 직전에 `sk guard db-execution`을 통과시킨다. CI workflow도 실제 test/build 앞에 이 command가 없으면 완료 처리하지 않는다.
42
42
  - 아래 체크는 `필요한 파일을 실제로 건드렸을 때만` 실행한다.
43
43
  - config / env / properties / application 설정을 수정했으면:
44
44
  - `node scripts/check_no_unauthorized_defaults.mjs <path ...>`
45
45
  - DDL / migration SQL을 수정했으면:
46
46
  - `node scripts/check_ddl_comments.mjs <path ...>`
47
+ - CI/deploy/startup DB 실행 경계를 수정했으면:
48
+ - `sk guard db-execution`
49
+ - `node scripts/check_db_execution_boundary.mjs <project-root>`
50
+ - `node scripts/check_db_execution_boundary_smoke.mjs`
47
51
  - `docs/**`, `skills/**`, `README*`를 수정했으면:
48
52
  - `node scripts/check_docs_integrity.mjs <path ...>`
49
53
  - `sk` CLI 또는 bootstrap/status 동작을 수정했으면:
@@ -54,10 +58,10 @@
54
58
  - `node scripts/check_automation_safety.mjs`
55
59
  - Codex 기본/agent 모델 설정을 수정했으면:
56
60
  - `node scripts/check_codex_model_routing.mjs`
57
- - operator identity policy / guard CLI를 수정했으면:
61
+ - 선택적 operator identity 진단 또는 Git/배포 guard CLI를 수정했으면:
58
62
  - `node scripts/check_operator_guard.mjs`
59
63
  - `node scripts/check_sk_cli_smoke.mjs`
60
- - deploy actor gate / 배포 script preflight를 수정했으면:
64
+ - deploy credential / DB 무실행 preflight를 수정했으면:
61
65
  - `node scripts/check_deploy_actor_guard.mjs`
62
66
  - `node scripts/check_operator_guard.mjs`
63
67
  - `node scripts/check_sk_cli_smoke.mjs`
@@ -30,15 +30,15 @@
30
30
  - `git status --porcelain=v2 --branch`
31
31
  - `git branch --show-current`
32
32
  - `git remote -v`
33
- - `sk identity status --json`
34
- - remote URL에서 repository name을 확인하고 원본이 `selink-lab/<repo>`인지 검증한다. remote, GitHub actor, repository name을 확인할 수 없으면 자동 동기화하지 않는다.
33
+ - 작업 시작에는 GitHub identity/cache를 확인하지 않는다. `gh` 미설치, 미인증, session 만료는 local edit/test/commit과 DB 코드 작성을 막지 않는다.
34
+ - remote URL에서 repository name과 `canonical origin` 또는 `개인 fork origin + selink-lab upstream` topology를 확인한다. remote/repository name을 확인할 수 없으면 자동 동기화하지 않는다.
35
35
  - 원본 default branch는 hardcode하지 않고 아래처럼 조회한다.
36
36
  - `gh repo view selink-lab/<repo> --json defaultBranchRef --jq '.defaultBranchRef.name'`
37
37
  - dirty worktree, detached HEAD, 진행 중인 merge/rebase가 있으면 branch switch나 fast-forward merge를 실행하지 않고 현재 상태를 먼저 보고한다.
38
38
  - merge: `git rev-parse -q --verify MERGE_HEAD`
39
39
  - rebase: `git rev-parse --git-path rebase-merge`, `git rev-parse --git-path rebase-apply`로 경로를 구한 뒤 directory 존재 확인
40
40
 
41
- #### OWNER 시작 순서
41
+ #### Canonical origin 시작 순서
42
42
 
43
43
  1. `origin=github.com/selink-lab/<repo>`이고 확인한 repository name과 일치하는지 먼저 검증한다. 개인 fork나 다른 host의 origin이면 fetch/merge하지 않는다.
44
44
  2. 새 작업 전에 원본의 열린 PR을 최대 100건 조회한다.
@@ -48,16 +48,16 @@
48
48
  5. merge 뒤 `git rev-list --left-right --count HEAD...origin/<default-branch>`가 정확히 `0 0`인지 확인한다. local default가 ahead/diverged면 reset/rebase하지 않고 중단한다.
49
49
  6. 다른 작업 branch에 있으면 원격 fetch와 비교까지만 수행하고 임의로 branch를 전환하지 않는다.
50
50
 
51
- #### NON_OWNER 시작 순서
51
+ #### Private fork 시작 순서
52
52
 
53
- 1. `origin=github.com/<authenticated-login>/<repo>`, `upstream=github.com/selink-lab/<repo>` private-fork topology를 확인한다.
54
- 2. 현재 branch의 PR을 `gh pr list --repo selink-lab/<repo> --state all --limit 100 --head <login>:<current-branch> --json number,state,mergedAt,url,baseRefName`으로 확인한다. OPEN이면 기존 PR을 보고하고, CLOSED/MERGED 이력이 있으면 반드시 새 branch를 사용한다.
53
+ 1. `origin=github.com/<fork-owner>/<repo>`, `upstream=github.com/selink-lab/<repo>` private-fork topology를 remote URL로 확인한다.
54
+ 2. push/PR handoff 시 현재 branch의 PR을 `gh pr list --repo selink-lab/<repo> --state all --limit 100 --head <fork-owner>:<current-branch> --json number,state,mergedAt,url,baseRefName`으로 확인한다. OPEN이면 기존 PR을 보고하고, CLOSED/MERGED 이력이 있으면 반드시 새 branch를 사용한다.
55
55
  3. worktree가 clean할 때 `git fetch upstream --prune` → `git switch <default-branch>` → `git merge --ff-only upstream/<default-branch>` 순서로 원본 최신 코드를 로컬에 반영한다.
56
56
  4. merge 뒤 `git rev-list --left-right --count HEAD...upstream/<default-branch>`가 정확히 `0 0`인지 확인한다. local default가 ahead/diverged면 reset/rebase하지 않고 중단한다.
57
- 5. 동기화된 default branch에서 허용 prefix의 새 작업 branch를 만든다. NON_OWNER는 fork의 default branch나 upstream에 push하지 않는다.
57
+ 5. 동기화된 default branch에서 허용 prefix의 새 작업 branch를 만든다. private fork 작업자는 fork의 default branch나 upstream에 push하지 않는다.
58
58
  6. fast-forward가 불가능하거나 conflict가 예상되면 merge commit, rebase, force push로 임의 해결하지 않고 OWNER에게 전달한다.
59
59
 
60
- - network/API 오류를 최신 상태로 간주하지 않는다. fetch/PR 조회가 실패하면 실패 범위와 남은 위험을 밝힌다.
60
+ - network/API 오류를 최신 상태로 간주하지 않는다. fetch/PR 조회가 실패해도 local edit/test/commit은 진행하고, remote sync/push/PR만 `pending`으로 남기며 실패 범위와 stale-base 위험을 밝힌다.
61
61
 
62
62
  ## 2. Track Mapping
63
63
 
@@ -29,7 +29,7 @@
29
29
  - 직접 허용 범위는 read-only 증거 확보 목적의 `SELECT`, `SHOW`, `DESCRIBE`, `EXPLAIN`으로 한정한다.
30
30
  - 직접 조회 전 필수 조건:
31
31
  - read-only 권한 또는 동등한 안전장치 확인
32
- - 가능하면 로컬/개발/스테이징/replica 우선
32
+ - SeoKang 환경에는 별도 로컬/개발/테스트 DB가 없으므로 연결 대상을 production으로 간주
33
33
  - `LIMIT`, 선택적 `WHERE`, timeout 우선
34
34
  - 민감정보 최소 조회, 필요 시 마스킹/샘플링
35
35
  - 금지 범위:
@@ -77,57 +77,36 @@
77
77
  - 같은 문장을 여러 skill에 다시 복제하지 않는다.
78
78
  - 반복 마찰의 기본 대응은 `append-only`가 아니라 `이관 / 축소 / 교체`다.
79
79
 
80
- ## 8. Actor Authorization / DB-Impact Implementation Gate
81
-
82
- - DB 영향 구현은 파일 수정 전에 반드시 `sk guard implementation --db-impact`를 실행한다.
83
- - 권한 판정은 GitHub CLI로 `github.com`에 실시간 조회한 authenticated user의 숫자형 GitHub user ID만 사용한다.
84
- - policy와 API 호출의 issuer/host는 `github.com`으로 고정한다. GitHub Enterprise나 `GH_HOST` 기본값을 owner 판정에 섞지 않는다.
85
- - `git config user.name/user.email`, Git remote owner, OS 사용자명/홈 경로, Codex 로그인 방식, prompt 자기진술은 권한 근거로 사용하지 않는다.
86
- - actor 상태는 아래 3개로 고정한다.
87
- - `OWNER`: `profiles/seokang/operator-access.json`의 numeric user ID와 일치
88
- - `NON_OWNER`: 인증된 numeric user ID가 owner 정책과 불일치
89
- - `UNKNOWN`: GitHub CLI 부재, 미인증, 네트워크/API 오류, 응답 오류, 정책 오류
90
- - `OWNER`만 DB 영향 구현을 진행할 수 있다. `NON_OWNER`와 `UNKNOWN`은 fail-closed로 구현을 중단한다.
91
- - 차단 상태에서는 planning, read-only 코드 분석, DB safe-read만 허용한다. 제품 코드, SQL, migration, 테스트 같은 구현 파일은 수정하지 않는다.
92
- - DB 영향에는 아래를 포함한다.
93
- - schema, migration, DDL
94
- - DML, backfill
95
- - repository, ORM, query
96
- - transaction, lock
97
- - persistence connection/config와 저장 흐름
98
- - 영향 맵에서 DB 영향이 `있음` 또는 `미확인`이면 같은 gate를 적용한다. `없음`이 근거로 확정된 작업만 생략할 수 있다.
99
- - skill별 실행 위치:
100
- - `sk-feature`: task contract와 impact map 직후, 첫 파일 수정 전
101
- - `sk-bugfix`: 원인/수정 범위 확정 후, 첫 파일 수정 전
102
- - `sk-db`: `Mode: Migration`에서 SQL 파일 생성 전. `Mode: Safe-Read`는 면제
103
- - `sk-refactor`: DB/SQL 영향 발견 시 수정하지 않고 feature로 전환한 뒤 gate 적용
104
- - `sk-git`: DB 영향 변경의 add/commit/push 전
105
- - `sk-deploy`: DB 영향 artifact 또는 영향 미확인 server 배포 전
106
- - owner 판정은 DB schema/data 직접 변경 권한을 뜻하지 않는다. 이 문서의 DB Safe-Read 제한은 그대로 유지한다.
107
- - 이 gate는 협조적인 사용자의 실수 방지층이다. 로컬 파일/실행 경로를 바꿀 수 있는 사용자를 막는 보안 경계로 간주하지 않는다.
108
- - 실제 보호는 비소유자 DB write credential 미지급, 원본 저장소 Read 권한, private fork/PR, 보호된 CI environment 승인을 함께 사용한다.
109
-
110
- ## 8-1. Git / Deploy Actor Capability Gate
111
-
112
- - Git write와 배포는 `profiles/seokang/operator-access.json`의 같은 numeric GitHub user ID 판정을 사용한다.
113
- - actor 상태별 기본 권한은 아래로 고정한다.
114
- - `OWNER`: `main`/`master` write, tag/release, production 배포, npm publish, rollback 허용
115
- - `NON_OWNER`: 개인 private fork의 이름이 확인된 작업 branch push와 원본 저장소 PR까지만 허용. 모든 배포 mutation은 차단
116
- - `UNKNOWN`: Git write와 모든 배포 mutation 차단
117
- - Git write 전에는 현재 branch를 확인하고 아래를 실행한다.
118
- - `sk guard git --action push --branch <current-branch> --repo <repo>`
119
- - tag/release 전에는 같은 명령의 `--action tag` 또는 `--action release`를 별도로 통과한다.
120
- - `NON_OWNER`는 원본 `selink-lab` 저장소에 직접 add/commit/push하지 않는다. 개인 private fork의 `origin`에 작업 branch를 push하고 `upstream` 원본으로 PR을 전달하며 merge는 OWNER가 담당한다.
121
- - NON_OWNER remote topology는 `origin=github.com/<authenticated-login>/<repo>`, `upstream=github.com/selink-lab/<repo>`로 고정한다. host/owner/repository/fork parent 확인이 실패하면 push하지 않는다.
122
- - GitHub Free private 저장소에서는 branch ruleset이 실제 차단 경계가 아니다. 원본 저장소의 NON_OWNER 권한을 Read로 유지하고 production SSH/npm/DB/API/CDN credential을 제공하지 않는 것이 실제 보호 경계다.
123
- - Organization에서 private repository forking을 허용하되 fork PR Actions에는 write token, Actions secrets, variables를 전달하지 않는다. fork PR workflow는 OWNER 승인 후에만 실행한다.
80
+ ## 8. DB Authoring / Production Execution Boundary
81
+
82
+ - DB 관련 코드, repository/query, SQL, migration, DDL/DML, verification, rollback 파일은 OWNER/NON_OWNER/UNKNOWN 구분 없이 작성·검토·commit·개인 fork PR까지 진행할 수 있다.
83
+ - DB 영향 구현을 시작하기 위한 GitHub identity/cache/actor gate는 사용하지 않는다. `sk guard implementation --db-impact`는 이전 설치 호환용 안내 명령일 뿐 권한 판정이 아니다.
84
+ - SeoKang 환경에는 테스트/개발/로컬 DB가 따로 없고, 연결 가능한 모든 DB는 production으로 간주한다.
85
+ - Codex, 로컬 테스트, CI, deploy, start/restart script는 schema/data 변경을 절대 실행하지 않는다.
86
+ - 금지되는 자동 실행에는 migration CLI, seed/backfill, SQL client write 실행, Flyway/Liquibase startup migration, Hibernate DDL create/update, ORM synchronize가 포함된다.
87
+ - DB 영향 코드 검증은 DB 연결 없이 compile/typecheck, mock 단위 테스트, SQL 정적 lint/comment 검토로 제한한다. Testcontainers나 임시 DB를 새로 가정하지 않는다.
88
+ - local test/build를 실행하기 전과 CI workflow의 첫 검증 단계에서 `sk guard db-execution`을 통과해야 한다. CI에 이 단계가 없거나 DB credential marker가 있으면 실행하지 않는다.
89
+ - fork PR workflow에는 production DB connection string, SSH/npm/API/CDN credential, write token, Actions secrets/variables를 전달하지 않는다.
90
+ - 모든 deploy artifact는 literal key/value local config와 project/package root를 `scripts/check_db_execution_boundary.mjs`로 검사한다. migration framework가 있으면 production startup disable 근거를 확인하지 못한 상태로 배포하지 않는다.
91
+ - 일반 애플리케이션 query/DML은 OWNER가 PR을 검토하고 배포한 뒤 production runtime에서만 동작한다. 로컬/CI 검증을 위해 production DB에 실행하지 않는다.
92
+ - 실제 migration/DDL/DML/backfill이 필요하면 `$sk-db`가 실행 가능한 파일, 검증 쿼리, 락/성능 위험, rollback을 제공하고 OWNER 사용자가 별도 IDE/DB 도구에서 수동 실행한다.
93
+ - 이 절은 제2절의 명시적 read-only safe-read를 막지 않지만 safe-read 결과를 DB mutation 실행 허가로 사용하지 않는다.
94
+
95
+ ## 8-1. Git / Deploy Capability Boundary
96
+
97
+ - 로컬 GitHub numeric identity 확인은 선택 진단일 뿐이며 enrollment cache를 생성하거나 작업 권한 근거로 사용하지 않는다. 작업 시작, DB 코드 작성, commit, 작업 branch push, deploy에는 이를 요구하지 않는다.
98
+ - 일반 Git 흐름은 local remote topology와 실제 GitHub repository ACL로 판단한다.
99
+ - OWNER + canonical origin: `main`/`master`에 직접 push 가능
100
+ - NON_OWNER + 개인 fork origin + `selink-lab` upstream: 개인 fork 작업 branch push 후 upstream PR
101
+ - `$sk-git`과 `sk guard git`은 로컬 `gh` session으로 OWNER를 재판정하지 않는다. canonical `main`/`master` push는 GitHub ACL이 OWNER credential만 승인하고, NON_OWNER는 개인 fork PR로 요청한다.
102
+ - tag/release와 canonical mutation은 GitHub ACL이 최종 승인한다. 배포를 유발하는 tag/release는 OWNER가 main 반영 후 수행한다.
103
+ - GitHub CLI 인증이나 network가 없으면 local edit/test/commit을 중단하지 않는다. push/PR 조회·생성만 `push pending`으로 보존한다.
104
+ - 배포 preflight는 GitHub actor/session을 조회하지 않는다. 실제 차단 경계는 OWNER만 보유한 SSH key, npm publish 권한, production API/CDN/DB credential과 원격 계정 권한이다.
105
+ - server/front/npm deploy script는 credential/config 확인 실패 시 upload/restart/publish 전에 종료한다.
106
+ - GitHub Free private 저장소에서는 원본 저장소의 contributor 권한을 Read로 유지하고 production credential을 제공하지 않는 것이 실제 보호 경계다.
107
+ - Organization에서 private repository forking을 허용하되 fork PR Actions에는 write token, Actions secrets, variables를 전달하지 않는다. fork PR workflow는 OWNER 검토 후 실행한다.
124
108
  - 조직 전체 2FA 강제는 모든 active member가 2FA를 활성화한 것을 확인한 뒤에만 켠다. 미활성 member가 있는 상태에서는 접근 상실을 막기 위해 강제하지 않는다.
125
- - 배포는 build, credential 확인, upload, restart, publish보다 먼저 아래를 실행한다.
126
- - `sk guard deploy --environment <name> --artifact <frontend|server|npm> --action <deploy|rollback> --db-impact-status <none|yes|unknown>`
127
- - local/preview/staging/production, frontend/server/npm, deploy/rollback을 포함한 모든 배포 mutation은 DB 영향 유무와 관계없이 OWNER 전용이다. NON_OWNER는 로컬 build/test까지만 수행할 수 있다.
128
- - `NON_OWNER` 작업 branch는 `codex/`, `feature/`, `fix/` 등 policy에 고정된 작업 prefix만 허용한다. develop/release/production/gh-pages/ref-qualified 이름은 허용하지 않는다.
129
- - DB impact가 `yes` 또는 `unknown`이면 deploy capability gate와 별도로 `sk guard implementation --db-impact`도 통과해야 한다.
130
- - 로컬 guard는 직접 `git`, `ssh`, `npm` 명령이나 파일 수정으로 우회할 수 있는 협조적 안전장치다. 실제 보호는 upstream Read 권한, private fork/PR, OWNER만 보유한 배포 credential, 보호된 production CI 승인으로 구성한다.
109
+ - 로컬 guard는 협조적인 실수 방지층이며 실제 GitHub ACL과 credential 분리를 대신하지 않는다.
131
110
 
132
111
  ### Repository Access Matrix
133
112
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  - GitHub Free를 유지하면서 NON_OWNER가 `selink-lab` 원본 저장소를 직접 수정하지 않게 한다.
6
6
  - 친구는 개인 private fork에서 작업 브랜치를 push하고 원본 저장소로 Pull Request만 보낸다.
7
- - `main` 병합, 모든 배포, tag/release, npm publish, rollback, DB 영향 구현은 SeoKang이 맡는다.
7
+ - DB 관련 코드와 SQL까지 작성해 PR로 전달할 수 있다. `main` 병합, 모든 배포, tag/release, npm publish, rollback, 실제 DB 변경 실행은 SeoKang이 맡는다.
8
8
 
9
9
  ## 1. 최초 계정 준비
10
10
 
@@ -14,7 +14,7 @@ GitHub CLI와 SeoKang 스킬을 설치한다. Organization 2FA 강제는 현재
14
14
 
15
15
  ```bash
16
16
  brew install gh
17
- gh auth login
17
+ gh auth login -h github.com
18
18
  npm install -g seokang-sk@latest
19
19
  sk setup --skip-notion
20
20
  ```
@@ -23,19 +23,18 @@ sk setup --skip-notion
23
23
 
24
24
  ```bash
25
25
  winget install --id GitHub.cli
26
- gh auth login
26
+ gh auth login -h github.com
27
27
  npm install -g seokang-sk@latest
28
28
  sk setup --skip-notion
29
29
  ```
30
30
 
31
- 설치 후 실제 로그인 계정과 권한을 확인한다.
31
+ 설치 후 상태를 확인한다.
32
32
 
33
33
  ```bash
34
- sk identity status
35
34
  sk check
36
35
  ```
37
36
 
38
- 친구 계정은 `NON_OWNER`가 정상이다. `UNKNOWN`이면 개발을 시작하지 말고 `gh auth login`을 다시 확인한다.
37
+ GitHub identity 등록은 local 구현의 선행 조건이 아니다. `gh` 인증이 끊겨도 코드 작성과 commit을 계속하고 push/PR만 인증 복구 후 이어서 진행한다.
39
38
 
40
39
  ## 2. 작업 가능한 저장소 확인
41
40
 
@@ -98,12 +97,11 @@ $sk-bugfix 문제가 발생한 부분을 고쳐줘
98
97
  $sk-git
99
98
  ```
100
99
 
101
- DB 영향 구현은 친구 계정에서 차단된다. DB 변경이 필요해 보이면 구현하지 말고 계획과 영향 범위만 SeoKang에게 전달한다.
102
- `$sk-deploy`는 environment와 무관하게 차단되므로 배포 요청은 SeoKang에게 전달한다.
100
+ DB 관련 코드, repository/query, SQL, migration, verification, rollback 파일까지 작성해 PR로 전달할 수 있다. 단 모든 DB target은 production이므로 Codex/local test/CI에서 실행하지 않는다.
101
+ `$sk-deploy`는 OWNER만 가진 SSH/npm/배포 credential이 없어 실제 mutation을 진행할 수 없으므로 배포 요청은 SeoKang에게 전달한다.
103
102
 
104
103
  `$sk-git`은 아래를 확인해야 한다.
105
104
 
106
- - GitHub actor가 `NON_OWNER`
107
105
  - 현재 branch가 허용된 작업 prefix
108
106
  - `origin`이 친구 개인 fork
109
107
  - `upstream`이 `selink-lab` 원본
@@ -112,6 +110,8 @@ DB 영향 구현은 친구 계정에서 차단된다. DB 변경이 필요해 보
112
110
 
113
111
  조건을 통과하면 `$sk-git`은 commit/push 뒤 OPEN PR URL을 반환하거나, PR 이력이 없을 때 제목과 본문을 자동 생성해 `selink-lab` 원본 PR까지 만든다. CLOSED/MERGED PR branch는 재사용하지 않고 새 branch를 요구한다.
114
112
 
113
+ 일반 작업 branch와 local commit은 identity/cache 없이 진행한다. push나 PR 인증이 실패하면 local commit을 보존한 채 `push pending`으로 보고하며, 인증 복구 후 이어서 처리한다.
114
+
115
115
  `$sk-git`은 add 전에 worktree, commit 전에 staged index, push 전에 outbound commit history를 각각 검사한다. 새 `.env*`, deploy local config, private key/keystore/credential 파일 또는 고신뢰 token이 탐지되면 확인 없이 hard-fail하며 push하지 않는다. 탐지된 값은 출력하지 않고 로컬 파일도 삭제하지 않는다. 기존 staged path도 intended commit path와 다르면 commit하지 않는다.
116
116
 
117
117
  ## 6. 원본 저장소로 PR 생성
@@ -151,9 +151,10 @@ git switch -c feature/<다음-작업명>
151
151
  | `Read 전용` 저장소 분석 | 허용 |
152
152
  | `접근 없음` 저장소 clone/fetch | GitHub 권한으로 차단 |
153
153
  | 원본 main/feature branch 직접 push | GitHub Read 권한으로 차단 |
154
- | DB 영향 구현 | 스킬 actor gate로 차단 |
155
- | local/preview/staging/production 배포 | 스킬 actor gate와 credential 미지급으로 차단 |
156
- | npm/tag/release/rollback | 스킬 actor gate와 credential 분리로 차단 |
154
+ | DB 코드·SQL·migration 작성과 PR | 허용, production DB 실행 금지 |
155
+ | 실제 DB schema/data 변경 | credential 미지급 + OWNER 수동 실행으로 차단 |
156
+ | local/preview/staging/production 배포 | OWNER credential 미지급으로 차단 |
157
+ | npm/tag/release/rollback | GitHub/npm/배포 ACL과 credential로 차단 |
157
158
 
158
159
  ## 9. 계정 또는 접근 제거 시
159
160
 
@@ -53,9 +53,11 @@ GitHub Free private repository에는 branch ruleset을 강제할 수 없으므
53
53
 
54
54
  - 원본 upstream repository의 친구 권한은 Read (`upstream Read`)
55
55
  - 친구 push 대상은 개인 private fork뿐
56
- - 원본 반영은 PR과 OWNER merge만 사용
56
+ - 친구 계정의 원본 반영은 개인 fork PR과 OWNER merge만 사용하며, OWNER 자신의 작업은 canonical main에 직접 반영 가능
57
57
  - DB write 및 SSH/npm/API/CDN/production credential은 친구에게 제공하지 않음
58
- - 모든 배포 mutation은 `sk guard deploy`에서도 OWNER 전용
58
+ - 모든 배포 mutation은 OWNER만 보유한 SSH/npm/API/CDN credential과 원격 ACL로 제한
59
+ - DB 코드·SQL 작성은 fork PR로 허용하되 Codex/local test/CI/deploy/startup의 DB schema/data 실행은 금지
60
+ - 실제 DB 변경은 OWNER가 별도 IDE/DB 도구에서 수동 실행
59
61
 
60
62
  로컬 skill guard는 실수 방지층이며 GitHub 권한과 credential 분리를 대신하지 않는다.
61
63
 
@@ -74,6 +76,6 @@ GitHub Free private repository에는 branch ruleset을 강제할 수 없으므
74
76
 
75
77
  ## 새 작업 시작 역할
76
78
 
77
- - SeoKang(OWNER): 원본 저장소의 열린 PR과 diff/checks를 먼저 확인하고 현재 요청과 충돌하는지 판단한 뒤 새 작업을 시작한다.
78
- - 친구(NON_OWNER): upstream의 실제 default branch를 fetch하고 local default branch를 `--ff-only`로 갱신한 뒤 새 작업 branch를 만든다.
79
+ - Canonical origin: 원본 저장소의 열린 PR과 diff/checks를 확인하되 GitHub session 실패가 local 작업을 막지 않게 한다.
80
+ - Private fork origin: upstream의 실제 default branch를 fetch하고 local default branch를 `--ff-only`로 갱신한 뒤 새 작업 branch를 만든다.
79
81
  - 두 계정 모두 dirty worktree, merge/rebase 진행 상태, API/fetch 실패를 무시하고 자동 branch 전환하지 않는다.
@@ -80,7 +80,7 @@ sk setup
80
80
  - `sk setup --configure-notion`으로 사용자별 Notion workspace 위치를 로컬 파일에 분리할 수 있다.
81
81
  - `.sk/project-memory.json`, `.sk/notepad.md`를 통해 다음 세션이 이전 맥락을 먼저 읽을 수 있다.
82
82
  - `sk search`로 예전 Codex transcript를 다시 찾을 수 있다.
83
- - `sk identity status`와 `sk guard`로 DB 영향 구현, Git write, 배포 권한을 owner/non-owner 기준으로 제한하고 Git secret을 commit 전에 차단할 수 있다.
83
+ - `sk guard`로 DB 자동 실행과 Git secret을 차단하고, canonical main push와 실제 배포는 GitHub ACL·OWNER credential로 제한할 수 있다.
84
84
 
85
85
  ## 3. 처음 한 번만 해야 하는 것
86
86
 
@@ -264,35 +264,34 @@ sk status
264
264
 
265
265
  이 명령은 현재 프로젝트 기준 `.sk` 상태, 메모 파일 존재 여부, 최근 backup을 보여준다.
266
266
 
267
- ### 4-5. Operator 권한 확인
267
+ ### 4-5. PR / DB 무실행 / 배포 credential 경계
268
268
 
269
- DB 영향 구현은 GitHub CLI로 `github.com`에 실제 로그인된 사용자의 숫자형 user ID를 조회해 판정한다. Codex 로그인 방식, `git config`의 name/email, remote owner, OS 사용자명은 권한 근거로 사용하지 않는다. GitHub Enterprise나 `GH_HOST` 기본값은 owner 판정에 사용하지 않는다.
269
+ `sk identity status`는 현재 GitHub numeric identity를 보고 싶을 때만 쓰는 선택 진단 명령이다. cache를 생성하지 않으며 구현, DB 코드 작성, local commit, 작업 branch의 필수 preflight로 사용하지 않는다.
270
270
 
271
- 먼저 GitHub CLI를 설치하고 인증한다.
271
+ schema/migration/DML/repository/ORM/query/transaction/persistence 코드와 SQL 파일은 누구나 작성하고 개인 fork PR로 전달할 수 있다. 이전 버전 호환을 위한 아래 명령도 GitHub를 조회하지 않고 작성 허용/실행 금지만 안내한다.
272
272
 
273
273
  ```bash
274
- gh auth login
275
- sk identity status
274
+ sk guard implementation --db-impact
276
275
  ```
277
276
 
278
- schema/migration/DML/repository/ORM/query/transaction/lock/persistence config 또는 저장 흐름을 바꾸기 전에는 아래 preflight가 `ALLOW`여야 한다.
277
+ 별도 테스트/개발/로컬 DB는 없으며 모든 DB target은 production으로 간주한다. Codex, local test, CI, deploy, start/restart script는 migration/DDL/DML/backfill/seed를 실행하지 않는다. 검증은 compile/typecheck, mock 단위 테스트, SQL 정적 검사로 제한하고 실제 반영은 OWNER 사용자가 IDE/DB 도구에서 수동 실행한다.
278
+
279
+ local test/build 전과 CI의 첫 검증 단계에는 아래 명령을 둔다. 이 검사는 DB 연결 test, Testcontainers, migration CLI, startup schema sync, CI DB credential을 탐지하면 종료 코드 `2`로 중단한다.
279
280
 
280
281
  ```bash
281
- sk guard implementation --db-impact
282
+ sk guard db-execution
282
283
  ```
283
284
 
284
- - `OWNER`: 구현 허용
285
- - `NON_OWNER`: 구현 차단
286
- - `UNKNOWN`: GitHub CLI 부재, 미인증, 네트워크/API 오류, 정책 오류를 포함하며 구현 차단
287
-
288
- Git write는 현재 branch와 action을 함께 검사한다.
285
+ Git write는 identity가 아니라 현재 branch와 remote topology를 검사한다.
289
286
 
290
287
  ```bash
291
288
  sk guard git --action push --branch codex/my-feature --repo price-advisor-spinks
292
289
  sk guard git --action tag --branch main --repo seokang-codex-setting
293
290
  ```
294
291
 
295
- - NON_OWNER는 이름이 확인된 작업 branch를 개인 private fork의 `origin`에 push하고 `selink-lab` 원본 `upstream`으로 PR을 만드는 것까지만 허용된다.
292
+ - 개인 fork 작업자는 remote URL에서 확인한 `<fork-owner>`의 작업 branch를 `origin`에 push하고 `selink-lab` 원본 `upstream`으로 PR을 만든다.
293
+ - 일반 작업 branch와 `main`/`master` guard는 GitHub identity/cache를 사용하지 않는다. OWNER는 canonical main에 직접 push하고, NON_OWNER는 개인 fork 작업 branch와 PR까지만 진행하며 실제 구분은 GitHub ACL이 담당한다.
294
+ - push 인증/network 실패가 나도 local commit은 보존하고 `push pending`으로 보고한다.
296
295
 
297
296
  Git add 전과 commit 전에는 아래 두 검사를 순서대로 실행한다.
298
297
 
@@ -307,12 +306,11 @@ sk guard secrets --outbound --remote origin
307
306
  ```
308
307
 
309
308
  새 `.env*`, deploy local config, private key/credential 파일, 고신뢰 token 또는 outbound commit history의 secret이 탐지되면 종료 코드 `2`로 hard-fail한다. 출력에는 redaction된 파일과 rule name만 남기며 로컬 파일은 삭제하지 않는다.
310
- - main/master write, tag, release는 OWNER 전용이다.
311
- - UNKNOWN은 feature branch를 포함한 모든 Git write가 차단된다.
309
+ - tag/release와 canonical mutation은 실제 GitHub ACL이 최종 승인하며 배포를 유발하는 작업은 OWNER가 수행한다.
312
310
 
313
311
  친구 계정의 최초 설치, remote 구성, Codex 스킬 사용, PR 생성 절차는 [친구 계정 Private Fork 개발 가이드](./fork-contributor-guide.md)를 따른다.
314
312
 
315
- 배포는 environment, artifact, action, DB impact를 함께 검사한다.
313
+ 배포는 live GitHub identity를 검사하지 않는다. 실제 차단은 OWNER만 가진 SSH/npm/production credential과 원격 ACL이 담당한다.
316
314
 
317
315
  ```bash
318
316
  sk guard deploy \
@@ -324,11 +322,11 @@ sk guard deploy \
324
322
  --db-impact-status none
325
323
  ```
326
324
 
327
- - NON_OWNER는 local/preview/staging을 포함한 모든 배포 mutation이 차단된다. 로컬 build/test만 허용된다.
328
- - production, npm publish, rollback을 포함한 모든 배포는 OWNER 전용이다.
329
- - `yes`/`unknown` DB impact는 별도로 `sk guard implementation --db-impact`도 통과해야 한다.
325
+ - server deploy는 `scripts/check_db_execution_boundary.mjs <project-root>`를 먼저 통과해야 하며 startup migration/ORM schema sync 근거가 불명확하면 중단한다.
326
+ - production, npm publish, rollback을 포함한 모든 배포 credential은 OWNER 환경에만 둔다.
327
+ - fork PR/CI에는 production DB/SSH/npm/API/CDN secret과 write token을 전달하지 않는다.
330
328
 
331
- 차단 상태에서도 planning, read-only 코드 분석, DB safe-read는 가능하다. 이 로컬 guard는 실수 방지층이므로 실제 보호에는 원본 저장소 Read 권한, 개인 private fork/PR, DB write 및 모든 배포 credential 미지급을 함께 사용한다.
329
+ 실제 보호에는 원본 저장소 Read 권한, 개인 private fork/PR, DB write 및 모든 배포 credential 미지급을 함께 사용한다.
332
330
 
333
331
  ### 4-6. DB safe-read alias 맞추기
334
332
 
@@ -32,7 +32,7 @@
32
32
  ## 4. Check Selection
33
33
 
34
34
  - DB impact 결론 (`있음` | `없음` | `미확인`):
35
- - Actor gate 실행 여부와 결과:
36
- - Git/deploy capability gate 적용 시점:
35
+ - production DB 무실행 검증과 수동 실행 handoff:
36
+ - Git PR/deploy credential 경계 적용 시점:
37
37
  - 실행할 deterministic checks:
38
38
  - 해당 없음으로 닫는 checks:
@@ -24,9 +24,8 @@
24
24
  ### 반응형 작업 여부 (`요청 없음` | `명시 요청`)
25
25
  ### 보안 최종 점검 필요 여부 (`해당 없음` | `필수`)
26
26
  ### DB impact (`있음` | `없음` | `미확인`)
27
- ### Actor gate (`해당 없음` | `ALLOW` | `DENY`)
28
- ### Actor gate evidence (`sk guard implementation --db-impact` 실행 결과 또는 생략 근거)
29
- ### Git/deploy gate (`해당 없음` | `Git write 시 sk-git에서 실행` | `배포 시 sk-deploy에서 실행`)
27
+ ### DB 실행 경계 (`해당 없음` | `production 무실행 검증` | `OWNER 수동 실행 handoff`)
28
+ ### Git/deploy gate (`해당 없음` | `OWNER main 직접 반영` | `NON_OWNER PR` | `OWNER credential`)
30
29
 
31
30
  ## 4. 검증 계획
32
31
 
@@ -41,6 +40,7 @@
41
40
  | `check_no_unauthorized_defaults.mjs` | | | |
42
41
  | `check_codex_model_routing.mjs` | | | |
43
42
  | `check_ddl_comments.mjs` | | | |
43
+ | `check_db_execution_boundary.mjs` | | | |
44
44
  | `check_docs_integrity.mjs` | | | |
45
45
  | `check_operator_guard.mjs` | | | |
46
46
  | `check_deploy_actor_guard.mjs` | | | |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "seokang-sk",
3
- "version": "0.6.2",
3
+ "version": "0.7.0",
4
4
  "description": "SeoKang Codex 공용 설정과 스킬을 설치하는 CLI",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/selink-lab/seokang-codex-setting",
@@ -22,7 +22,7 @@
22
22
  "sk": "scripts/sk.mjs"
23
23
  },
24
24
  "scripts": {
25
- "check:harness": "npm run check:harness:defaults -- . && npm run check:harness:ddl-comments -- . && npm run check:harness:docs -- . && npm run check:harness:style && npm run check:harness:models && npm run check:harness:ui-router && npm run check:harness:automation && npm run check:harness:operator-guard && npm run check:harness:deploy-guard && npm run check:harness:fork-workflow && npm run check:harness:work-start && npm run check:harness:git-stage && npm run check:harness:git-secrets && npm run check:harness:npm-release && npm run check:harness:cli-smoke",
25
+ "check:harness": "npm run check:harness:defaults -- . && npm run check:harness:ddl-comments -- . && npm run check:harness:docs -- . && npm run check:harness:style && npm run check:harness:models && npm run check:harness:ui-router && npm run check:harness:automation && npm run check:harness:db-execution && npm run check:harness:operator-guard && npm run check:harness:deploy-guard && npm run check:harness:fork-workflow && npm run check:harness:work-start && npm run check:harness:git-stage && npm run check:harness:git-secrets && npm run check:harness:npm-release && npm run check:harness:cli-smoke",
26
26
  "check:harness:defaults": "node scripts/check_no_unauthorized_defaults.mjs",
27
27
  "check:harness:ddl-comments": "node scripts/check_ddl_comments.mjs",
28
28
  "check:harness:docs": "node scripts/check_docs_integrity.mjs",
@@ -30,6 +30,7 @@
30
30
  "check:harness:models": "node scripts/check_codex_model_routing.mjs",
31
31
  "check:harness:ui-router": "node scripts/check_ui_runtime_router.mjs",
32
32
  "check:harness:automation": "node scripts/check_automation_safety.mjs",
33
+ "check:harness:db-execution": "node scripts/check_db_execution_boundary_smoke.mjs",
33
34
  "check:harness:operator-guard": "node scripts/check_operator_guard.mjs",
34
35
  "check:harness:deploy-guard": "node scripts/check_deploy_actor_guard.mjs",
35
36
  "check:harness:fork-workflow": "node scripts/check_fork_contribution.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "starterVersion": "1.0.0",
3
+ "starterVersion": "1.1.0",
4
4
  "kind": "backend",
5
5
  "versions": {
6
6
  "springBoot": "3.1.0",
@@ -18,16 +18,14 @@
18
18
  "gradle/wrapper/gradle-wrapper.jar",
19
19
  "gradlew",
20
20
  "gradlew.bat",
21
- "src/main/resources/application.properties",
22
- "src/test/resources/application-test.properties"
21
+ "src/main/resources/application.properties"
23
22
  ],
24
23
  "requiredTemplateFiles": [
25
24
  "src/main/kotlin/__PACKAGE_PATH__/__APPLICATION_CLASS__.kt",
26
25
  "src/main/kotlin/__PACKAGE_PATH__/base/config/AppProperties.kt",
27
26
  "src/main/kotlin/__PACKAGE_PATH__/base/config/SecurityConfig.kt",
28
27
  "src/main/kotlin/__PACKAGE_PATH__/project/health/controller/HealthController.kt",
29
- "src/test/kotlin/__PACKAGE_PATH__/ApplicationContextTest.kt",
30
- "src/test/kotlin/__PACKAGE_PATH__/SecurityIntegrationTest.kt"
28
+ "src/test/kotlin/__PACKAGE_PATH__/SecurityWebSliceTest.kt"
31
29
  ],
32
30
  "requiredContent": {
33
31
  "build.gradle": [
@@ -50,7 +48,6 @@
50
48
  "jackson-module-kotlin",
51
49
  "kotlin-reflect",
52
50
  "mariadb-java-client:3.1.4",
53
- "com.h2database:h2",
54
51
  "spring-boot-starter-test"
55
52
  ],
56
53
  "gradle/wrapper/gradle-wrapper.properties": [
@@ -62,14 +59,8 @@
62
59
  "server.shutdown=graceful",
63
60
  "spring.datasource.url=${DB_URL}",
64
61
  "spring.datasource.username=${DB_USERNAME}",
65
- "spring.datasource.password=${DB_PASSWORD}"
66
- ],
67
- "src/test/resources/application-test.properties": [
68
- "server.port=0",
69
- "MODE=MariaDB",
70
- "spring.datasource.username=sa",
71
- "spring.datasource.password=",
72
- "spring.datasource.driver-class-name=org.h2.Driver"
62
+ "spring.datasource.password=${DB_PASSWORD}",
63
+ "spring.jpa.hibernate.ddl-auto=validate"
73
64
  ]
74
65
  },
75
66
  "forbiddenContent": [