@soddong/agentic-domain-artifact-standard 0.11.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 (83) hide show
  1. package/.tbls.yml +54 -0
  2. package/CHANGELOG.md +94 -0
  3. package/README.md +386 -0
  4. package/dist/database.d.ts +8 -0
  5. package/dist/database.d.ts.map +1 -0
  6. package/dist/database.js +76 -0
  7. package/dist/database.js.map +1 -0
  8. package/dist/fixtures.d.ts +11 -0
  9. package/dist/fixtures.d.ts.map +1 -0
  10. package/dist/fixtures.js +537 -0
  11. package/dist/fixtures.js.map +1 -0
  12. package/dist/index.d.ts +72 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +213 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/repositories.d.ts +46 -0
  17. package/dist/repositories.d.ts.map +1 -0
  18. package/dist/repositories.js +730 -0
  19. package/dist/repositories.js.map +1 -0
  20. package/dist/seed-apply.d.ts +20 -0
  21. package/dist/seed-apply.d.ts.map +1 -0
  22. package/dist/seed-apply.js +198 -0
  23. package/dist/seed-apply.js.map +1 -0
  24. package/dist/service.d.ts +40 -0
  25. package/dist/service.d.ts.map +1 -0
  26. package/dist/service.js +105 -0
  27. package/dist/service.js.map +1 -0
  28. package/dist/types.d.ts +499 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +2 -0
  31. package/dist/types.js.map +1 -0
  32. package/docs/build.md +27 -0
  33. package/docs/configuration.md +5 -0
  34. package/docs/delivery.md +26 -0
  35. package/docs/operations.md +28 -0
  36. package/docs/publishing.md +43 -0
  37. package/docs/schema/generated/README.md +38 -0
  38. package/docs/schema/generated/artifact_standard_blueprint_nodes.md +137 -0
  39. package/docs/schema/generated/artifact_standard_blueprint_nodes.svg +88 -0
  40. package/docs/schema/generated/artifact_standard_code_groups.md +70 -0
  41. package/docs/schema/generated/artifact_standard_code_groups.svg +49 -0
  42. package/docs/schema/generated/artifact_standard_codes.md +88 -0
  43. package/docs/schema/generated/artifact_standard_codes.svg +49 -0
  44. package/docs/schema/generated/artifact_standard_component_bindings.md +118 -0
  45. package/docs/schema/generated/artifact_standard_component_bindings.svg +73 -0
  46. package/docs/schema/generated/artifact_standard_components.md +114 -0
  47. package/docs/schema/generated/artifact_standard_components.svg +73 -0
  48. package/docs/schema/generated/artifact_standard_diagram_policies.md +99 -0
  49. package/docs/schema/generated/artifact_standard_diagram_policies.svg +49 -0
  50. package/docs/schema/generated/artifact_standard_document_blueprints.md +101 -0
  51. package/docs/schema/generated/artifact_standard_document_blueprints.svg +128 -0
  52. package/docs/schema/generated/artifact_standard_document_component_relations.md +118 -0
  53. package/docs/schema/generated/artifact_standard_document_component_relations.svg +87 -0
  54. package/docs/schema/generated/artifact_standard_document_components.md +148 -0
  55. package/docs/schema/generated/artifact_standard_document_components.svg +139 -0
  56. package/docs/schema/generated/artifact_standard_figure_policies.md +99 -0
  57. package/docs/schema/generated/artifact_standard_figure_policies.svg +49 -0
  58. package/docs/schema/generated/artifact_standard_generated_output_links.md +144 -0
  59. package/docs/schema/generated/artifact_standard_generated_output_links.svg +57 -0
  60. package/docs/schema/generated/artifact_standard_physical_structure_policies.md +124 -0
  61. package/docs/schema/generated/artifact_standard_physical_structure_policies.svg +78 -0
  62. package/docs/schema/generated/artifact_standard_schema_migrations.md +52 -0
  63. package/docs/schema/generated/artifact_standard_schema_migrations.svg +27 -0
  64. package/docs/schema/generated/artifact_standard_source_mappings.md +120 -0
  65. package/docs/schema/generated/artifact_standard_source_mappings.svg +49 -0
  66. package/docs/schema/generated/artifact_standard_standards.md +102 -0
  67. package/docs/schema/generated/artifact_standard_standards.svg +313 -0
  68. package/docs/schema/generated/artifact_standard_table_column_schemas.md +147 -0
  69. package/docs/schema/generated/artifact_standard_table_column_schemas.svg +52 -0
  70. package/docs/schema/generated/artifact_standard_table_schemas.md +99 -0
  71. package/docs/schema/generated/artifact_standard_table_schemas.svg +71 -0
  72. package/docs/schema/generated/artifact_standard_template_slots.md +143 -0
  73. package/docs/schema/generated/artifact_standard_template_slots.svg +88 -0
  74. package/docs/schema/generated/artifact_standard_validation_rule_set_rules.md +128 -0
  75. package/docs/schema/generated/artifact_standard_validation_rule_set_rules.svg +52 -0
  76. package/docs/schema/generated/artifact_standard_validation_rule_sets.md +91 -0
  77. package/docs/schema/generated/artifact_standard_validation_rule_sets.svg +71 -0
  78. package/docs/schema/generated/schema.json +4230 -0
  79. package/docs/schema/generated/schema.mmd +327 -0
  80. package/docs/schema/generated/schema.svg +510 -0
  81. package/docs/usage.md +197 -0
  82. package/package.json +30 -0
  83. package/src/database/migrations/0001_artifact_standard_base.sql +1295 -0
