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.
- package/README.MD +15 -11
- package/docs/playbooks/backend-implementation.md +9 -0
- package/docs/playbooks/harness-workflow.md +9 -5
- package/docs/policies/context-and-track.md +8 -8
- package/docs/policies/core-safety.md +30 -51
- package/docs/setup/fork-contributor-guide.md +13 -12
- package/docs/setup/github-free-collaboration.md +6 -4
- package/docs/setup/sk-cli-guide.md +19 -21
- package/docs/templates/impact-map.md +2 -2
- package/docs/templates/task-contract.md +3 -3
- package/package.json +3 -2
- package/profiles/seokang/backend.json +5 -14
- package/scripts/check_db_execution_boundary.mjs +208 -0
- package/scripts/check_db_execution_boundary_smoke.mjs +142 -0
- package/scripts/check_deploy_actor_guard.mjs +101 -29
- package/scripts/check_docs_integrity.mjs +21 -21
- package/scripts/check_fork_contribution.mjs +10 -7
- package/scripts/check_git_secret_guard.mjs +2 -2
- package/scripts/check_git_secret_guard_smoke.mjs +4 -0
- package/scripts/check_operator_guard.mjs +31 -43
- package/scripts/check_sk_cli_smoke.mjs +95 -120
- package/scripts/check_work_start_preflight.mjs +11 -10
- package/scripts/operator_identity.mjs +23 -43
- package/scripts/sk.mjs +93 -50
- package/starters/backend/build.gradle +0 -1
- package/starters/backend/src/main/resources/application.properties +1 -0
- package/starters/backend/src/test/kotlin/__PACKAGE_PATH__/{SecurityIntegrationTest.kt → SecurityWebSliceTest.kt} +7 -7
- package/starters/backend/src/test/kotlin/__PACKAGE_PATH__/ApplicationContextTest.kt +0 -12
- 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
|
-
|
|
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
|
-
새 스레드의 첫 작업에서는
|
|
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`:
|
|
264
|
-
- `sk guard implementation --db-impact`: DB
|
|
265
|
-
- `sk guard
|
|
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>`: 배포
|
|
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
|
-
-
|
|
416
|
-
- OWNER: main
|
|
417
|
-
-
|
|
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
|
|
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 영향이 `있음` 또는
|
|
40
|
-
|
|
41
|
-
-
|
|
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
|
|
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
|
|
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
|
-
|
|
34
|
-
- remote URL에서 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
|
-
####
|
|
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
|
-
####
|
|
51
|
+
#### Private fork 시작 순서
|
|
52
52
|
|
|
53
|
-
1. `origin=github.com/<
|
|
54
|
-
2. 현재 branch의 PR을 `gh pr list --repo selink-lab/<repo> --state all --limit 100 --head <
|
|
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를 만든다.
|
|
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
|
-
-
|
|
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.
|
|
81
|
-
|
|
82
|
-
- DB
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
- DB
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
- `
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
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
|
-
-
|
|
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
|
|
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
|
-
|
|
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
|
|
102
|
-
`$sk-deploy`는
|
|
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
|
|
155
|
-
|
|
|
156
|
-
|
|
|
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은
|
|
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
|
-
-
|
|
78
|
-
-
|
|
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
|
|
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.
|
|
267
|
+
### 4-5. PR / DB 무실행 / 배포 credential 경계
|
|
268
268
|
|
|
269
|
-
|
|
269
|
+
`sk identity status`는 현재 GitHub numeric identity를 보고 싶을 때만 쓰는 선택 진단 명령이다. cache를 생성하지 않으며 구현, DB 코드 작성, local commit, 작업 branch의 필수 preflight로 사용하지 않는다.
|
|
270
270
|
|
|
271
|
-
|
|
271
|
+
schema/migration/DML/repository/ORM/query/transaction/persistence 코드와 SQL 파일은 누구나 작성하고 개인 fork PR로 전달할 수 있다. 이전 버전 호환을 위한 아래 명령도 GitHub를 조회하지 않고 작성 허용/실행 금지만 안내한다.
|
|
272
272
|
|
|
273
273
|
```bash
|
|
274
|
-
|
|
275
|
-
sk identity status
|
|
274
|
+
sk guard implementation --db-impact
|
|
276
275
|
```
|
|
277
276
|
|
|
278
|
-
|
|
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
|
|
282
|
+
sk guard db-execution
|
|
282
283
|
```
|
|
283
284
|
|
|
284
|
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
배포는
|
|
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
|
-
-
|
|
328
|
-
- production, npm publish, rollback을 포함한 모든
|
|
329
|
-
-
|
|
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
|
-
|
|
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
|
-
-
|
|
36
|
-
- Git/deploy
|
|
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
|
-
###
|
|
28
|
-
###
|
|
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.
|
|
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.
|
|
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__/
|
|
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": [
|