@asc-agent/runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +22 -0
  3. package/dist/adapters/claude-code/binding.d.ts +5 -0
  4. package/dist/adapters/claude-code/binding.js +14 -0
  5. package/dist/adapters/claude-code/guard.d.ts +54 -0
  6. package/dist/adapters/claude-code/guard.js +295 -0
  7. package/dist/adapters/claude-code/install.d.ts +67 -0
  8. package/dist/adapters/claude-code/install.js +231 -0
  9. package/dist/adapters/claude-code/observer.d.ts +38 -0
  10. package/dist/adapters/claude-code/observer.js +77 -0
  11. package/dist/adapters/claude-code/probe.d.ts +53 -0
  12. package/dist/adapters/claude-code/probe.js +129 -0
  13. package/dist/adapters/claude-code/skill.d.ts +8 -0
  14. package/dist/adapters/claude-code/skill.js +267 -0
  15. package/dist/adapters/fixture-work/index.d.ts +34 -0
  16. package/dist/adapters/fixture-work/index.js +78 -0
  17. package/dist/adapters/github/adapter.d.ts +32 -0
  18. package/dist/adapters/github/adapter.js +95 -0
  19. package/dist/adapters/github/client.d.ts +30 -0
  20. package/dist/adapters/github/client.js +90 -0
  21. package/dist/adapters/github/context.d.ts +44 -0
  22. package/dist/adapters/github/context.js +170 -0
  23. package/dist/adapters/github/event-source.d.ts +55 -0
  24. package/dist/adapters/github/event-source.js +183 -0
  25. package/dist/adapters/github/scm.d.ts +50 -0
  26. package/dist/adapters/github/scm.js +104 -0
  27. package/dist/adapters/gitlab/adapter.d.ts +36 -0
  28. package/dist/adapters/gitlab/adapter.js +117 -0
  29. package/dist/adapters/gitlab/client.d.ts +30 -0
  30. package/dist/adapters/gitlab/client.js +47 -0
  31. package/dist/adapters/gitlab/ports.d.ts +40 -0
  32. package/dist/adapters/gitlab/ports.js +186 -0
  33. package/dist/adapters/jam/adapter.d.ts +53 -0
  34. package/dist/adapters/jam/adapter.js +144 -0
  35. package/dist/adapters/jam/event-source.d.ts +28 -0
  36. package/dist/adapters/jam/event-source.js +65 -0
  37. package/dist/adapters/jam/mcp-client.d.ts +50 -0
  38. package/dist/adapters/jam/mcp-client.js +218 -0
  39. package/dist/adapters/jam/ports.d.ts +51 -0
  40. package/dist/adapters/jam/ports.js +167 -0
  41. package/dist/adapters/local/identity.d.ts +27 -0
  42. package/dist/adapters/local/identity.js +40 -0
  43. package/dist/adapters/local/presentation.d.ts +14 -0
  44. package/dist/adapters/local/presentation.js +42 -0
  45. package/dist/adapters/markdown/layout.d.ts +15 -0
  46. package/dist/adapters/markdown/layout.js +49 -0
  47. package/dist/adapters/markdown/serialize.d.ts +9 -0
  48. package/dist/adapters/markdown/serialize.js +120 -0
  49. package/dist/adapters/markdown/state-store.d.ts +23 -0
  50. package/dist/adapters/markdown/state-store.js +316 -0
  51. package/dist/adapters/mattermost/client.d.ts +23 -0
  52. package/dist/adapters/mattermost/client.js +54 -0
  53. package/dist/adapters/mattermost/presentation.d.ts +43 -0
  54. package/dist/adapters/mattermost/presentation.js +88 -0
  55. package/dist/adapters/memory/mocks.d.ts +87 -0
  56. package/dist/adapters/memory/mocks.js +163 -0
  57. package/dist/adapters/memory/runtime-binding.d.ts +23 -0
  58. package/dist/adapters/memory/runtime-binding.js +118 -0
  59. package/dist/adapters/memory/state-store.d.ts +17 -0
  60. package/dist/adapters/memory/state-store.js +125 -0
  61. package/dist/adapters/text/renderer.d.ts +7 -0
  62. package/dist/adapters/text/renderer.js +81 -0
  63. package/dist/adapters/webhook/ingress.d.ts +103 -0
  64. package/dist/adapters/webhook/ingress.js +150 -0
  65. package/dist/cli/asc.d.ts +16 -0
  66. package/dist/cli/asc.js +2914 -0
  67. package/dist/cli/identity-config.d.ts +7 -0
  68. package/dist/cli/identity-config.js +31 -0
  69. package/dist/composition/observe.d.ts +21 -0
  70. package/dist/composition/observe.js +72 -0
  71. package/dist/composition/registry.d.ts +33 -0
  72. package/dist/composition/registry.js +62 -0
  73. package/dist/composition/runtime.d.ts +63 -0
  74. package/dist/composition/runtime.js +155 -0
  75. package/dist/core/approval/service.d.ts +17 -0
  76. package/dist/core/approval/service.js +129 -0
  77. package/dist/core/attach/bootstrap.d.ts +102 -0
  78. package/dist/core/attach/bootstrap.js +178 -0
  79. package/dist/core/attach/init.d.ts +29 -0
  80. package/dist/core/attach/init.js +100 -0
  81. package/dist/core/attach/setup-plan.d.ts +125 -0
  82. package/dist/core/attach/setup-plan.js +177 -0
  83. package/dist/core/attach/setup.d.ts +40 -0
  84. package/dist/core/attach/setup.js +140 -0
  85. package/dist/core/binding/types.d.ts +93 -0
  86. package/dist/core/binding/types.js +74 -0
  87. package/dist/core/distribution/release.d.ts +15 -0
  88. package/dist/core/distribution/release.js +27 -0
  89. package/dist/core/distribution/runtime-install.d.ts +50 -0
  90. package/dist/core/distribution/runtime-install.js +90 -0
  91. package/dist/core/distribution/runtime-select.d.ts +74 -0
  92. package/dist/core/distribution/runtime-select.js +149 -0
  93. package/dist/core/execution/executor.d.ts +51 -0
  94. package/dist/core/execution/executor.js +106 -0
  95. package/dist/core/execution/grant.d.ts +42 -0
  96. package/dist/core/execution/grant.js +78 -0
  97. package/dist/core/model/entities.d.ts +872 -0
  98. package/dist/core/model/entities.js +285 -0
  99. package/dist/core/model/ids.d.ts +41 -0
  100. package/dist/core/model/ids.js +50 -0
  101. package/dist/core/model/transitions.d.ts +26 -0
  102. package/dist/core/model/transitions.js +124 -0
  103. package/dist/core/monitor/coverage.d.ts +111 -0
  104. package/dist/core/monitor/coverage.js +129 -0
  105. package/dist/core/monitor/engine.d.ts +134 -0
  106. package/dist/core/monitor/engine.js +574 -0
  107. package/dist/core/monitor/health-alerts.d.ts +35 -0
  108. package/dist/core/monitor/health-alerts.js +88 -0
  109. package/dist/core/monitor/investigation.d.ts +82 -0
  110. package/dist/core/monitor/investigation.js +232 -0
  111. package/dist/core/monitor/observation.d.ts +79 -0
  112. package/dist/core/monitor/observation.js +110 -0
  113. package/dist/core/monitor/relevance.d.ts +47 -0
  114. package/dist/core/monitor/relevance.js +100 -0
  115. package/dist/core/monitor/signals.d.ts +59 -0
  116. package/dist/core/monitor/signals.js +105 -0
  117. package/dist/core/operator/local-operator.d.ts +60 -0
  118. package/dist/core/operator/local-operator.js +82 -0
  119. package/dist/core/operator/preflight.d.ts +60 -0
  120. package/dist/core/operator/preflight.js +139 -0
  121. package/dist/core/operator/proceed.d.ts +98 -0
  122. package/dist/core/operator/proceed.js +167 -0
  123. package/dist/core/operator/progress.d.ts +124 -0
  124. package/dist/core/operator/progress.js +135 -0
  125. package/dist/core/operator/render.d.ts +34 -0
  126. package/dist/core/operator/render.js +170 -0
  127. package/dist/core/operator/runtime-binding.d.ts +61 -0
  128. package/dist/core/operator/runtime-binding.js +22 -0
  129. package/dist/core/policy/ownership.d.ts +44 -0
  130. package/dist/core/policy/ownership.js +46 -0
  131. package/dist/core/policy/policy.d.ts +99 -0
  132. package/dist/core/policy/policy.js +147 -0
  133. package/dist/core/policy/remote-freeze.d.ts +101 -0
  134. package/dist/core/policy/remote-freeze.js +151 -0
  135. package/dist/core/policy/scope.d.ts +23 -0
  136. package/dist/core/policy/scope.js +93 -0
  137. package/dist/core/presentation/digest.d.ts +98 -0
  138. package/dist/core/presentation/digest.js +160 -0
  139. package/dist/core/resolver/load.d.ts +121 -0
  140. package/dist/core/resolver/load.js +246 -0
  141. package/dist/core/resolver/render.d.ts +4 -0
  142. package/dist/core/resolver/render.js +62 -0
  143. package/dist/core/resolver/resolve.d.ts +42 -0
  144. package/dist/core/resolver/resolve.js +51 -0
  145. package/dist/core/resolver/version.d.ts +22 -0
  146. package/dist/core/resolver/version.js +49 -0
  147. package/dist/core/runtime/audit.d.ts +374 -0
  148. package/dist/core/runtime/audit.js +454 -0
  149. package/dist/core/runtime/claims.d.ts +115 -0
  150. package/dist/core/runtime/claims.js +153 -0
  151. package/dist/core/runtime/closure.d.ts +73 -0
  152. package/dist/core/runtime/closure.js +162 -0
  153. package/dist/core/runtime/controller.d.ts +40 -0
  154. package/dist/core/runtime/controller.js +121 -0
  155. package/dist/core/runtime/escalation.d.ts +188 -0
  156. package/dist/core/runtime/escalation.js +322 -0
  157. package/dist/core/runtime/execution-state.d.ts +43 -0
  158. package/dist/core/runtime/execution-state.js +81 -0
  159. package/dist/core/runtime/front.d.ts +95 -0
  160. package/dist/core/runtime/front.js +144 -0
  161. package/dist/core/runtime/orchestrator.d.ts +54 -0
  162. package/dist/core/runtime/orchestrator.js +98 -0
  163. package/dist/core/runtime/query.d.ts +184 -0
  164. package/dist/core/runtime/query.js +213 -0
  165. package/dist/core/runtime/report.d.ts +33 -0
  166. package/dist/core/runtime/report.js +108 -0
  167. package/dist/core/runtime/session.d.ts +156 -0
  168. package/dist/core/runtime/session.js +281 -0
  169. package/dist/core/runtime/store-ops.d.ts +22 -0
  170. package/dist/core/runtime/store-ops.js +26 -0
  171. package/dist/core/view/build-view.d.ts +36 -0
  172. package/dist/core/view/build-view.js +131 -0
  173. package/dist/core/view/decision-view.d.ts +564 -0
  174. package/dist/core/view/decision-view.js +103 -0
  175. package/dist/core/workspace/identity.d.ts +82 -0
  176. package/dist/core/workspace/identity.js +133 -0
  177. package/dist/core/workspace/index-store.d.ts +140 -0
  178. package/dist/core/workspace/index-store.js +125 -0
  179. package/dist/core/workspace/migrate.d.ts +73 -0
  180. package/dist/core/workspace/migrate.js +123 -0
  181. package/dist/core/workspace/resolve.d.ts +34 -0
  182. package/dist/core/workspace/resolve.js +89 -0
  183. package/dist/ports/adapter.d.ts +35 -0
  184. package/dist/ports/adapter.js +12 -0
  185. package/dist/ports/approval.d.ts +98 -0
  186. package/dist/ports/approval.js +7 -0
  187. package/dist/ports/change-context.d.ts +22 -0
  188. package/dist/ports/change-context.js +8 -0
  189. package/dist/ports/event-source.d.ts +42 -0
  190. package/dist/ports/event-source.js +6 -0
  191. package/dist/ports/inventory.d.ts +53 -0
  192. package/dist/ports/inventory.js +12 -0
  193. package/dist/ports/presentation.d.ts +62 -0
  194. package/dist/ports/presentation.js +13 -0
  195. package/dist/ports/renderer.d.ts +23 -0
  196. package/dist/ports/renderer.js +7 -0
  197. package/dist/ports/resource-context.d.ts +51 -0
  198. package/dist/ports/resource-context.js +9 -0
  199. package/dist/ports/scm.d.ts +40 -0
  200. package/dist/ports/scm.js +6 -0
  201. package/dist/ports/state-store.d.ts +97 -0
  202. package/dist/ports/state-store.js +12 -0
  203. package/dist/presets/balanced.json +8 -0
  204. package/dist/presets/conservative.json +9 -0
  205. package/dist/presets/lightweight.json +8 -0
  206. package/dist/profiles/example-team/profile.json +101 -0
  207. package/dist/profiles/pilot-local/profile.json +56 -0
  208. package/dist/schemas/profile.d.ts +631 -0
  209. package/dist/schemas/profile.js +287 -0
  210. package/package.json +55 -0
