@jamesaphoenix/tx-types 0.4.2 → 0.4.4

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 (62) hide show
  1. package/README.md +480 -0
  2. package/dist/attempt.d.ts +36 -28
  3. package/dist/attempt.d.ts.map +1 -1
  4. package/dist/attempt.js +59 -1
  5. package/dist/attempt.js.map +1 -1
  6. package/dist/cycle.d.ts +130 -0
  7. package/dist/cycle.d.ts.map +1 -0
  8. package/dist/cycle.js +89 -0
  9. package/dist/cycle.js.map +1 -0
  10. package/dist/deduplication.d.ts +76 -92
  11. package/dist/deduplication.d.ts.map +1 -1
  12. package/dist/deduplication.js +63 -2
  13. package/dist/deduplication.js.map +1 -1
  14. package/dist/doc.d.ts +269 -0
  15. package/dist/doc.d.ts.map +1 -0
  16. package/dist/doc.js +232 -0
  17. package/dist/doc.js.map +1 -0
  18. package/dist/file-learning.d.ts +23 -28
  19. package/dist/file-learning.d.ts.map +1 -1
  20. package/dist/file-learning.js +22 -2
  21. package/dist/file-learning.js.map +1 -1
  22. package/dist/index.d.ts +14 -14
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +38 -21
  25. package/dist/index.js.map +1 -1
  26. package/dist/learning.d.ts +167 -172
  27. package/dist/learning.d.ts.map +1 -1
  28. package/dist/learning.js +109 -1
  29. package/dist/learning.js.map +1 -1
  30. package/dist/response.d.ts +636 -0
  31. package/dist/response.d.ts.map +1 -0
  32. package/dist/response.js +354 -0
  33. package/dist/response.js.map +1 -0
  34. package/dist/run.d.ts +73 -40
  35. package/dist/run.d.ts.map +1 -1
  36. package/dist/run.js +108 -1
  37. package/dist/run.js.map +1 -1
  38. package/dist/task.d.ts +114 -78
  39. package/dist/task.d.ts.map +1 -1
  40. package/dist/task.js +149 -2
  41. package/dist/task.js.map +1 -1
  42. package/dist/tracked-project.d.ts +24 -34
  43. package/dist/tracked-project.d.ts.map +1 -1
  44. package/dist/tracked-project.js +34 -0
  45. package/dist/tracked-project.js.map +1 -1
  46. package/package.json +27 -3
  47. package/dist/anchor.d.ts +0 -153
  48. package/dist/anchor.d.ts.map +0 -1
  49. package/dist/anchor.js +0 -27
  50. package/dist/anchor.js.map +0 -1
  51. package/dist/candidate.d.ts +0 -203
  52. package/dist/candidate.d.ts.map +0 -1
  53. package/dist/candidate.js +0 -30
  54. package/dist/candidate.js.map +0 -1
  55. package/dist/edge.d.ts +0 -90
  56. package/dist/edge.d.ts.map +0 -1
  57. package/dist/edge.js +0 -32
  58. package/dist/edge.js.map +0 -1
  59. package/dist/symbol.d.ts +0 -72
  60. package/dist/symbol.d.ts.map +0 -1
  61. package/dist/symbol.js +0 -29
  62. package/dist/symbol.js.map +0 -1