package/.tbls.yml ADDED
@@ -0,0 +1,54 @@
1
+ name: agentic-domain-artifact-standard
2
+ desc: Agentic Platform artifact standard domain database.
3
+
4
+ dsn: ${AGENTIC_DOMAIN_ARTIFACT_STANDARD_SCHEMA_DSN}
5
+ docPath: ${AGENTIC_DOMAIN_ARTIFACT_STANDARD_SCHEMA_DOC_PATH}
6
+
7
+ format:
8
+ adjust: true
9
+ sort: false
10
+ number: false
11
+ hideColumnsWithoutValues: true
12
+
13
+ er:
14
+ skip: false
15
+ format: svg
16
+ comment: true
17
+ hideDef: true
18
+ showColumnTypes:
19
+ related: true
20
+ primary: true
21
+ distance: 1
22
+
23
+ include:
24
+ - artifact_standard_*
25
+
26
+ comments:
27
+ - table: artifact_standard_schema_migrations
28
+ tableComment: artifact-standard 패키지의 migration 적용 이력을 관리한다.
29
+ - table: artifact_standard_code_groups
30
+ tableComment: 코드 그룹을 정의한다.
31
+ - table: artifact_standard_codes
32
+ tableComment: 코드 그룹별 코드 값을 정의한다.
33
+ - table: artifact_standard_standards
34
+ tableComment: 산출물 표준의 최상위 versioned definition을 관리한다.
35
+ - table: artifact_standard_components
36
+ tableComment: 산출물 표준을 구성하는 개념, 서식, 가이드, 예시, LLM 보충 지침 resource를 관리한다.
37
+ - table: artifact_standard_document_blueprints
38
+ tableComment: 산출물 문서 구조 기준을 관리한다.
39
+ - table: artifact_standard_template_slots
40
+ tableComment: blueprint 내 section, table, figure, diagram 등이 들어갈 slot을 관리한다.
41
+ - table: artifact_standard_table_schemas
42
+ tableComment: 산출물 표 단위 schema를 관리한다.
43
+ - table: artifact_standard_table_column_schemas
44
+ tableComment: 산출물 표의 column 단위 schema를 관리한다.
45
+ - table: artifact_standard_figure_policies
46
+ tableComment: figure 작성/표현 policy를 관리한다.
47
+ - table: artifact_standard_diagram_policies
48
+ tableComment: diagram 작성/표현 policy를 관리한다.
49
+ - table: artifact_standard_validation_rule_sets
50
+ tableComment: 산출물 표준에 적용할 validation rule set을 관리한다.
51
+ - table: artifact_standard_validation_rule_set_rules
52
+ tableComment: validation rule set에 포함된 contract-compatible rule을 관리한다.
53
+ - table: artifact_standard_source_mappings
54
+ tableComment: 설계 근거 및 후속 이행 후보 source mapping을 관리한다.
package/CHANGELOG.md ADDED
@@ -0,0 +1,94 @@
1
+ # Changelog
2
+
3
+ ## 0.11.0
4
+
5
+ - Generated Output Link 모델을 추가한다.
6
+ - `artifact_standard_generated_output_links` 테이블을 추가해 산출물 표준 또는 생성 출력물 간 자동 생성 관계를 관리한다.
7
+ - `addGeneratedOutputLink()`, `getGeneratedOutputLinkByCode()`, `listGeneratedOutputLinks()`, `listGeneratedOutputLinksBySource()` Service API를 추가한다.
8
+ - `applyAgenticSeed()` runtime seed apply handler를 추가해 AI-Agent SDLC seed의 `generatedOutputLinks` section을 실제 artifact-standard DB에 적용한다.
9
+ - seed에서 참조하는 source/target artifact standard가 아직 상세 fixture로 제공되지 않은 경우 최소 stub standard를 생성하고 원본 seed payload를 metadata에 보존한다.
10
+
11
+ ## 0.10.1
12
+
13
+ - `ArtifactStandard` / `artifactStandardCode` 계열 non-breaking alias를 추가한다.
14
+ - `getArtifactStandardInfo()`와 `getArchitectureSpecificationArtifactStandard()`를 제공한다.
15
+ - `getArtifactStandardDocumentProfile()`이 신규 `artifactStandardCode` query와 legacy `artifactStandardPackageCode` query를 모두 지원하게 한다.
16
+ - 문서와 dev-test 예시를 신규 도메인 용어 기준으로 보정한다.
17
+
18
+ ## 0.10.0
19
+
20
+ - Information Object Definition artifact standard fixture를 추가한다.
21
+ - `seedInformationObjectDefinitionArtifactStandard()`로 `information_object_definition@1.0.0` 표준을 생성할 수 있게 한다.
22
+ - 정보 객체 정의서 main document blueprint, required blueprint nodes, information object table slot, table schema, validation rules를 fixture로 제공한다.
23
+ - 4모듈 통합 검증의 downstream authoring context target profile을 임시 Business Process Definition profile에서 Information Object Definition profile로 교체한다.
24
+
25
+ ## 0.9.0
26
+
27
+ - Business Process Definition fixture의 `DocumentBlueprint`를 component별로 분리한다.
28
+ - `main_document`, `appendix_l3_process`, `appendix_scenario`, `appendix_l4_detail` component가 각각 별도 blueprint를 참조하게 한다.
29
+ - component별 blueprint 기준으로 `DocumentImportProfile`을 생성하는 dev-test를 보강한다.
30
+ - artifact-standard, methodology, artifact, document 통합 검증에서 L3 appendix document required blueprint node 검증을 추가한다.
31
+ - component별 document structure 기준은 신규 table 없이 `DocumentComponent.blueprintId`를 사용한다.
32
+
33
+ ## 0.8.0
34
+
35
+ - `ArtifactStandardAggregate` 기반 `DocumentImportProfile` 생성 helper를 추가한다.
36
+ - `createDocumentImportProfileFromArtifactStandardAggregate()`로 blueprint, table schema, validation rule set에서 document profile을 도출할 수 있게 한다.
37
+ - `architecture_specification` 전용 profile provider는 legacy registry fixture로 격하해 하드코딩 분산을 줄인다.
38
+ - artifact-standard, methodology, artifact, document 통합 검증에서 ADoc documentId resource link와 document 구조 검증을 추가한다.
39
+ - Business Process Definition fixture 기준 required blueprint node, required table slot, table schema column 검증을 추가한다.
40
+
41
+ ## 0.7.0
42
+
43
+ - `DocumentComponent` 모델을 추가해 산출물 본문, 부록, 보조자료 같은 논리 구성 단위를 관리한다.
44
+ - `DocumentComponentRelation` 모델을 추가해 component 간 포함, 상세화, 지원, 참조 관계를 표현한다.
45
+ - `PhysicalStructurePolicy` 모델을 추가해 논리 component 계층과 물리 파일/폴더 구조를 분리한다.
46
+ - Business Process Definition fixture에 본문, L3 부록, 시나리오 부록, L4 상세 부록 예시를 추가한다.
47
+ - validation/component binding target type에 document component, relation, physical policy 대상을 추가한다.
48
+
49
+ ## 0.6.0
50
+
51
+ - artifact-standard validation target type 후보를 TypeScript type과 SQLite code seed로 추가한다.
52
+ - validation rule 저장 시 artifact-standard validation target type code guard를 적용한다.
53
+ - `ARTIFACT_STANDARD.COMPONENT_BINDING.REQUIRED_ROLE` fixture rule을 추가한다.
54
+ - `TABLE_SCHEMA:l4_processes`에 `PRIMARY_GUIDE` component binding이 있는지 검증하는 대표 rule parameter convention을 추가한다.
55
+ - validation type별 artifact-standard 적용 예시를 결정 문서에 반영한다.
56
+
57
+ ## 0.5.0
58
+
59
+ - `ArtifactStandardComponentBinding` 모델을 추가한다.
60
+ - `artifact_standard_component_bindings` table을 추가한다.
61
+ - Component와 ArtifactStandard, DocumentBlueprint, BlueprintNode, TemplateSlot, TableSchema 등 target 간 N:M 적용 관계를 표현한다.
62
+ - `ArtifactStandardService`에 `addComponentBinding()`, `listComponentBindings()`, `listComponentBindingsByTarget()` API를 추가한다.
63
+ - Business Process Definition fixture에 전체 산출물 표준 guide binding과 table schema guide binding을 추가한다.
64
+
65
+ ## 0.4.0
66
+
67
+ - `BlueprintNode` 모델을 추가해 목차/논리 섹션 구조와 `TemplateSlot` 구성요소 요구사항을 분리한다.
68
+ - `artifact_standard_blueprint_nodes` table을 추가한다.
69
+ - `TemplateSlot`이 `blueprint_node_id`로 특정 목차/논리 섹션에 연결될 수 있게 한다.
70
+ - `ArtifactStandardService`에 `addBlueprintNode()`, `listBlueprintNodes()` API를 추가한다.
71
+ - Business Process Definition fixture를 `DocumentBlueprint -> BlueprintNode -> TemplateSlot` 구조로 갱신한다.
72
+
73
+ ## 0.3.0
74
+
75
+ - SQLite base migration을 추가한다.
76
+ - `artifact_standard_` prefix 기반 table schema를 추가한다.
77
+ - `ArtifactStandardService`와 `ArtifactStandardRepository`를 추가한다.
78
+ - component, blueprint, template slot, table schema, validation rule set, source mapping 생성/조회 API를 추가한다.
79
+ - `getArtifactStandardAggregateByCodeVersion()` aggregate 조회 API를 추가한다.
80
+ - Business Process Definition 축소 fixture helper를 추가한다.
81
+ - `@soddong/agentic-contract-validation`과 정렬되는 validation provider manifest export API를 추가한다.
82
+ - validation rule 저장 시 `@soddong/agentic-contract-validation` code guard를 적용한다.
83
+
84
+ ## 0.2.0
85
+
86
+ - `DocumentImportProfile` 기반 `getArtifactStandardDocumentProfile()` public API를 추가한다.
87
+ - `architecture_specification@1.0.0` document profile fixture를 추가한다.
88
+ - Architecture Specification template slot placeholder를 추가한다.
89
+ - document profile provider 사용 문서를 추가한다.
90
+
91
+ ## 0.1.0
92
+
93
+ - Iteration 0 package skeleton을 추가한다.
94
+ - 최소 public package info API를 제공한다.
package/README.md ADDED
@@ -0,0 +1,386 @@
1
+ # @soddong/agentic-domain-artifact-standard
2
+
3
+ `@soddong/agentic-domain-artifact-standard`는 Agentic Platform의 산출물 표준 도메인 패키지입니다.
4
+
5
+ 이 패키지는 산출물 유형별 `Artifact Standard`, 템플릿, 가이드, 예시, Document Blueprint, Blueprint Node, Template Slot, Component Binding, Block/Table Schema, Validation Rule 같은 재사용 가능한 산출물 작성 기준을 소유합니다.
6
+
7
+ ## 용어 기준
8
+
9
+ `Artifact Standard`는 특정 산출물 유형을 작성, 검토, 검증하기 위한 복합 표준 단위입니다. 템플릿, 가이드, 예시, 문서 blueprint, blueprint node, template slot, component binding, block/table schema, validation rule, LLM 보충 지침을 하나의 표준으로 묶어 관리합니다.
10
+
11
+ `Package`라는 용어는 npm 배포 단위 또는 repository package를 의미할 때만 사용합니다. 도메인 개념에는 `Artifact Standard Package` 대신 `Artifact Standard`를 사용합니다.
12
+
13
+ 현재 public API에는 호환성을 위해 `getArtifactStandardPackageInfo()`, `artifactStandardPackageCode` 같은 legacy alias도 남아 있습니다. 신규 사용자는 `getArtifactStandardInfo()`, `artifactStandardCode` 계열을 우선 사용합니다.
14
+
15
+ ## Profile 용어 구분
16
+
17
+ `artifact-standard`에서 사용하는 profile 관련 용어는 다음처럼 구분합니다.
18
+
19
+ | 용어 | 소유/위치 | 의미 | 현재 상태 |
20
+ | --- | --- | --- | --- |
21
+ | `ArtifactStandardProfile` | `artifact-standard` 후보 모델 | 하나의 산출물 표준 안에서 복수 작성 모드나 tailoring variant를 별도 모델로 관리하는 개념 | 1차 핵심 모델에서 제외 |
22
+ | `DocumentImportProfile` | `@soddong/agentic-domain-document` contract | document importer가 산출물 표준의 blueprint, TOC, caption, table/figure/diagram 기준을 적용할 수 있게 받는 입력 profile | 제공/연계 |
23
+ | `ValidationProfile` | `@soddong/agentic-contract-validation` contract | validation rule bundle/provider profile | provider manifest로 export |
24
+
25
+ 따라서 `artifact-standard`가 `DocumentImportProfile`과 validation provider profile을 제공한다고 해서 `ArtifactStandardProfile` DB 모델을 도입한 것은 아닙니다.
26
+
27
+ ## 현재 범위
28
+
29
+ Iteration 0에서는 패키지 skeleton과 Continuous Publish/Delivery 기반을 제공했습니다. 현재는 1차 보강으로 `@soddong/agentic-domain-document`의 `DocumentImportProfile` contract와 정렬되는 profile provider, SQLite 기반 artifact-standard repository/service, Business Process Definition fixture, Information Object Definition fixture, validation provider manifest export, Generated Output Link, runtime seed apply handler를 제공합니다. 0.10.0에서는 후행 산출물 작성 context 검증을 위해 `information_object_definition@1.0.0` 표준 fixture를 추가했고, 0.10.1에서는 `ArtifactStandard` / `artifactStandardCode` 계열 호환 alias를 추가했습니다. 0.11.0에서는 AI-Agent SDLC seed의 `generatedOutputLinks` section을 artifact-standard DB에 적용할 수 있게 했습니다. Validator 실행 engine은 `@soddong/agentic-capability-validation` 책임이며, `artifact-standard`는 검증 기준을 contract-compatible manifest로 제공하는 데 집중합니다.
30
+
31
+ | 구분 | 상태 |
32
+ | --- | --- |
33
+ | 패키지 skeleton | 포함 |
34
+ | 기본 문서 | 포함 |
35
+ | build/typecheck | 포함 |
36
+ | 최소 public API | 포함 |
37
+ | Architecture Specification DocumentImportProfile fixture | 포함 |
38
+ | Blueprint node model | 포함 |
39
+ | Template slot model | 포함 |
40
+ | Component binding model | 포함 |
41
+ | Document component model | 포함 |
42
+ | Document component relation model | 포함 |
43
+ | Physical structure policy model | 포함 |
44
+ | Artifact Standard DB migration | 포함 |
45
+ | Repository/Service | 포함 |
46
+ | Aggregate 조회 API | 포함 |
47
+ | Business Process Definition fixture helper | 포함 |
48
+ | Information Object Definition fixture helper | 포함 |
49
+ | Aggregate 기반 DocumentImportProfile 생성 helper | 포함 |
50
+ | Generated Output Link model | 포함 |
51
+ | Runtime Seed Apply Handler | `generatedOutputLinks` section 처리 |
52
+ | Validation rule set contract export | 포함 |
53
+ | Validation contract code guard | 포함 |
54
+ | Validator 실행 engine | 제외: `@soddong/agentic-capability-validation` 책임 |
55
+ | Seed/Fixture | 포함 |
56
+ | Agent contribution | 후속 iteration |
57
+ | CLI | 1차 구현 제외 |
58
+ | Adapter | 1차 구현 제외 |
59
+
60
+ ## 도메인 책임
61
+
62
+ ```text
63
+ @soddong/agentic-domain-artifact-standard
64
+ - Artifact Standard
65
+ - Artifact Type
66
+ - Concept Document reference
67
+ - Template Document reference
68
+ - Guide Document reference
69
+ - Example Document reference
70
+ - Component Binding
71
+ - Document Component
72
+ - Document Component Relation
73
+ - Physical Structure Policy
74
+ - Document Blueprint
75
+ - Blueprint Node
76
+ - Template Slot
77
+ - Block/Table Schema
78
+ - Validation Rule reference
79
+ - Generated Output Link
80
+ - Input/Output Contract
81
+ - Handoff Criteria
82
+ ```
83
+
84
+ ## 제외 범위
85
+
86
+ | 제외 항목 | 담당 후보 |
87
+ | --- | --- |
88
+ | 실제 산출물 instance | `@soddong/agentic-domain-artifact` |
89
+ | Document 저장 구조 | `@soddong/agentic-domain-document` |
90
+ | Methodology Activity/Stage 요구 관계 | `@soddong/agentic-domain-methodology` |
91
+ | Validation contract | `@soddong/agentic-contract-validation` |
92
+ | 검증 실행 엔진 | `@soddong/agentic-capability-validation` |
93
+ | Render 실행 | `@soddong/agentic-capability-render` |
94
+
95
+ ## 기본 API 예시
96
+
97
+ 현재 API는 이전 호환성을 유지합니다. 도메인 용어 기준은 `Artifact Standard`이며, 신규 호출은 `artifactStandardCode`를 사용합니다.
98
+
99
+ ```ts
100
+ import {
101
+ createDocumentImportProfileFromArtifactStandardAggregate,
102
+ getArtifactStandardDocumentProfile,
103
+ getArtifactStandardInfo
104
+ } from "@soddong/agentic-domain-artifact-standard";
105
+
106
+ console.log(getArtifactStandardInfo());
107
+
108
+ const profile = getArtifactStandardDocumentProfile({
109
+ artifactStandardCode: "architecture_specification"
110
+ });
111
+
112
+ console.log(profile.profileCode);
113
+ ```
114
+
115
+ ## Document Profile Provider
116
+
117
+ `@soddong/agentic-domain-artifact-standard`는 document DB를 직접 조작하지 않습니다. 산출물 표준 관점에서 문서 유형별 profile을 제공하고, consumer 또는 integration layer가 이 profile을 `@soddong/agentic-domain-document` importer에 전달합니다.
118
+
119
+ ```text
120
+ artifact-standard
121
+ -> getArtifactStandardDocumentProfile()
122
+ -> DocumentImportProfile
123
+ -> document importer
124
+ ```
125
+
126
+ `getArtifactStandardDocumentProfile()`은 호환성을 위해 유지되는 legacy fixture provider입니다. 신규 산출물 표준은 DB aggregate에서 document profile을 도출하는 방식을 우선 사용합니다.
127
+
128
+ ```ts
129
+ const aggregate = service.getArtifactStandardAggregateByCodeVersion(
130
+ "business_process_definition",
131
+ "1.0.0"
132
+ );
133
+
134
+ if (aggregate !== undefined) {
135
+ const profile = createDocumentImportProfileFromArtifactStandardAggregate(aggregate);
136
+ console.log(profile.profileCode);
137
+ }
138
+ ```
139
+
140
+ 현재 legacy fixture로 제공되는 profile은 `architecture_specification@1.0.0`입니다.
141
+
142
+ | 항목 | 값 |
143
+ | --- | --- |
144
+ | profile code | `architecture_specification` |
145
+ | document type | `architecture_specification` |
146
+ | taxonomy code | `architecture_specification` |
147
+ | TOC level limit | `4` |
148
+ | caption policy | `표`, `Table`, `그림`, `Figure` caption binding |
149
+ | table/figure caption | required policy |
150
+
151
+ ## SQLite Repository / Service
152
+
153
+ `@soddong/agentic-domain-artifact-standard`는 SQLite에서 `artifact_standard_` prefix table을 사용합니다.
154
+
155
+ ```ts
156
+ import {
157
+ ArtifactStandardService,
158
+ openArtifactStandardDatabase
159
+ } from "@soddong/agentic-domain-artifact-standard";
160
+
161
+ const db = openArtifactStandardDatabase();
162
+ const service = new ArtifactStandardService(db);
163
+
164
+ const standard = service.createArtifactStandard({
165
+ artifactStandardCode: "business_process_definition",
166
+ artifactStandardVersion: "1.0.0",
167
+ artifactStandardName: "Business Process Definition"
168
+ });
169
+ ```
170
+
171
+ Validation rule set은 `@soddong/agentic-contract-validation`과 정렬되는 provider manifest로 export할 수 있습니다.
172
+
173
+ ```ts
174
+ const manifest = service.exportValidationProviderManifest(standard.artifactStandardId);
175
+ console.log(manifest.profiles);
176
+ ```
177
+
178
+ 여러 하위 구성을 한 번에 조회해야 하면 aggregate API를 사용합니다.
179
+
180
+ ```ts
181
+ const aggregate = service.getArtifactStandardAggregateByCodeVersion(
182
+ "business_process_definition",
183
+ "1.0.0"
184
+ );
185
+
186
+ console.log(aggregate?.components);
187
+ console.log(aggregate?.componentBindings);
188
+ console.log(aggregate?.blueprints[0]?.blueprintNodes);
189
+ console.log(aggregate?.blueprints[0]?.templateSlots);
190
+ console.log(aggregate?.documentComponents);
191
+ console.log(aggregate?.documentComponentRelations);
192
+ console.log(aggregate?.physicalStructurePolicies);
193
+ console.log(aggregate?.tableSchemas[0]?.columns);
194
+ console.log(aggregate?.validationRuleSets[0]?.rules);
195
+ ```
196
+
197
+ ## Generated Output Link
198
+
199
+ Generated Output Link는 산출물 표준을 기준으로 후속 산출물 또는 코드/파일 같은 생성 출력물을 만들 수 있다는 관계를 정의합니다.
200
+
201
+ 예를 들어 AI-Agent SDLC Build Planning seed에서는 다음 관계를 표현합니다.
202
+
203
+ ```text
204
+ 컴포넌트 모듈 구조 정의서
205
+ -> 컴포넌트 모듈 구조 설계서
206
+
207
+ 컴포넌트 모듈 구조 설계서
208
+ -> 컴포넌트, 서브컴포넌트, 비즈니스 모듈 생성
209
+ ```
210
+
211
+ 첫 번째는 target이 다른 Artifact Standard이고, 두 번째는 target이 산출물 문서가 아니라 생성 출력물입니다.
212
+
213
+ ```ts
214
+ const source = service.createArtifactStandard({
215
+ artifactStandardCode: "component_module_structure_design",
216
+ artifactStandardVersion: "1.0.0",
217
+ artifactStandardName: "컴포넌트 모듈 구조 설계서"
218
+ });
219
+
220
+ service.addGeneratedOutputLink({
221
+ linkCode: "gen_module_structure_design_to_modules",
222
+ sourceArtifactStandardId: source.artifactStandardId,
223
+ sourceArtifactStandardCode: source.artifactStandardCode,
224
+ sourceArtifactStandardVersion: source.artifactStandardVersion,
225
+ targetTypeCode: "GENERATED_OUTPUT",
226
+ targetOutputName: "컴포넌트, 서브컴포넌트, 비즈니스 모듈 생성",
227
+ generationModeCode: "AUTOMATIC",
228
+ sortOrder: 20
229
+ });
230
+ ```
231
+
232
+ `applyAgenticSeed()`는 `@soddong/agentic-runtime seed apply`에서 `generatedOutputLinks` section을 전달받아 이 모델에 저장합니다. seed에 등장한 source 또는 target artifact standard의 상세 구조가 아직 없으면 최소 stub standard를 생성하고, 원본 seed payload는 metadata에 보존합니다.
233
+
234
+ ## Document Component와 Physical Structure Policy
235
+
236
+ `DocumentComponent`는 산출물 표준에서 본문, 부록, 보조자료 같은 문서 구성 단위를 정의합니다. 이는 guide, format, example 같은 resource component와 다릅니다.
237
+
238
+ `DocumentComponent.blueprintId`는 해당 component가 따라야 하는 document structure 기준을 가리킵니다. 본문과 부록이 같은 문서 저장 모델을 사용하더라도, 실제 목차와 필수 block 구조는 component별 blueprint로 다르게 정의할 수 있습니다.
239
+
240
+ 예를 들어 Business Process Definition은 다음처럼 논리적으로 계층화할 수 있습니다.
241
+
242
+ ```text
243
+ main_document
244
+ appendix_l3_process
245
+ appendix_scenario
246
+ appendix_l4_detail
247
+ ```
248
+
249
+ Business Process Definition fixture는 다음처럼 component별 blueprint를 분리합니다.
250
+
251
+ | document component | blueprint |
252
+ | --- | --- |
253
+ | `main_document` | `main_document` |
254
+ | `appendix_l3_process` | `l3_process_appendix` |
255
+ | `appendix_scenario` | `scenario_appendix` |
256
+ | `appendix_l4_detail` | `l4_detail_appendix` |
257
+
258
+ 이 논리 구조는 `parentDocumentComponentId`와 `DocumentComponentRelation`으로 관리합니다. 반면 실제 파일 위치는 `PhysicalStructurePolicy`가 결정합니다.
259
+
260
+ ```ts
261
+ const main = service.addDocumentComponent({
262
+ artifactStandardId: standard.artifactStandardId,
263
+ documentComponentCode: "main_document",
264
+ documentComponentName: "Business Process Definition Main Document",
265
+ componentRoleCode: "MAIN",
266
+ componentTypeCode: "MAIN_DOCUMENT",
267
+ logicalLevel: 0
268
+ });
269
+
270
+ const appendix = service.addDocumentComponent({
271
+ artifactStandardId: standard.artifactStandardId,
272
+ parentDocumentComponentId: main.documentComponentId,
273
+ documentComponentCode: "appendix_l3_process",
274
+ documentComponentName: "L3 Process Appendix",
275
+ componentRoleCode: "APPENDIX",
276
+ componentTypeCode: "L3_PROCESS_APPENDIX",
277
+ logicalLevel: 1,
278
+ isRepeatable: true
279
+ });
280
+
281
+ service.addDocumentComponentRelation({
282
+ artifactStandardId: standard.artifactStandardId,
283
+ sourceDocumentComponentId: main.documentComponentId,
284
+ targetDocumentComponentId: appendix.documentComponentId,
285
+ relationTypeCode: "CONTAINS",
286
+ isRequired: true
287
+ });
288
+
289
+ service.addPhysicalStructurePolicy({
290
+ artifactStandardId: standard.artifactStandardId,
291
+ policyCode: "grouped_by_parent",
292
+ policyName: "Group Appendix Documents By Parent Component",
293
+ strategyCode: "GROUPED_BY_PARENT",
294
+ relationSourceCode: "DB",
295
+ pathPattern: "business-process-definition/{parentComponentCode}/{documentComponentCode}.md",
296
+ isDefault: true
297
+ });
298
+ ```
299
+
300
+ 이 구조의 목적은 논리 구조는 계층으로 유지하되, 물리 구조는 표준 정의에 따라 계층형 폴더, level별 그룹, parent별 그룹, manifest 기반 단일 폴더 중 선택할 수 있게 하는 것입니다.
301
+
302
+ ## Methodology 연결 기준
303
+
304
+ `artifact-standard`는 산출물 내부 구조를 정의하고, `methodology`는 어떤 Stage/Activity에서 어떤 산출물 표준과 document component를 입력/출력으로 요구하는지 정의합니다.
305
+
306
+ 비즈니스 프로세스 정의서 예시는 다음 기준으로 해석합니다.
307
+
308
+ ```text
309
+ Planning Phase
310
+ - 컴포넌트 비즈니스 프로세스 정의 Stage
311
+ - 비즈니스 프로세스 정의서 본문 작성 Activity
312
+ - L3 프로세스 부록 작성 Activity
313
+ - 시나리오 부록 작성 Activity
314
+ - L4 상세 부록 작성 Activity
315
+ - 본문/부록 종합 및 정제 Activity
316
+ - 컴포넌트 정보 객체 정의 Stage
317
+ - 선행 비즈니스 프로세스 정의서 묶음을 handoff 입력으로 사용
318
+ ```
319
+
320
+ 작성 절차의 세부 작업은 `Step`으로 볼 수 있지만, 현재 MVP에서는 Step 실행까지 시스템화하지 않습니다. Stage 안에서 산출물 또는 document component 단위 산출물을 생산해야 하면 Activity output으로 표현하고, 실제 산출물 instance와 ADoc document 연결은 `@soddong/agentic-domain-artifact`와 `@soddong/agentic-domain-document` 조립 책임으로 둡니다.
321
+
322
+ Component binding은 guide, example, LLM supplement 같은 component를 특정 구조 요소에 연결합니다.
323
+
324
+ ```ts
325
+ const bindings = service.listComponentBindingsByTarget(
326
+ aggregate.standard.artifactStandardId,
327
+ "TABLE_SCHEMA",
328
+ "l4_processes"
329
+ );
330
+
331
+ console.log(bindings[0]?.bindingRoleCode);
332
+ ```
333
+
334
+ Validation rule set rule의 `validationTypeCode`, `executionModeCode`, `severityCode`는 `@soddong/agentic-contract-validation`의 code guard로 검증됩니다.
335
+
336
+ `appliesToTypeCode`는 `@soddong/agentic-contract-validation`에서는 domain-neutral string이지만, `artifact-standard`는 자기 domain target type을 별도로 관리합니다.
337
+
338
+ 1차 validation target type 후보:
339
+
340
+ ```text
341
+ ARTIFACT_STANDARD
342
+ DOCUMENT_BLUEPRINT
343
+ BLUEPRINT_NODE
344
+ TEMPLATE_SLOT
345
+ TABLE_SCHEMA
346
+ TABLE_COLUMN_SCHEMA
347
+ FIGURE_POLICY
348
+ DIAGRAM_POLICY
349
+ COMPONENT
350
+ COMPONENT_BINDING
351
+ VALIDATION_RULE_SET
352
+ DOCUMENT_COMPONENT
353
+ DOCUMENT_COMPONENT_RELATION
354
+ PHYSICAL_STRUCTURE_POLICY
355
+ ```
356
+
357
+ 대표 parameter convention:
358
+
359
+ ```json
360
+ {
361
+ "requiredColumns": ["sequence_no", "process_id"],
362
+ "requiredBindingRoleCodes": ["PRIMARY_GUIDE"]
363
+ }
364
+ ```
365
+
366
+ 예를 들어 `TABLE_SCHEMA:l4_processes`에 `PRIMARY_GUIDE` binding이 필요한지는 다음 rule로 표현합니다.
367
+
368
+ ```text
369
+ ruleId: ARTIFACT_STANDARD.COMPONENT_BINDING.REQUIRED_ROLE
370
+ appliesToTypeCode: TABLE_SCHEMA
371
+ appliesToRef: l4_processes
372
+ parameters.requiredBindingRoleCodes: [PRIMARY_GUIDE]
373
+ ```
374
+
375
+ ## Fixture Helper
376
+
377
+ 사용성 테스트와 integration test를 위해 축소 fixture helper를 제공합니다.
378
+
379
+ ```ts
380
+ import { seedBusinessProcessDefinitionArtifactStandard } from "@soddong/agentic-domain-artifact-standard";
381
+
382
+ const fixture = seedBusinessProcessDefinitionArtifactStandard(service);
383
+ console.log(fixture.aggregate.standard.artifactStandardCode);
384
+ ```
385
+
386
+ fixture는 실제 참조 데이터 이행이 아니라 대표 사용 사례 검증용 축소 샘플입니다.
@@ -0,0 +1,8 @@
1
+ import Database from "better-sqlite3";
2
+ import type { ArtifactStandardDatabaseInitResult, ArtifactStandardDatabaseOptions } from "./types.js";
3
+ export declare function resolveArtifactStandardDatabasePath(options?: ArtifactStandardDatabaseOptions): string;
4
+ export declare function listArtifactStandardTables(db: Database.Database): string[];
5
+ export declare function applyArtifactStandardBaseMigration(db: Database.Database): void;
6
+ export declare function openArtifactStandardDatabase(options?: ArtifactStandardDatabaseOptions): Database.Database;
7
+ export declare function initializeArtifactStandardDatabase(options?: ArtifactStandardDatabaseOptions): ArtifactStandardDatabaseInitResult;
8
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EAAE,kCAAkC,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAuBtG,wBAAgB,mCAAmC,CAAC,OAAO,GAAE,+BAAoC,GAAG,MAAM,CAiBzG;AAOD,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,EAAE,CAY1E;AAED,wBAAgB,kCAAkC,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAE9E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE,+BAAoC,GAC5C,QAAQ,CAAC,QAAQ,CAkBnB;AAED,wBAAgB,kCAAkC,CAChD,OAAO,GAAE,+BAAoC,GAC5C,kCAAkC,CAcpC"}
@@ -0,0 +1,76 @@
1
+ import Database from "better-sqlite3";
2
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
3
+ import { dirname, isAbsolute, join } from "node:path";
4
+ const DEFAULT_DATABASE_PATH = ".agentic/platform.sqlite";
5
+ function readProjectConfig(projectRoot) {
6
+ const configPath = join(projectRoot, "agentic.config.json");
7
+ if (!existsSync(configPath)) {
8
+ return {};
9
+ }
10
+ return JSON.parse(readFileSync(configPath, "utf8"));
11
+ }
12
+ export function resolveArtifactStandardDatabasePath(options = {}) {
13
+ if (options.databasePath !== undefined) {
14
+ return isAbsolute(options.databasePath)
15
+ ? options.databasePath
16
+ : join(options.projectRoot ?? process.cwd(), options.databasePath);
17
+ }
18
+ const projectRoot = options.projectRoot ?? process.cwd();
19
+ const config = readProjectConfig(projectRoot);
20
+ const database = config.runtime?.database;
21
+ if (database?.type !== undefined && database.type !== "sqlite") {
22
+ throw new Error(`Unsupported artifact-standard database type: ${database.type}`);
23
+ }
24
+ const configuredPath = database?.path ?? DEFAULT_DATABASE_PATH;
25
+ return isAbsolute(configuredPath) ? configuredPath : join(projectRoot, configuredPath);
26
+ }
27
+ function readArtifactStandardBaseMigration() {
28
+ const migrationUrl = new URL("../src/database/migrations/0001_artifact_standard_base.sql", import.meta.url);
29
+ return readFileSync(migrationUrl, "utf8");
30
+ }
31
+ export function listArtifactStandardTables(db) {
32
+ const rows = db
33
+ .prepare(`SELECT name
34
+ FROM sqlite_master
35
+ WHERE type = 'table'
36
+ AND name LIKE 'artifact_standard_%'
37
+ ORDER BY name`)
38
+ .all();
39
+ return rows.map((row) => row.name);
40
+ }
41
+ export function applyArtifactStandardBaseMigration(db) {
42
+ db.exec(readArtifactStandardBaseMigration());
43
+ }
44
+ export function openArtifactStandardDatabase(options = {}) {
45
+ const databasePath = resolveArtifactStandardDatabasePath(options);
46
+ mkdirSync(dirname(databasePath), { recursive: true });
47
+ const db = new Database(databasePath);
48
+ try {
49
+ db.pragma("journal_mode = WAL");
50
+ db.pragma("foreign_keys = ON");
51
+ if (options.applyMigration !== false) {
52
+ applyArtifactStandardBaseMigration(db);
53
+ }
54
+ return db;
55
+ }
56
+ catch (error) {
57
+ db.close();
58
+ throw error;
59
+ }
60
+ }
61
+ export function initializeArtifactStandardDatabase(options = {}) {
62
+ const databasePath = resolveArtifactStandardDatabasePath(options);
63
+ const created = !existsSync(databasePath);
64
+ const db = openArtifactStandardDatabase(options);
65
+ try {
66
+ return {
67
+ databasePath,
68
+ created,
69
+ tables: listArtifactStandardTables(db)
70
+ };
71
+ }
72
+ finally {
73
+ db.close();
74
+ }
75
+ }
76
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ArtifactStandardService } from "./service.js";
2
+ import type { ArtifactStandardAggregate } from "./types.js";
3
+ export interface BusinessProcessDefinitionFixtureResult {
4
+ readonly aggregate: ArtifactStandardAggregate;
5
+ }
6
+ export interface InformationObjectDefinitionFixtureResult {
7
+ readonly aggregate: ArtifactStandardAggregate;
8
+ }
9
+ export declare function seedBusinessProcessDefinitionArtifactStandard(service: ArtifactStandardService): BusinessProcessDefinitionFixtureResult;
10
+ export declare function seedInformationObjectDefinitionArtifactStandard(service: ArtifactStandardService): InformationObjectDefinitionFixtureResult;
11
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C;AAED,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C;AAED,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,uBAAuB,GAC/B,sCAAsC,CAkZxC;AAED,wBAAgB,+CAA+C,CAC7D,OAAO,EAAE,uBAAuB,GAC/B,wCAAwC,CAsM1C"}