@@ -0,0 +1,97 @@
1
+ import type { ApprovalRequest, ControlState, ExecutionGrant, MonitorEvent, QueueItem, Session } from '../core/model/entities.ts';
2
+ /**
3
+ * 저장 가능한 entity 종류. 모든 entity는 `version`을 갖고, 그 값이 CAS 토큰이다 —
4
+ * 별도 etag를 두지 않는다 (C-01 §8).
5
+ */
6
+ export type EntityMap = {
7
+ session: Session;
8
+ request: ApprovalRequest;
9
+ grant: ExecutionGrant;
10
+ queueItem: QueueItem;
11
+ event: MonitorEvent;
12
+ };
13
+ export type EntityKind = keyof EntityMap;
14
+ /** entity별 primary key. event는 id 대신 eventKey를 쓴다. */
15
+ export declare const ENTITY_KEY: {
16
+ [K in EntityKind]: keyof EntityMap[K] & string;
17
+ };
18
+ export type CasOk<T> = {
19
+ ok: true;
20
+ entity: T;
21
+ };
22
+ /**
23
+ * 기대한 version이 아니었다 — 그 사이 누군가(다른 채널·다른 Run) 전이시켰다.
24
+ * `current`는 실패 시점의 실제 entity로, 호출자가 이미 결정된 요청인지 판별하는 근거다.
25
+ */
26
+ export type CasConflict<T> = {
27
+ ok: false;
28
+ reason: 'VERSION_CONFLICT';
29
+ current: T;
30
+ };
31
+ export type CasMissing = {
32
+ ok: false;
33
+ reason: 'NOT_FOUND';
34
+ current?: undefined;
35
+ };
36
+ export type CasResult<T> = CasOk<T> | CasConflict<T> | CasMissing;
37
+ /** 같은 id로 두 번 만들 수 없다 — 생성도 원자적이어야 한다. */
38
+ export type CreateResult<T> = CasOk<T> | {
39
+ ok: false;
40
+ reason: 'ALREADY_EXISTS';
41
+ current: T;
42
+ };
43
+ export type ListFilter<K extends EntityKind> = {
44
+ /** 부분 일치 조건. 지정한 필드가 전부 같은 entity만 반환한다. */
45
+ where?: Partial<EntityMap[K]>;
46
+ limit?: number;
47
+ };
48
+ /**
49
+ * append-only History. 감지 이력과 최종 처분을 남기며, 요약·압축하지 않는다 (OM §7.3~7.4).
50
+ * 회전은 Adapter가 무손실 이동으로 처리한다.
51
+ */
52
+ export type HistoryEntry = {
53
+ at: string;
54
+ actor: string;
55
+ kind: string;
56
+ ref: string;
57
+ detail?: string;
58
+ };
59
+ /**
60
+ * Adapter가 자기 부가 정보를 두는 격리된 저장 공간. Core는 이 안의 형태를 모른다 —
61
+ * PresentationRecord 같은 채널별 metadata가 여기 산다 (§ports/approval.ts).
62
+ */
63
+ export interface ScopedStore {
64
+ get(key: string): Promise<string | null>;
65
+ set(key: string, value: string): Promise<void>;
66
+ delete(key: string): Promise<void>;
67
+ keys(prefix?: string): Promise<string[]>;
68
+ /**
69
+ * 없을 때만 쓰고, 썼는지 알려준다. 프로세스가 여럿이어도 정확히 하나만 성공해야 하므로
70
+ * 확인과 쓰기 사이에 틈이 있으면 안 된다 — Adapter가 원자적으로 구현한다.
71
+ * Monitor Run 하나만 돌게 하는 lease가 이 위에 선다 (OM §10.1).
72
+ */
73
+ setIfAbsent(key: string, value: string): Promise<boolean>;
74
+ }
75
+ export interface StateStore {
76
+ get<K extends EntityKind>(kind: K, id: string): Promise<EntityMap[K] | null>;
77
+ list<K extends EntityKind>(kind: K, filter?: ListFilter<K>): Promise<EntityMap[K][]>;
78
+ /** version 0으로 새 entity를 만든다. */
79
+ create<K extends EntityKind>(kind: K, entity: EntityMap[K]): Promise<CreateResult<EntityMap[K]>>;
80
+ /**
81
+ * 유일한 갱신 경로. `next.version`은 `expectedVersion + 1`이어야 하며, 저장된 version이
82
+ * expectedVersion과 다르면 아무것도 쓰지 않고 실패한다.
83
+ */
84
+ compareAndSet<K extends EntityKind>(kind: K, id: string, expectedVersion: number, next: EntityMap[K]): Promise<CasResult<EntityMap[K]>>;
85
+ /** Controller single-writer 상태 문서 (OM §7.2). 갱신도 CAS를 거친다. */
86
+ getControlState(): Promise<ControlState>;
87
+ setControlState(expectedVersion: number, next: ControlState): Promise<CasResult<ControlState>>;
88
+ /**
89
+ * 끝난 entity를 보관소로 옮긴다 (OM §7.4). 지우거나 요약하지 않는다 — 옮기기만 한다.
90
+ * 옮겨진 것은 `get`·`list`에 더는 나타나지 않으므로, 회수처럼 "한 번만 일어나야 하는"
91
+ * 절차가 저절로 멱등해진다.
92
+ */
93
+ archive<K extends EntityKind>(kind: K, id: string): Promise<boolean>;
94
+ appendHistory(entry: HistoryEntry): Promise<void>;
95
+ readHistory(limit?: number): Promise<HistoryEntry[]>;
96
+ scope(adapterId: string): ScopedStore;
97
+ }
@@ -0,0 +1,12 @@
1
+ // State Store Port — Core가 entity를 읽고 쓰는 유일한 통로.
2
+ // Core Contract는 이 인터페이스이지 파일 배치가 아니다 (OM §7.0). Markdown Adapter는
3
+ // 기본 구현일 뿐이고, SQLite/JSON으로 바꿔도 Core는 그대로여야 한다.
4
+ // 동시성 보장(compare-and-set, atomic rename 등)은 전부 Adapter 책임이다 (OM §7.2).
5
+ /** entity별 primary key. event는 id 대신 eventKey를 쓴다. */
6
+ export const ENTITY_KEY = {
7
+ session: 'id',
8
+ request: 'id',
9
+ grant: 'id',
10
+ queueItem: 'id',
11
+ event: 'eventKey',
12
+ };
@@ -0,0 +1,8 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "balanced",
4
+ "$comment": "기본값. 검증은 지키고 조사 깊이만 조절한다.",
5
+ "policy": {
6
+ "settings": { "deepAnalysisP2": false }
7
+ }
8
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "conservative",
4
+ "$comment": "의심스러우면 멈춘다. 공용 모듈 변경과 의존성 추가를 더 조인다.",
5
+ "policy": {
6
+ "softDeny": ["test.skip", "migration.run"],
7
+ "settings": { "deepAnalysisP2": true }
8
+ }
9
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "lightweight",
4
+ "$comment": "혼자 빠르게 도는 환경. 조사 깊이를 줄이되 HARD DENY는 그대로다.",
5
+ "policy": {
6
+ "settings": { "deepAnalysisP2": false, "independentVerifier": false }
7
+ }
8
+ }
@@ -0,0 +1,101 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "$comment": "공개 예시 Profile. 실 프로젝트가 아니라 스키마와 계층 병합이 어떻게 서는지 보여 주기 위한 것이다 — 개인 계정·토큰은 여기가 아니라 User Override와 자격 저장소에 둔다.",
4
+ "id": "example-team",
5
+ "requires": {
6
+ "asc": ">=0.1 <1.0",
7
+ "capabilities": [
8
+ "scm.github"
9
+ ]
10
+ },
11
+ "optionalCapabilities": [
12
+ "messenger.mattermost"
13
+ ],
14
+ "project": {
15
+ "scm": "github",
16
+ "repository": "example-org/example-repo"
17
+ },
18
+ "canonical": {
19
+ "sources": [
20
+ {
21
+ "id": "shared-spec",
22
+ "$comment": "파트 공용 spec과 계약. develop이 정본이다.",
23
+ "provider": "git",
24
+ "remote": "origin",
25
+ "ref": "develop",
26
+ "paths": [
27
+ "specs/**"
28
+ ]
29
+ },
30
+ {
31
+ "id": "fe-plan",
32
+ "$comment": "FE plan·tasks는 front 브랜치에만 있고 develop에 병합돼 있지 않다.",
33
+ "provider": "git",
34
+ "remote": "origin",
35
+ "ref": "front",
36
+ "paths": [
37
+ "specs/**/FE/**"
38
+ ]
39
+ }
40
+ ]
41
+ },
42
+ "monitor": {
43
+ "$comment": "reasonSignals는 GitHub Adapter의 GITHUB_REASON_SIGNALS와 같은 표다. signalPriority는 실측으로 조정하는 자리이며, 여기 값은 형태를 보여 주는 예시다.",
44
+ "reasonSignals": {
45
+ "assign": "assigned_to_me",
46
+ "mention": "mentioned_me",
47
+ "team_mention": "mentioned_me",
48
+ "review_requested": "review_requested",
49
+ "author": "my_pr_reviewed",
50
+ "comment": "participated_thread_changed",
51
+ "subscribed": "participated_thread_changed",
52
+ "state_change": "participated_thread_changed"
53
+ },
54
+ "priorityLabels": {
55
+ "front": "P1"
56
+ },
57
+ "escalationLabels": [
58
+ "blocker"
59
+ ],
60
+ "signalPriority": {
61
+ "mentioned_me": "P1",
62
+ "participated_thread_changed": "P2",
63
+ "my_pr_reviewed": "P1"
64
+ }
65
+ },
66
+ "workflow": {
67
+ "$comment": "포인터만 둔다. 내용은 복사하지 않는다.",
68
+ "blockSource": "docs/backlog.md",
69
+ "taskSource": [
70
+ "speckit_tasks",
71
+ "session_objective"
72
+ ]
73
+ },
74
+ "policy": {
75
+ "$comment": "파트 경계를 넘는 변경은 Session 계약으로 열 수 없다.",
76
+ "hardDeny": [
77
+ "spec.change",
78
+ "cross-part-contract.change",
79
+ "mvp-scope.change"
80
+ ],
81
+ "softDeny": [
82
+ "shared-module.change"
83
+ ],
84
+ "roleScopes": {
85
+ "implementer": [
86
+ "web-frontend/**"
87
+ ],
88
+ "verifier": []
89
+ },
90
+ "settings": {
91
+ "independentVerifier": true
92
+ },
93
+ "lockedSettings": [
94
+ "independentVerifier"
95
+ ]
96
+ },
97
+ "terminology": {
98
+ "Block": "Spec 하위 작업 묶음 (B-NN)",
99
+ "Canonical": "정본 — spec·contracts는 develop, FE plan은 front"
100
+ }
101
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "$comment": "fixture·demo·pilot 전용 Profile. canonical 없음 = 정본 검증이 성립하지 않는다 — 실 프로젝트에 attach하지 않는다.",
4
+ "id": "pilot-local",
5
+ "requires": {
6
+ "asc": ">=0.1 <1.0",
7
+ "capabilities": []
8
+ },
9
+ "project": {
10
+ "scm": "local",
11
+ "repository": "pilot/fixture"
12
+ },
13
+ "canonical": {
14
+ "sources": []
15
+ },
16
+ "policy": {
17
+ "roleScopes": {
18
+ "implementer": [
19
+ "src/**"
20
+ ],
21
+ "verifier": []
22
+ },
23
+ "unionLists": {
24
+ "closureChecklist": [
25
+ "tasks-synced",
26
+ "backlog-updated",
27
+ "worklog-recorded"
28
+ ]
29
+ }
30
+ },
31
+ "ownership": {
32
+ "frontend": {
33
+ "paths": [
34
+ "src/**"
35
+ ],
36
+ "authorities": [
37
+ "client-ui",
38
+ "client-routing"
39
+ ]
40
+ },
41
+ "backend": {
42
+ "paths": [
43
+ "server/**"
44
+ ],
45
+ "authorities": [
46
+ "api-contract",
47
+ "persistence"
48
+ ]
49
+ },
50
+ "product": {
51
+ "authorities": [
52
+ "product-policy"
53
+ ]
54
+ }
55
+ }
56
+ }