@simplysm/sd-claude 14.0.90 → 14.0.91
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/claude/references/sd-simplysm14/manuals/client-app-structure.md +1 -8
- package/claude/references/sd-simplysm14/manuals/client-system-log.md +6 -2
- package/claude/skills/sd-docs/SKILL.md +3 -1
- package/claude/skills/sd-docs/references/subagent-prompt.md +16 -1
- package/claude/skills/sd-spec/SKILL.md +1 -1
- package/package.json +1 -1
|
@@ -111,15 +111,8 @@ permissions = computed(() =>
|
|
|
111
111
|
this._sdAppStructure.permRecord.set(this.authInfo()!.user.permissionRecord);
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
-
**화면 안에서 권한 체크** — `injectPermsSignal` 로
|
|
114
|
+
**화면 안에서 권한 체크** — 화면 컴포넌트에서 `injectPermsSignal(<path>, <actions>)` 로 정의된 권한을 읽어 체크함. 첫 인자(권한 path)는 이 구조의 화면 fullCode(들). 체크 작성 관례(단순 체크는 인라인, `computed` 사용 기준)는 [client-component.md](./client-component.md) 의 '권한' 참조.
|
|
115
115
|
|
|
116
|
-
```ts
|
|
117
|
-
perms = injectPermsSignal(["base.user-permission"], ["use", "edit"]);
|
|
118
|
-
canEdit = computed(() => this.perms().includes("edit"));
|
|
119
|
-
// → 권한 없으면 빈 배열. 예: ["use"]
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
- 첫 인자는 화면의 fullCode(들), 둘째 인자는 확인할 권한 종류.
|
|
123
116
|
- `perms` 를 정의하지 않은 화면은 제약이 없으므로 항상 모든 권한이 활성으로 나옴.
|
|
124
117
|
|
|
125
118
|
## 5. 기능 모듈로 메뉴 on/off
|
|
@@ -39,6 +39,10 @@ export const SystemLog = Table("SystemLog")
|
|
|
39
39
|
`provideAppInitializer` 안에서 `SdSystemLogProvider.writeFn` 에 적재 함수를 할당.
|
|
40
40
|
|
|
41
41
|
```ts
|
|
42
|
+
import { inject, provideAppInitializer } from "@angular/core";
|
|
43
|
+
import { DateTime, json } from "@simplysm/core-common";
|
|
44
|
+
import { SdSystemLogProvider } from "@simplysm/angular";
|
|
45
|
+
|
|
42
46
|
provideAppInitializer(() => {
|
|
43
47
|
const appService = inject(AppServiceProvider);
|
|
44
48
|
const appOrm = inject(AppOrmProvider);
|
|
@@ -50,7 +54,7 @@ provideAppInitializer(() => {
|
|
|
50
54
|
{
|
|
51
55
|
dateTime: new DateTime(),
|
|
52
56
|
severity,
|
|
53
|
-
message:
|
|
57
|
+
message: data
|
|
54
58
|
.map((l) =>
|
|
55
59
|
typeof l === "string"
|
|
56
60
|
? l
|
|
@@ -71,7 +75,7 @@ provideAppInitializer(() => {
|
|
|
71
75
|
```
|
|
72
76
|
|
|
73
77
|
- `CLIENT_NAME` 은 `provideSdAngular({ clientName: CLIENT_NAME })` 에 넘긴 값과 동일하게 두어 어느 앱에서 난 로그인지 구분.
|
|
74
|
-
- `data` 는 가변 인자
|
|
78
|
+
- `data` 는 가변 인자 배열. 각 인자를 string→그대로 / Error→`stack` / 객체→`json.stringify` 로 문자열화해 공백으로 join 하여 저장(Error 의 `stack` 보존).
|
|
75
79
|
- `writeFn` 미설정 시 외부 적재는 일어나지 않고 콘솔 출력만 수행됨. DB 적재가 필요한 앱에서만 배선.
|
|
76
80
|
|
|
77
81
|
## 자동으로 적재되는 로그
|
|
@@ -25,7 +25,9 @@ model: haiku
|
|
|
25
25
|
|
|
26
26
|
### 2. 패키지별 subagent 병렬 호출
|
|
27
27
|
|
|
28
|
-
`public 리스트` 의 패키지 수만큼 `general-purpose` subagent 호출을 **단일 메시지 안에서 병렬**로 보냄. 각 호출 프롬프트는 [references/subagent-prompt.md](references/subagent-prompt.md)
|
|
28
|
+
`public 리스트` 의 패키지 수만큼 `general-purpose` subagent 호출을 **단일 메시지 안에서 병렬**로 보냄. 각 호출 프롬프트는 [references/subagent-prompt.md](references/subagent-prompt.md) 본문을 그대로 사용하고, `<패키지명>` 과 `<패키지 디렉토리>` 와 `<매뉴얼 인덱스>` 를 치환.
|
|
29
|
+
|
|
30
|
+
- `<매뉴얼 인덱스>`: `.claude/references/sd-simplysm14/README.md` 의 "개발 매뉴얼" 섹션(트리거 표) 본문을 그대로 추출해 주입. 모든 subagent 에 동일 값. subagent 가 자기 패키지에 걸리는 매뉴얼을 골라 읽어 예시·사용법을 매뉴얼 패턴에 맞추는 데 사용.
|
|
29
31
|
|
|
30
32
|
각 subagent 의 산출 (풀 재작성 모드 — 기존 파일 참고 없이 처음부터 작성):
|
|
31
33
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## 1. 입력 분석
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
문서 **내용의 진실 근거**는 다음만 사용 — 외부 자료·과거 git 기록·다른 패키지의 사용처는 참조 금지.
|
|
8
8
|
|
|
9
9
|
- `<패키지 디렉토리>/src/index.ts` 의 export — **entry 시작점**. 여기서 노출된 심볼만 문서 대상.
|
|
10
10
|
- 위 entry 가 재노출하는 각 심볼의 정의 파일(타입 시그니처 + 본문).
|
|
@@ -13,6 +13,21 @@
|
|
|
13
13
|
|
|
14
14
|
타입 시그니처에서 직접 드러나지 않는 사용 패턴을 보강해야 하면 위 4개 소스 안에서만 추론.
|
|
15
15
|
|
|
16
|
+
개발 매뉴얼은 **내용 근거가 아니라 예시·사용법의 일관성 제약**으로만 사용 (다음 "1.5. 매뉴얼 일관성 제약" 참조). 매뉴얼 본문을 API 문서로 복사·보강하는 것은 금지.
|
|
17
|
+
|
|
18
|
+
## 1.5. 매뉴얼 일관성 제약
|
|
19
|
+
|
|
20
|
+
API 문서의 예시·사용법이 개발 매뉴얼이 정한 사용 패턴과 충돌하지 않게 함.
|
|
21
|
+
|
|
22
|
+
- 입력으로 주입된 매뉴얼 트리거 표:
|
|
23
|
+
|
|
24
|
+
<매뉴얼 인덱스>
|
|
25
|
+
|
|
26
|
+
- 예시·사용법을 쓰기 전에, 위 표에서 **이 패키지의 심볼·기능에 걸리는 트리거**의 매뉴얼을 Read 로 읽음.
|
|
27
|
+
- 읽은 매뉴얼이 제시하는 호출 방식·패턴에서 벗어나지 않게 예시·사용법을 작성. 매뉴얼과 다른 방식의 예시를 쓰지 않음.
|
|
28
|
+
- **역할 한정**: 매뉴얼은 "어떻게 호출하는가(예시 스타일)" 만 규율. 매뉴얼 본문 문장·설명을 API 문서에 옮겨 적지 않음.
|
|
29
|
+
- **우선순위**: 시그니처·동작의 진실 근거는 코드. 코드와 매뉴얼이 시그니처·동작에서 어긋나면 코드가 우선이며, 이 경우 매뉴얼 패턴을 따르지 않고 코드대로 적음.
|
|
30
|
+
|
|
16
31
|
## 2. 사용 트리거 군 분류
|
|
17
32
|
|
|
18
33
|
entry 의 export 심볼들을 "한 작업 컨텍스트에서 함께 참조될 군"으로 묶음. 예: 에러 처리 군, 값 타입 군, 큐/이벤트 군. 분류 기준은 폴더 구조나 심볼 종류가 아니라 **사용 시점**(언제 같이 읽힐 것인가) 기준.
|
|
@@ -78,7 +78,7 @@ spec.md 첨부 재진입 시 상황별 권장 진입점:
|
|
|
78
78
|
|
|
79
79
|
초안 출력 직전마다 자문. 한 가지라도 실패 시 초안 폐기 후 재작성 또는 사용자에게 질문. 행동 규칙 "응답 전송 직전 자가 점검" 에 더해 적용되는 sd-spec 고유 검증.
|
|
80
80
|
|
|
81
|
-
1. **형식** — 해당 § 작성법 규약을
|
|
81
|
+
1. **형식** — 해당 § 작성법 규약을 따랐는지. 점검 전 2개를 모두 로딩: ① 해당 § 작성법 절 재독, ② 그 § 첫머리 "모범" 에 적힌 example-spec.md 의 모범 §번호를 `Read` (offset/limit 로 해당 §만). 두 자료에 헤더 구조·표 형식·마커 표기를 직접 대조 (모범 Read 없이 텍스트 규칙만으로 작성 금지).
|
|
82
82
|
2. **출처** — 각 항목·필드·동작 1건마다 사용자 발언·자료를 인용할 수 있는지.
|
|
83
83
|
- 인용 불가 = As-Is 답습 / 다른 §·example 패턴 복제 의심 → 제거 또는 별도 질문.
|
|
84
84
|
- As-Is (회의록·매뉴얼·현행 화면) 는 추정 자료 (행동 규칙 "결정 근거 안티패턴").
|