package/dist/doc.d.ts ADDED
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Doc types for tx
3
+ *
4
+ * Type definitions for the docs-as-primitives system.
5
+ * See DD-023 for specification.
6
+ * Core type definitions using Effect Schema (Doctrine Rule 10).
7
+ *
8
+ * Docs are structured YAML (source of truth) with rendered MD views.
9
+ * YAML content lives on disk (.tx/docs/); DB stores metadata + links only.
10
+ */
11
+ import { Schema } from "effect";
12
+ export declare const DOC_KINDS: readonly ["overview", "prd", "design"];
13
+ export declare const DOC_STATUSES: readonly ["changing", "locked"];
14
+ export declare const DOC_LINK_TYPES: readonly ["overview_to_prd", "overview_to_design", "prd_to_design", "design_patch"];
15
+ export declare const TASK_DOC_LINK_TYPES: readonly ["implements", "references"];
16
+ export declare const INVARIANT_ENFORCEMENT_TYPES: readonly ["integration_test", "linter", "llm_as_judge"];
17
+ export declare const INVARIANT_STATUSES: readonly ["active", "deprecated"];
18
+ /** Doc kind — overview (one per project), prd, or design. */
19
+ export declare const DocKindSchema: Schema.Literal<["overview", "prd", "design"]>;
20
+ export type DocKind = typeof DocKindSchema.Type;
21
+ /** Doc status — changing (editable) or locked (immutable). */
22
+ export declare const DocStatusSchema: Schema.Literal<["changing", "locked"]>;
23
+ export type DocStatus = typeof DocStatusSchema.Type;
24
+ /** Doc link type — directed edge between docs in the DAG. */
25
+ export declare const DocLinkTypeSchema: Schema.Literal<["overview_to_prd", "overview_to_design", "prd_to_design", "design_patch"]>;
26
+ export type DocLinkType = typeof DocLinkTypeSchema.Type;
27
+ /** Task-doc link type — how a task relates to a doc. */
28
+ export declare const TaskDocLinkTypeSchema: Schema.Literal<["implements", "references"]>;
29
+ export type TaskDocLinkType = typeof TaskDocLinkTypeSchema.Type;
30
+ /** Doc ID — branded integer. */
31
+ export declare const DocIdSchema: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
32
+ export type DocId = typeof DocIdSchema.Type;
33
+ /** Core doc entity (DB metadata — YAML content lives on disk only). */
34
+ export declare const DocSchema: Schema.Struct<{
35
+ id: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
36
+ hash: typeof Schema.String;
37
+ kind: Schema.Literal<["overview", "prd", "design"]>;
38
+ name: typeof Schema.String;
39
+ title: typeof Schema.String;
40
+ version: Schema.filter<typeof Schema.Number>;
41
+ status: Schema.Literal<["changing", "locked"]>;
42
+ filePath: typeof Schema.String;
43
+ parentDocId: Schema.NullOr<Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">>;
44
+ createdAt: typeof Schema.DateFromSelf;
45
+ lockedAt: Schema.NullOr<typeof Schema.DateFromSelf>;
46
+ metadata: Schema.Record$<typeof Schema.String, typeof Schema.Unknown>;
47
+ }>;
48
+ export type Doc = typeof DocSchema.Type;
49
+ /** Doc with resolved links (for API responses). */
50
+ export declare const DocWithLinksSchema: Schema.Struct<{
51
+ linksTo: Schema.Array$<Schema.Struct<{
52
+ docId: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
53
+ docName: typeof Schema.String;
54
+ linkType: Schema.Literal<["overview_to_prd", "overview_to_design", "prd_to_design", "design_patch"]>;
55
+ }>>;
56
+ linksFrom: Schema.Array$<Schema.Struct<{
57
+ docId: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
58
+ docName: typeof Schema.String;
59
+ linkType: Schema.Literal<["overview_to_prd", "overview_to_design", "prd_to_design", "design_patch"]>;
60
+ }>>;
61
+ taskIds: Schema.Array$<typeof Schema.String>;
62
+ invariantCount: Schema.filter<typeof Schema.Number>;
63
+ id: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
64
+ hash: typeof Schema.String;
65
+ kind: Schema.Literal<["overview", "prd", "design"]>;
66
+ name: typeof Schema.String;
67
+ title: typeof Schema.String;
68
+ version: Schema.filter<typeof Schema.Number>;
69
+ status: Schema.Literal<["changing", "locked"]>;
70
+ filePath: typeof Schema.String;
71
+ parentDocId: Schema.NullOr<Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">>;
72
+ createdAt: typeof Schema.DateFromSelf;
73
+ lockedAt: Schema.NullOr<typeof Schema.DateFromSelf>;
74
+ metadata: Schema.Record$<typeof Schema.String, typeof Schema.Unknown>;
75
+ }>;
76
+ export type DocWithLinks = typeof DocWithLinksSchema.Type;
77
+ /** Doc link entity. */
78
+ export declare const DocLinkSchema: Schema.Struct<{
79
+ id: Schema.filter<typeof Schema.Number>;
80
+ fromDocId: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
81
+ toDocId: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
82
+ linkType: Schema.Literal<["overview_to_prd", "overview_to_design", "prd_to_design", "design_patch"]>;
83
+ createdAt: typeof Schema.DateFromSelf;
84
+ }>;
85
+ export type DocLink = typeof DocLinkSchema.Type;
86
+ /** Task-doc link entity. */
87
+ export declare const TaskDocLinkSchema: Schema.Struct<{
88
+ id: Schema.filter<typeof Schema.Number>;
89
+ taskId: typeof Schema.String;
90
+ docId: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
91
+ linkType: Schema.Literal<["implements", "references"]>;
92
+ createdAt: typeof Schema.DateFromSelf;
93
+ }>;
94
+ export type TaskDocLink = typeof TaskDocLinkSchema.Type;
95
+ /** Input for creating a new doc. */
96
+ export declare const CreateDocInputSchema: Schema.Struct<{
97
+ kind: Schema.Literal<["overview", "prd", "design"]>;
98
+ name: typeof Schema.String;
99
+ title: typeof Schema.String;
100
+ yamlContent: typeof Schema.String;
101
+ metadata: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
102
+ }>;
103
+ export type CreateDocInput = typeof CreateDocInputSchema.Type;
104
+ /** Invariant enforcement type — how the invariant is verified. */
105
+ export declare const InvariantEnforcementSchema: Schema.Literal<["integration_test", "linter", "llm_as_judge"]>;
106
+ export type InvariantEnforcement = typeof InvariantEnforcementSchema.Type;
107
+ /** Invariant status. */
108
+ export declare const InvariantStatusSchema: Schema.Literal<["active", "deprecated"]>;
109
+ export type InvariantStatus = typeof InvariantStatusSchema.Type;
110
+ /** Invariant ID — branded string matching INV-[A-Z0-9-]+. */
111
+ export declare const InvariantIdSchema: Schema.brand<Schema.filter<typeof Schema.String>, "InvariantId">;
112
+ export type InvariantId = typeof InvariantIdSchema.Type;
113
+ /** Invariant entity — a machine-checkable system rule. */
114
+ export declare const InvariantSchema: Schema.Struct<{
115
+ id: Schema.brand<Schema.filter<typeof Schema.String>, "InvariantId">;
116
+ rule: typeof Schema.String;
117
+ enforcement: Schema.Literal<["integration_test", "linter", "llm_as_judge"]>;
118
+ docId: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
119
+ subsystem: Schema.NullOr<typeof Schema.String>;
120
+ testRef: Schema.NullOr<typeof Schema.String>;
121
+ lintRule: Schema.NullOr<typeof Schema.String>;
122
+ promptRef: Schema.NullOr<typeof Schema.String>;
123
+ status: Schema.Literal<["active", "deprecated"]>;
124
+ createdAt: typeof Schema.DateFromSelf;
125
+ metadata: Schema.Record$<typeof Schema.String, typeof Schema.Unknown>;
126
+ }>;
127
+ export type Invariant = typeof InvariantSchema.Type;
128
+ /** Invariant check result — audit trail entry. */
129
+ export declare const InvariantCheckSchema: Schema.Struct<{
130
+ id: Schema.filter<typeof Schema.Number>;
131
+ invariantId: Schema.brand<Schema.filter<typeof Schema.String>, "InvariantId">;
132
+ passed: typeof Schema.Boolean;
133
+ details: Schema.NullOr<typeof Schema.String>;
134
+ checkedAt: typeof Schema.DateFromSelf;
135
+ durationMs: Schema.NullOr<Schema.filter<typeof Schema.Number>>;
136
+ }>;
137
+ export type InvariantCheck = typeof InvariantCheckSchema.Type;
138
+ /** Input for upserting an invariant (from YAML sync). */
139
+ export declare const UpsertInvariantInputSchema: Schema.Struct<{
140
+ id: typeof Schema.String;
141
+ rule: typeof Schema.String;
142
+ enforcement: Schema.Literal<["integration_test", "linter", "llm_as_judge"]>;
143
+ docId: Schema.brand<Schema.filter<typeof Schema.Number>, "DocId">;
144
+ subsystem: Schema.optional<Schema.NullOr<typeof Schema.String>>;
145
+ testRef: Schema.optional<Schema.NullOr<typeof Schema.String>>;
146
+ lintRule: Schema.optional<Schema.NullOr<typeof Schema.String>>;
147
+ promptRef: Schema.optional<Schema.NullOr<typeof Schema.String>>;
148
+ }>;
149
+ export type UpsertInvariantInput = typeof UpsertInvariantInputSchema.Type;
150
+ /** Input for recording an invariant check. */
151
+ export declare const RecordInvariantCheckInputSchema: Schema.Struct<{
152
+ invariantId: typeof Schema.String;
153
+ passed: typeof Schema.Boolean;
154
+ details: Schema.optional<Schema.NullOr<typeof Schema.String>>;
155
+ durationMs: Schema.optional<Schema.NullOr<Schema.filter<typeof Schema.Number>>>;
156
+ }>;
157
+ export type RecordInvariantCheckInput = typeof RecordInvariantCheckInputSchema.Type;
158
+ /**
159
+ * Check if a string is a valid doc kind.
160
+ */
161
+ export declare const isValidDocKind: (kind: string) => kind is DocKind;
162
+ export declare class InvalidDocKindError extends Error {
163
+ readonly kind: string;
164
+ constructor(kind: string);
165
+ }
166
+ export declare const assertDocKind: (kind: string) => DocKind;
167
+ /**
168
+ * Check if a string is a valid doc status.
169
+ */
170
+ export declare const isValidDocStatus: (status: string) => status is DocStatus;
171
+ export declare class InvalidDocStatusError extends Error {
172
+ readonly status: string;
173
+ constructor(status: string);
174
+ }
175
+ export declare const assertDocStatus: (status: string) => DocStatus;
176
+ /**
177
+ * Check if a string is a valid doc link type.
178
+ */
179
+ export declare const isValidDocLinkType: (linkType: string) => linkType is DocLinkType;
180
+ export declare class InvalidDocLinkTypeError extends Error {
181
+ readonly linkType: string;
182
+ constructor(linkType: string);
183
+ }
184
+ export declare const assertDocLinkType: (linkType: string) => DocLinkType;
185
+ /** Node in the doc graph. */
186
+ export declare const DocGraphNodeSchema: Schema.Struct<{
187
+ id: typeof Schema.String;
188
+ label: typeof Schema.String;
189
+ kind: Schema.Literal<["overview", "prd", "design", "task"]>;
190
+ status: Schema.optional<typeof Schema.String>;
191
+ }>;
192
+ export type DocGraphNode = typeof DocGraphNodeSchema.Type;
193
+ /** Edge in the doc graph. */
194
+ export declare const DocGraphEdgeSchema: Schema.Struct<{
195
+ source: typeof Schema.String;
196
+ target: typeof Schema.String;
197
+ type: typeof Schema.String;
198
+ }>;
199
+ export type DocGraphEdge = typeof DocGraphEdgeSchema.Type;
200
+ /** Full doc graph (nodes + edges). */
201
+ export declare const DocGraphSchema: Schema.Struct<{
202
+ nodes: Schema.Array$<Schema.Struct<{
203
+ id: typeof Schema.String;
204
+ label: typeof Schema.String;
205
+ kind: Schema.Literal<["overview", "prd", "design", "task"]>;
206
+ status: Schema.optional<typeof Schema.String>;
207
+ }>>;
208
+ edges: Schema.Array$<Schema.Struct<{
209
+ source: typeof Schema.String;
210
+ target: typeof Schema.String;
211
+ type: typeof Schema.String;
212
+ }>>;
213
+ }>;
214
+ export type DocGraph = typeof DocGraphSchema.Type;
215
+ /** Database row type for docs (snake_case from SQLite). */
216
+ export interface DocRow {
217
+ id: number;
218
+ hash: string;
219
+ kind: string;
220
+ name: string;
221
+ title: string;
222
+ version: number;
223
+ status: string;
224
+ file_path: string;
225
+ parent_doc_id: number | null;
226
+ created_at: string;
227
+ locked_at: string | null;
228
+ metadata: string | null;
229
+ }
230
+ /** Database row type for doc links. */
231
+ export interface DocLinkRow {
232
+ id: number;
233
+ from_doc_id: number;
234
+ to_doc_id: number;
235
+ link_type: string;
236
+ created_at: string;
237
+ }
238
+ /** Database row type for task-doc links. */
239
+ export interface TaskDocLinkRow {
240
+ id: number;
241
+ task_id: string;
242
+ doc_id: number;
243
+ link_type: string;
244
+ created_at: string;
245
+ }
246
+ /** Database row type for invariants. */
247
+ export interface InvariantRow {
248
+ id: string;
249
+ rule: string;
250
+ enforcement: string;
251
+ doc_id: number;
252
+ subsystem: string | null;
253
+ test_ref: string | null;
254
+ lint_rule: string | null;
255
+ prompt_ref: string | null;
256
+ status: string;
257
+ created_at: string;
258
+ metadata: string | null;
259
+ }
260
+ /** Database row type for invariant checks. */
261
+ export interface InvariantCheckRow {
262
+ id: number;
263
+ invariant_id: string;
264
+ passed: number;
265
+ details: string | null;
266
+ checked_at: string;
267
+ duration_ms: number | null;
268
+ }
269
+ //# sourceMappingURL=doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../src/doc.ts"],"names":[],"mappings":"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"}
package/dist/doc.js ADDED
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Doc types for tx
3
+ *
4
+ * Type definitions for the docs-as-primitives system.
5
+ * See DD-023 for specification.
6
+ * Core type definitions using Effect Schema (Doctrine Rule 10).
7
+ *
8
+ * Docs are structured YAML (source of truth) with rendered MD views.
9
+ * YAML content lives on disk (.tx/docs/); DB stores metadata + links only.
10
+ */
11
+ import { Schema } from "effect";
12
+ // =============================================================================
13
+ // CONSTANTS
14
+ // =============================================================================
15
+ export const DOC_KINDS = ["overview", "prd", "design"];
16
+ export const DOC_STATUSES = ["changing", "locked"];
17
+ export const DOC_LINK_TYPES = [
18
+ "overview_to_prd",
19
+ "overview_to_design",
20
+ "prd_to_design",
21
+ "design_patch",
22
+ ];
23
+ export const TASK_DOC_LINK_TYPES = ["implements", "references"];
24
+ export const INVARIANT_ENFORCEMENT_TYPES = [
25
+ "integration_test",
26
+ "linter",
27
+ "llm_as_judge",
28
+ ];
29
+ export const INVARIANT_STATUSES = ["active", "deprecated"];
30
+ // =============================================================================
31
+ // SCHEMAS & TYPES — Docs
32
+ // =============================================================================
33
+ /** Doc kind — overview (one per project), prd, or design. */
34
+ export const DocKindSchema = Schema.Literal(...DOC_KINDS);
35
+ /** Doc status — changing (editable) or locked (immutable). */
36
+ export const DocStatusSchema = Schema.Literal(...DOC_STATUSES);
37
+ /** Doc link type — directed edge between docs in the DAG. */
38
+ export const DocLinkTypeSchema = Schema.Literal(...DOC_LINK_TYPES);
39
+ /** Task-doc link type — how a task relates to a doc. */
40
+ export const TaskDocLinkTypeSchema = Schema.Literal(...TASK_DOC_LINK_TYPES);
41
+ /** Doc ID — branded integer. */
42
+ export const DocIdSchema = Schema.Number.pipe(Schema.int(), Schema.brand("DocId"));
43
+ /** Core doc entity (DB metadata — YAML content lives on disk only). */
44
+ export const DocSchema = Schema.Struct({
45
+ id: DocIdSchema,
46
+ hash: Schema.String,
47
+ kind: DocKindSchema,
48
+ name: Schema.String,
49
+ title: Schema.String,
50
+ version: Schema.Number.pipe(Schema.int()),
51
+ status: DocStatusSchema,
52
+ filePath: Schema.String,
53
+ parentDocId: Schema.NullOr(DocIdSchema),
54
+ createdAt: Schema.DateFromSelf,
55
+ lockedAt: Schema.NullOr(Schema.DateFromSelf),
56
+ metadata: Schema.Record({ key: Schema.String, value: Schema.Unknown }),
57
+ });
58
+ /** Doc with resolved links (for API responses). */
59
+ export const DocWithLinksSchema = Schema.Struct({
60
+ ...DocSchema.fields,
61
+ linksTo: Schema.Array(Schema.Struct({
62
+ docId: DocIdSchema,
63
+ docName: Schema.String,
64
+ linkType: DocLinkTypeSchema,
65
+ })),
66
+ linksFrom: Schema.Array(Schema.Struct({
67
+ docId: DocIdSchema,
68
+ docName: Schema.String,
69
+ linkType: DocLinkTypeSchema,
70
+ })),
71
+ taskIds: Schema.Array(Schema.String),
72
+ invariantCount: Schema.Number.pipe(Schema.int()),
73
+ });
74
+ /** Doc link entity. */
75
+ export const DocLinkSchema = Schema.Struct({
76
+ id: Schema.Number.pipe(Schema.int()),
77
+ fromDocId: DocIdSchema,
78
+ toDocId: DocIdSchema,
79
+ linkType: DocLinkTypeSchema,
80
+ createdAt: Schema.DateFromSelf,
81
+ });
82
+ /** Task-doc link entity. */
83
+ export const TaskDocLinkSchema = Schema.Struct({
84
+ id: Schema.Number.pipe(Schema.int()),
85
+ taskId: Schema.String,
86
+ docId: DocIdSchema,
87
+ linkType: TaskDocLinkTypeSchema,
88
+ createdAt: Schema.DateFromSelf,
89
+ });
90
+ /** Input for creating a new doc. */
91
+ export const CreateDocInputSchema = Schema.Struct({
92
+ kind: DocKindSchema,
93
+ name: Schema.String,
94
+ title: Schema.String,
95
+ yamlContent: Schema.String,
96
+ metadata: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Unknown })),
97
+ });
98
+ // =============================================================================
99
+ // SCHEMAS & TYPES — Invariants
100
+ // =============================================================================
101
+ /** Invariant enforcement type — how the invariant is verified. */
102
+ export const InvariantEnforcementSchema = Schema.Literal(...INVARIANT_ENFORCEMENT_TYPES);
103
+ /** Invariant status. */
104
+ export const InvariantStatusSchema = Schema.Literal(...INVARIANT_STATUSES);
105
+ /** Invariant ID — branded string matching INV-[A-Z0-9-]+. */
106
+ export const InvariantIdSchema = Schema.String.pipe(Schema.pattern(/^INV-[A-Z0-9-]+$/), Schema.brand("InvariantId"));
107
+ /** Invariant entity — a machine-checkable system rule. */
108
+ export const InvariantSchema = Schema.Struct({
109
+ id: InvariantIdSchema,
110
+ rule: Schema.String,
111
+ enforcement: InvariantEnforcementSchema,
112
+ docId: DocIdSchema,
113
+ subsystem: Schema.NullOr(Schema.String),
114
+ testRef: Schema.NullOr(Schema.String),
115
+ lintRule: Schema.NullOr(Schema.String),
116
+ promptRef: Schema.NullOr(Schema.String),
117
+ status: InvariantStatusSchema,
118
+ createdAt: Schema.DateFromSelf,
119
+ metadata: Schema.Record({ key: Schema.String, value: Schema.Unknown }),
120
+ });
121
+ /** Invariant check result — audit trail entry. */
122
+ export const InvariantCheckSchema = Schema.Struct({
123
+ id: Schema.Number.pipe(Schema.int()),
124
+ invariantId: InvariantIdSchema,
125
+ passed: Schema.Boolean,
126
+ details: Schema.NullOr(Schema.String),
127
+ checkedAt: Schema.DateFromSelf,
128
+ durationMs: Schema.NullOr(Schema.Number.pipe(Schema.int())),
129
+ });
130
+ /** Input for upserting an invariant (from YAML sync). */
131
+ export const UpsertInvariantInputSchema = Schema.Struct({
132
+ id: Schema.String,
133
+ rule: Schema.String,
134
+ enforcement: InvariantEnforcementSchema,
135
+ docId: DocIdSchema,
136
+ subsystem: Schema.optional(Schema.NullOr(Schema.String)),
137
+ testRef: Schema.optional(Schema.NullOr(Schema.String)),
138
+ lintRule: Schema.optional(Schema.NullOr(Schema.String)),
139
+ promptRef: Schema.optional(Schema.NullOr(Schema.String)),
140
+ });
141
+ /** Input for recording an invariant check. */
142
+ export const RecordInvariantCheckInputSchema = Schema.Struct({
143
+ invariantId: Schema.String,
144
+ passed: Schema.Boolean,
145
+ details: Schema.optional(Schema.NullOr(Schema.String)),
146
+ durationMs: Schema.optional(Schema.NullOr(Schema.Number.pipe(Schema.int()))),
147
+ });
148
+ // =============================================================================
149
+ // RUNTIME VALIDATORS
150
+ // =============================================================================
151
+ /**
152
+ * Check if a string is a valid doc kind.
153
+ */
154
+ export const isValidDocKind = (kind) => {
155
+ return DOC_KINDS.includes(kind);
156
+ };
157
+ export class InvalidDocKindError extends Error {
158
+ kind;
159
+ constructor(kind) {
160
+ super(`Invalid doc kind: "${kind}". Valid kinds: ${DOC_KINDS.join(", ")}`);
161
+ this.kind = kind;
162
+ this.name = "InvalidDocKindError";
163
+ }
164
+ }
165
+ export const assertDocKind = (kind) => {
166
+ if (!isValidDocKind(kind)) {
167
+ throw new InvalidDocKindError(kind);
168
+ }
169
+ return kind;
170
+ };
171
+ /**
172
+ * Check if a string is a valid doc status.
173
+ */
174
+ export const isValidDocStatus = (status) => {
175
+ return DOC_STATUSES.includes(status);
176
+ };
177
+ export class InvalidDocStatusError extends Error {
178
+ status;
179
+ constructor(status) {
180
+ super(`Invalid doc status: "${status}". Valid statuses: ${DOC_STATUSES.join(", ")}`);
181
+ this.status = status;
182
+ this.name = "InvalidDocStatusError";
183
+ }
184
+ }
185
+ export const assertDocStatus = (status) => {
186
+ if (!isValidDocStatus(status)) {
187
+ throw new InvalidDocStatusError(status);
188
+ }
189
+ return status;
190
+ };
191
+ /**
192
+ * Check if a string is a valid doc link type.
193
+ */
194
+ export const isValidDocLinkType = (linkType) => {
195
+ return DOC_LINK_TYPES.includes(linkType);
196
+ };
197
+ export class InvalidDocLinkTypeError extends Error {
198
+ linkType;
199
+ constructor(linkType) {
200
+ super(`Invalid doc link type: "${linkType}". Valid types: ${DOC_LINK_TYPES.join(", ")}`);
201
+ this.linkType = linkType;
202
+ this.name = "InvalidDocLinkTypeError";
203
+ }
204
+ }
205
+ export const assertDocLinkType = (linkType) => {
206
+ if (!isValidDocLinkType(linkType)) {
207
+ throw new InvalidDocLinkTypeError(linkType);
208
+ }
209
+ return linkType;
210
+ };
211
+ // =============================================================================
212
+ // GRAPH TYPES (for dashboard viewer)
213
+ // =============================================================================
214
+ /** Node in the doc graph. */
215
+ export const DocGraphNodeSchema = Schema.Struct({
216
+ id: Schema.String,
217
+ label: Schema.String,
218
+ kind: Schema.Literal("overview", "prd", "design", "task"),
219
+ status: Schema.optional(Schema.String),
220
+ });
221
+ /** Edge in the doc graph. */
222
+ export const DocGraphEdgeSchema = Schema.Struct({
223
+ source: Schema.String,
224
+ target: Schema.String,
225
+ type: Schema.String,
226
+ });
227
+ /** Full doc graph (nodes + edges). */
228
+ export const DocGraphSchema = Schema.Struct({
229
+ nodes: Schema.Array(DocGraphNodeSchema),
230
+ edges: Schema.Array(DocGraphEdgeSchema),
231
+ });
232
+ //# sourceMappingURL=doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.js","sourceRoot":"","sources":["../src/doc.ts"],"names":[],"mappings":"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"}
@@ -2,35 +2,30 @@
2
2
  * File learning types for tx
3
3
  *
4
4
  * Type definitions for path-based knowledge storage.
5
- * Zero runtime dependencies - pure TypeScript types only.
6
- */
7
- /**
8
- * Branded type for file learning IDs.
9
- */
10
- export type FileLearningId = number & {
11
- readonly _brand: unique symbol;
12
- };
13
- /**
14
- * File learning entity - a note associated with a file pattern.
15
- */
16
- export interface FileLearning {
17
- readonly id: FileLearningId;
18
- readonly filePattern: string;
19
- readonly note: string;
20
- readonly taskId: string | null;
21
- readonly createdAt: Date;
22
- }
23
- /**
24
- * Input for creating a new file learning.
25
- */
26
- export interface CreateFileLearningInput {
27
- readonly filePattern: string;
28
- readonly note: string;
29
- readonly taskId?: string | null;
30
- }
31
- /**
32
- * Database row type for file learnings (snake_case from SQLite).
5
+ * Core type definitions using Effect Schema (Doctrine Rule 10).
6
+ * Schema definitions provide both compile-time types and runtime validation.
33
7
  */
8
+ import { Schema } from "effect";
9
+ /** File learning ID - branded integer. */
10
+ export declare const FileLearningIdSchema: Schema.brand<Schema.filter<typeof Schema.Number>, "FileLearningId">;
11
+ export type FileLearningId = typeof FileLearningIdSchema.Type;
12
+ /** File learning entity - a note associated with a file pattern. */
13
+ export declare const FileLearningSchema: Schema.Struct<{
14
+ id: Schema.brand<Schema.filter<typeof Schema.Number>, "FileLearningId">;
15
+ filePattern: typeof Schema.String;
16
+ note: typeof Schema.String;
17
+ taskId: Schema.NullOr<typeof Schema.String>;
18
+ createdAt: typeof Schema.DateFromSelf;
19
+ }>;
20
+ export type FileLearning = typeof FileLearningSchema.Type;
21
+ /** Input for creating a new file learning. */
22
+ export declare const CreateFileLearningInputSchema: Schema.Struct<{
23
+ filePattern: typeof Schema.String;
24
+ note: typeof Schema.String;
25
+ taskId: Schema.optional<Schema.NullOr<typeof Schema.String>>;
26
+ }>;
27
+ export type CreateFileLearningInput = typeof CreateFileLearningInputSchema.Type;
28
+ /** Database row type for file learnings (snake_case from SQLite). */
34
29
  export interface FileLearningRow {
35
30
  id: number;
36
31
  file_pattern: string;
@@ -1 +1 @@
1
- {"version":3,"file":"file-learning.d.ts","sourceRoot":"","sources":["../src/file-learning.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"file-learning.d.ts","sourceRoot":"","sources":["../src/file-learning.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAM/B,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,qEAGhC,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAA;AAE7D,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;;;EAM7B,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAEzD,8CAA8C;AAC9C,eAAO,MAAM,6BAA6B;;;;EAIxC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,OAAO,6BAA6B,CAAC,IAAI,CAAA;AAM/E,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -2,7 +2,27 @@
2
2
  * File learning types for tx
3
3
  *
4
4
  * Type definitions for path-based knowledge storage.
5
- * Zero runtime dependencies - pure TypeScript types only.
5
+ * Core type definitions using Effect Schema (Doctrine Rule 10).
6
+ * Schema definitions provide both compile-time types and runtime validation.
6
7
  */
7
- export {};
8
+ import { Schema } from "effect";
9
+ // =============================================================================
10
+ // SCHEMAS & TYPES
11
+ // =============================================================================
12
+ /** File learning ID - branded integer. */
13
+ export const FileLearningIdSchema = Schema.Number.pipe(Schema.int(), Schema.brand("FileLearningId"));
14
+ /** File learning entity - a note associated with a file pattern. */
15
+ export const FileLearningSchema = Schema.Struct({
16
+ id: FileLearningIdSchema,
17
+ filePattern: Schema.String,
18
+ note: Schema.String,
19
+ taskId: Schema.NullOr(Schema.String),
20
+ createdAt: Schema.DateFromSelf,
21
+ });
22
+ /** Input for creating a new file learning. */
23
+ export const CreateFileLearningInputSchema = Schema.Struct({
24
+ filePattern: Schema.String,
25
+ note: Schema.String,
26
+ taskId: Schema.optional(Schema.NullOr(Schema.String)),
27
+ });
8
28
  //# sourceMappingURL=file-learning.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-learning.js","sourceRoot":"","sources":["../src/file-learning.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"file-learning.js","sourceRoot":"","sources":["../src/file-learning.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACpD,MAAM,CAAC,GAAG,EAAE,EACZ,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAC/B,CAAA;AAGD,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,EAAE,EAAE,oBAAoB;IACxB,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,YAAY;CAC/B,CAAC,CAAA;AAGF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;IACzD,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACtD,CAAC,CAAA"}