@cat-factory/contracts 0.177.0 → 0.179.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.
@@ -51,6 +51,12 @@ export declare const brainstormSessionSchema: v.ObjectSchema<{
51
51
  readonly iteration: v.OptionalSchema<v.NumberSchema<undefined>, 1>;
52
52
  /** The agent-pass budget, snapshotted from the task's merge preset when the session started. */
53
53
  readonly maxIterations: v.OptionalSchema<v.NumberSchema<undefined>, 1>;
54
+ /**
55
+ * Monotonic optimistic-concurrency token — see {@link requirementReviewSchema}'s `rev`. Every
56
+ * mutation re-reads, re-applies and `compareAndSwap`s on it, so concurrent edits to different
57
+ * options can't clobber each other. Absent reads as 0.
58
+ */
59
+ readonly rev: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
54
60
  readonly createdAt: v.NumberSchema<undefined>;
55
61
  readonly updatedAt: v.NumberSchema<undefined>;
56
62
  }, undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"brainstorm.d.ts","sourceRoot":"","sources":["../src/brainstorm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AA0B5B,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,+DAA+C,CAAA;AACjF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB;;;;;;;;;;;aAA8B,CAAA;AAC/D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,4GAAgC,CAAA;AACnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,uEAAuE;AACvE,eAAO,MAAM,uBAAuB;;;IAGlC,wFAAwF;;;;;;;;;;;;;;;IAIxF,mFAAmF;;IAEnF;;;;;OAKG;;IAEH,+EAA+E;;IAE/E,gGAAgG;;;;aAIhG,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAI7E,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB;;aAEpC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEtF,qEAAqE;AACrE,eAAO,MAAM,gCAAgC;;aAE3C,CAAA;AACF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAEpG;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;aAEtC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE1F,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B;;aAE1C,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAClG,MAAM,MAAM,+BAA+B,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"brainstorm.d.ts","sourceRoot":"","sources":["../src/brainstorm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AA0B5B,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,+DAA+C,CAAA;AACjF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB;;;;;;;;;;;aAA8B,CAAA;AAC/D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,4GAAgC,CAAA;AACnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,uEAAuE;AACvE,eAAO,MAAM,uBAAuB;;;IAGlC,wFAAwF;;;;;;;;;;;;;;;IAIxF,mFAAmF;;IAEnF;;;;;OAKG;;IAEH,+EAA+E;;IAE/E,gGAAgG;;IAEhG;;;;OAIG;;;;aAIH,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAI7E,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB;;aAEpC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEtF,qEAAqE;AACrE,eAAO,MAAM,gCAAgC;;aAE3C,CAAA;AACF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAEpG;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;aAEtC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE1F,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B;;aAE1C,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAClG,MAAM,MAAM,+BAA+B,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAA"}
@@ -49,6 +49,12 @@ export const brainstormSessionSchema = v.object({
49
49
  iteration: v.optional(v.number(), 1),
50
50
  /** The agent-pass budget, snapshotted from the task's merge preset when the session started. */
51
51
  maxIterations: v.optional(v.number(), 1),
52
+ /**
53
+ * Monotonic optimistic-concurrency token — see {@link requirementReviewSchema}'s `rev`. Every
54
+ * mutation re-reads, re-applies and `compareAndSwap`s on it, so concurrent edits to different
55
+ * options can't clobber each other. Absent reads as 0.
56
+ */
57
+ rev: v.optional(v.number(), 0),
52
58
  createdAt: v.number(),
53
59
  updatedAt: v.number(),
54
60
  });
@@ -1 +1 @@
1
- {"version":3,"file":"brainstorm.js","sourceRoot":"","sources":["../src/brainstorm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brainstorm.js","sourceRoot":"","sources":["../src/brainstorm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ import * as v from 'valibot';
2
+ /**
3
+ * One selectable board on a tracker — a Jira project, a Linear team, a GitHub repository.
4
+ * `id` is vendor-shaped and handed straight back as the hunt's board scope, so the SPA
5
+ * never has to know which of the three notions a source uses.
6
+ */
7
+ export declare const trackerBoardSchema: v.ObjectSchema<{
8
+ readonly id: v.StringSchema<undefined>;
9
+ readonly name: v.StringSchema<undefined>;
10
+ /** A short vendor-side key/slug shown beside the name to disambiguate (may be empty). */
11
+ readonly key: v.StringSchema<undefined>;
12
+ }, undefined>;
13
+ export type TrackerBoard = v.InferOutput<typeof trackerBoardSchema>;
14
+ export declare const trackerBoardsViewSchema: v.ObjectSchema<{
15
+ readonly source: v.PicklistSchema<["jira", "github", "linear"], undefined>;
16
+ readonly boards: v.ArraySchema<v.ObjectSchema<{
17
+ readonly id: v.StringSchema<undefined>;
18
+ readonly name: v.StringSchema<undefined>;
19
+ /** A short vendor-side key/slug shown beside the name to disambiguate (may be empty). */
20
+ readonly key: v.StringSchema<undefined>;
21
+ }, undefined>, undefined>;
22
+ }, undefined>;
23
+ export type TrackerBoardsView = v.InferOutput<typeof trackerBoardsViewSchema>;
24
+ /** How sure the ranking model is about a candidate's assessment. */
25
+ export declare const bugHuntConfidenceSchema: v.PicklistSchema<["high", "medium", "low"], undefined>;
26
+ export type BugHuntConfidence = v.InferOutput<typeof bugHuntConfidenceSchema>;
27
+ /**
28
+ * The model's assessment of ONE candidate. `impact` and `complexity` are 1–5 judgements;
29
+ * `score` is NOT the model's — it is computed deterministically from the two, so the
30
+ * ordering is reproducible and a model that can't do arithmetic can't reorder the list.
31
+ */
32
+ export declare const bugHuntAnalysisSchema: v.ObjectSchema<{
33
+ /** How much fixing this bug is worth (1 = cosmetic, 5 = users blocked). */
34
+ readonly impact: v.NumberSchema<undefined>;
35
+ /** How hard the fix looks (1 = a contained change, 5 = deep or unclear). */
36
+ readonly complexity: v.NumberSchema<undefined>;
37
+ /** Impact per unit of effort, computed by `bugHuntScore` — never taken from the model. */
38
+ readonly score: v.NumberSchema<undefined>;
39
+ readonly confidence: v.PicklistSchema<["high", "medium", "low"], undefined>;
40
+ /** One or two sentences on why this ratio — the reason a human can argue with. */
41
+ readonly rationale: v.StringSchema<undefined>;
42
+ /** Whether the model would actually pick this one up now. */
43
+ readonly recommended: v.BooleanSchema<undefined>;
44
+ }, undefined>;
45
+ export type BugHuntAnalysis = v.InferOutput<typeof bugHuntAnalysisSchema>;
46
+ /**
47
+ * One open bug read off a tracker board — the FACTS, all of them provider-supplied. Richer
48
+ * than a `TaskSearchResult` (which is deliberately lean for a picker row) but still bounded:
49
+ * a provider gathers the whole candidate set in ONE vendor call, so a 40-candidate hunt costs
50
+ * one request, and `description` is truncated because the ranking only needs enough of the
51
+ * report to judge impact and effort.
52
+ */
53
+ export declare const bugCandidateSchema: v.ObjectSchema<{
54
+ readonly source: v.PicklistSchema<["jira", "github", "linear"], undefined>;
55
+ /** The source's canonical key for the issue (a valid import ref). */
56
+ readonly externalId: v.StringSchema<undefined>;
57
+ readonly title: v.StringSchema<undefined>;
58
+ readonly url: v.StringSchema<undefined>;
59
+ /** Workflow status name (may be empty). */
60
+ readonly status: v.StringSchema<undefined>;
61
+ /** Issue type name (may be empty for sources with no type notion). */
62
+ readonly type: v.StringSchema<undefined>;
63
+ /** Priority name, or null when the source records none. */
64
+ readonly priority: v.NullableSchema<v.StringSchema<undefined>, undefined>;
65
+ readonly labels: v.ArraySchema<v.StringSchema<undefined>, undefined>;
66
+ /** A truncated excerpt of the issue body (may be empty). */
67
+ readonly description: v.StringSchema<undefined>;
68
+ /** ISO-8601 creation timestamp (empty when the source doesn't report one). */
69
+ readonly createdAt: v.StringSchema<undefined>;
70
+ /** How many comments the issue has accumulated — a cheap proxy for how contested it is. */
71
+ readonly commentCount: v.NumberSchema<undefined>;
72
+ }, undefined>;
73
+ export type BugCandidate = v.InferOutput<typeof bugCandidateSchema>;
74
+ /**
75
+ * One ranked candidate: the tracker facts plus the model's assessment, kept as separate
76
+ * halves on purpose. `analysis` is null for a candidate the ranking didn't cover — either the
77
+ * whole analysis was unavailable, or the model silently dropped that row. A missing
78
+ * assessment must read as "not assessed", never as a zero score.
79
+ */
80
+ export declare const bugHuntCandidateSchema: v.ObjectSchema<{
81
+ readonly source: v.PicklistSchema<["jira", "github", "linear"], undefined>;
82
+ /** The source's canonical key for the issue (a valid import ref). */
83
+ readonly externalId: v.StringSchema<undefined>;
84
+ readonly title: v.StringSchema<undefined>;
85
+ readonly url: v.StringSchema<undefined>;
86
+ /** Workflow status name (may be empty). */
87
+ readonly status: v.StringSchema<undefined>;
88
+ /** Issue type name (may be empty for sources with no type notion). */
89
+ readonly type: v.StringSchema<undefined>;
90
+ /** Priority name, or null when the source records none. */
91
+ readonly priority: v.NullableSchema<v.StringSchema<undefined>, undefined>;
92
+ readonly labels: v.ArraySchema<v.StringSchema<undefined>, undefined>;
93
+ /** A truncated excerpt of the issue body (may be empty). */
94
+ readonly description: v.StringSchema<undefined>;
95
+ /** ISO-8601 creation timestamp (empty when the source doesn't report one). */
96
+ readonly createdAt: v.StringSchema<undefined>;
97
+ /** How many comments the issue has accumulated — a cheap proxy for how contested it is. */
98
+ readonly commentCount: v.NumberSchema<undefined>;
99
+ readonly analysis: v.NullableSchema<v.ObjectSchema<{
100
+ /** How much fixing this bug is worth (1 = cosmetic, 5 = users blocked). */
101
+ readonly impact: v.NumberSchema<undefined>;
102
+ /** How hard the fix looks (1 = a contained change, 5 = deep or unclear). */
103
+ readonly complexity: v.NumberSchema<undefined>;
104
+ /** Impact per unit of effort, computed by `bugHuntScore` — never taken from the model. */
105
+ readonly score: v.NumberSchema<undefined>;
106
+ readonly confidence: v.PicklistSchema<["high", "medium", "low"], undefined>;
107
+ /** One or two sentences on why this ratio — the reason a human can argue with. */
108
+ readonly rationale: v.StringSchema<undefined>;
109
+ /** Whether the model would actually pick this one up now. */
110
+ readonly recommended: v.BooleanSchema<undefined>;
111
+ }, undefined>, undefined>;
112
+ }, undefined>;
113
+ export type BugHuntCandidate = v.InferOutput<typeof bugHuntCandidateSchema>;
114
+ /** Why a hunt came back without a ranking, so the UI states the limitation instead of implying one. */
115
+ export declare const bugHuntAnalysisStatusSchema: v.PicklistSchema<["ranked", "unavailable", "failed", "over_budget", "empty"], undefined>;
116
+ export type BugHuntAnalysisStatus = v.InferOutput<typeof bugHuntAnalysisStatusSchema>;
117
+ export declare const bugHuntResultSchema: v.ObjectSchema<{
118
+ readonly source: v.PicklistSchema<["jira", "github", "linear"], undefined>;
119
+ /** The board the hunt ran against, echoed back so a stale response is recognisable. */
120
+ readonly board: v.StringSchema<undefined>;
121
+ readonly analysisStatus: v.PicklistSchema<["ranked", "unavailable", "failed", "over_budget", "empty"], undefined>;
122
+ /** `provider:model` that produced the ranking, or null when there was none. */
123
+ readonly model: v.NullableSchema<v.StringSchema<undefined>, undefined>;
124
+ /** Candidates, best-scoring first; unassessed ones sort last. */
125
+ readonly candidates: v.ArraySchema<v.ObjectSchema<{
126
+ readonly source: v.PicklistSchema<["jira", "github", "linear"], undefined>;
127
+ /** The source's canonical key for the issue (a valid import ref). */
128
+ readonly externalId: v.StringSchema<undefined>;
129
+ readonly title: v.StringSchema<undefined>;
130
+ readonly url: v.StringSchema<undefined>;
131
+ /** Workflow status name (may be empty). */
132
+ readonly status: v.StringSchema<undefined>;
133
+ /** Issue type name (may be empty for sources with no type notion). */
134
+ readonly type: v.StringSchema<undefined>;
135
+ /** Priority name, or null when the source records none. */
136
+ readonly priority: v.NullableSchema<v.StringSchema<undefined>, undefined>;
137
+ readonly labels: v.ArraySchema<v.StringSchema<undefined>, undefined>;
138
+ /** A truncated excerpt of the issue body (may be empty). */
139
+ readonly description: v.StringSchema<undefined>;
140
+ /** ISO-8601 creation timestamp (empty when the source doesn't report one). */
141
+ readonly createdAt: v.StringSchema<undefined>;
142
+ /** How many comments the issue has accumulated — a cheap proxy for how contested it is. */
143
+ readonly commentCount: v.NumberSchema<undefined>;
144
+ readonly analysis: v.NullableSchema<v.ObjectSchema<{
145
+ /** How much fixing this bug is worth (1 = cosmetic, 5 = users blocked). */
146
+ readonly impact: v.NumberSchema<undefined>;
147
+ /** How hard the fix looks (1 = a contained change, 5 = deep or unclear). */
148
+ readonly complexity: v.NumberSchema<undefined>;
149
+ /** Impact per unit of effort, computed by `bugHuntScore` — never taken from the model. */
150
+ readonly score: v.NumberSchema<undefined>;
151
+ readonly confidence: v.PicklistSchema<["high", "medium", "low"], undefined>;
152
+ /** One or two sentences on why this ratio — the reason a human can argue with. */
153
+ readonly rationale: v.StringSchema<undefined>;
154
+ /** Whether the model would actually pick this one up now. */
155
+ readonly recommended: v.BooleanSchema<undefined>;
156
+ }, undefined>, undefined>;
157
+ }, undefined>, undefined>;
158
+ /**
159
+ * How many open unassigned bugs this hunt considered — the board search's result, bounded by
160
+ * the scan cap. It is what the truncation notice counts, so it is reported rather than left
161
+ * to be inferred from `candidates`.
162
+ */
163
+ readonly scanned: v.NumberSchema<undefined>;
164
+ /**
165
+ * Whether the board holds MORE matching bugs than the cap allowed in (detected by scanning one
166
+ * past it), so the list is a prefix rather than the whole board. Said out loud because a
167
+ * silently shortened list reads exactly like an exhaustive one.
168
+ */
169
+ readonly truncated: v.BooleanSchema<undefined>;
170
+ }, undefined>;
171
+ export type BugHuntResult = v.InferOutput<typeof bugHuntResultSchema>;
172
+ /**
173
+ * Run a hunt. `board` is the vendor-shaped id from {@link trackerBoardSchema} (or typed in
174
+ * by hand for a source whose boards can't be listed). The predicates default to the
175
+ * tracker's own bug convention — issue type `bug` — and are narrowable per hunt.
176
+ */
177
+ export declare const runBugHuntSchema: v.ObjectSchema<{
178
+ readonly board: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
179
+ /** Issue type to hunt; omitted → `bug`. Sources without a type notion ignore it. */
180
+ readonly issueType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 60, undefined>]>, undefined>;
181
+ /** Labels that must ALL be present. */
182
+ readonly labels: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 60, undefined>]>, undefined>, undefined>;
183
+ /** Substring that must appear in the issue title. */
184
+ readonly titleFragment: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 120, undefined>]>, undefined>;
185
+ }, undefined>;
186
+ export type RunBugHuntInput = v.InferOutput<typeof runBugHuntSchema>;
187
+ /**
188
+ * Adopt a confirmed candidate: import the issue, create a `bug` task from it inside
189
+ * `containerId`, link the issue for agent context, and start the bug-fix pipeline.
190
+ */
191
+ export declare const adoptBugHuntCandidateSchema: v.ObjectSchema<{
192
+ readonly externalId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
193
+ /** The service frame or module the new task is created in. */
194
+ readonly containerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
195
+ /** The pipeline to run; omitted → the built-in bug-fix pipeline. */
196
+ readonly pipelineId: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 120, undefined>]>, undefined>;
197
+ }, undefined>;
198
+ export type AdoptBugHuntCandidateInput = v.InferOutput<typeof adoptBugHuntCandidateSchema>;
199
+ //# sourceMappingURL=bug-hunt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bug-hunt.d.ts","sourceRoot":"","sources":["../src/bug-hunt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAe5B;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;IAG7B,yFAAyF;;aAEzF,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,uBAAuB;;;;;QALlC,yFAAyF;;;aAQzF,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,wDAAwC,CAAA;AAC5E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;IAChC,2EAA2E;;IAE3E,4EAA4E;;IAE5E,0FAA0F;;;IAG1F,kFAAkF;;IAElF,6DAA6D;;aAE7D,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;IAE7B,qEAAqE;;;;IAIrE,2CAA2C;;IAE3C,sEAAsE;;IAEtE,2DAA2D;;;IAG3D,4DAA4D;;IAE5D,8EAA8E;;IAE9E,2FAA2F;;aAE3F,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;IA1BjC,qEAAqE;;;;IAIrE,2CAA2C;;IAE3C,sEAAsE;;IAEtE,2DAA2D;;;IAG3D,4DAA4D;;IAE5D,8EAA8E;;IAE9E,2FAA2F;;;QAtC3F,2EAA2E;;QAE3E,4EAA4E;;QAE5E,0FAA0F;;;QAG1F,kFAAkF;;QAElF,6DAA6D;;;aA2C7D,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,uGAAuG;AACvG,eAAO,MAAM,2BAA2B,0FActC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF,eAAO,MAAM,mBAAmB;;IAE9B,uFAAuF;;;IAGvF,+EAA+E;;IAE/E,iEAAiE;;;QAzDjE,qEAAqE;;;;QAIrE,2CAA2C;;QAE3C,sEAAsE;;QAEtE,2DAA2D;;;QAG3D,4DAA4D;;QAE5D,8EAA8E;;QAE9E,2FAA2F;;;YAtC3F,2EAA2E;;YAE3E,4EAA4E;;YAE5E,0FAA0F;;;YAG1F,kFAAkF;;YAElF,6DAA6D;;;;IAyE7D;;;;OAIG;;IAEH;;;;OAIG;;aAEH,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAIrE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;IAE3B,oFAAoF;;IAEpF,uCAAuC;;IAEvC,qDAAqD;;aAErD,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEpE;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;IAEtC,8DAA8D;;IAE9D,oEAAoE;;aAEpE,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA"}
@@ -0,0 +1,150 @@
1
+ import * as v from 'valibot';
2
+ import { taskSourceKindSchema } from './tasks.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Bug-hunt wire contracts. A hunt is the INTERACTIVE dual of the recurring
5
+ // `bug-intake` step: a human picks a connected tracker and one of its boards, the
6
+ // backend reads that board's open + unassigned bugs, a model ranks them by impact
7
+ // against implementation complexity, and the human confirms one candidate — which is
8
+ // then adopted as a board task and driven through the standard bug-fix pipeline.
9
+ //
10
+ // The hunt itself is STATELESS: nothing is persisted, so there is no hunt table, no
11
+ // migration and no runtime-symmetry surface. The only durable effects happen at adopt
12
+ // time, and they are the ones that already exist (an imported issue, a board task, a run).
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * One selectable board on a tracker — a Jira project, a Linear team, a GitHub repository.
16
+ * `id` is vendor-shaped and handed straight back as the hunt's board scope, so the SPA
17
+ * never has to know which of the three notions a source uses.
18
+ */
19
+ export const trackerBoardSchema = v.object({
20
+ id: v.string(),
21
+ name: v.string(),
22
+ /** A short vendor-side key/slug shown beside the name to disambiguate (may be empty). */
23
+ key: v.string(),
24
+ });
25
+ export const trackerBoardsViewSchema = v.object({
26
+ source: taskSourceKindSchema,
27
+ boards: v.array(trackerBoardSchema),
28
+ });
29
+ /** How sure the ranking model is about a candidate's assessment. */
30
+ export const bugHuntConfidenceSchema = v.picklist(['high', 'medium', 'low']);
31
+ /**
32
+ * The model's assessment of ONE candidate. `impact` and `complexity` are 1–5 judgements;
33
+ * `score` is NOT the model's — it is computed deterministically from the two, so the
34
+ * ordering is reproducible and a model that can't do arithmetic can't reorder the list.
35
+ */
36
+ export const bugHuntAnalysisSchema = v.object({
37
+ /** How much fixing this bug is worth (1 = cosmetic, 5 = users blocked). */
38
+ impact: v.number(),
39
+ /** How hard the fix looks (1 = a contained change, 5 = deep or unclear). */
40
+ complexity: v.number(),
41
+ /** Impact per unit of effort, computed by `bugHuntScore` — never taken from the model. */
42
+ score: v.number(),
43
+ confidence: bugHuntConfidenceSchema,
44
+ /** One or two sentences on why this ratio — the reason a human can argue with. */
45
+ rationale: v.string(),
46
+ /** Whether the model would actually pick this one up now. */
47
+ recommended: v.boolean(),
48
+ });
49
+ /**
50
+ * One open bug read off a tracker board — the FACTS, all of them provider-supplied. Richer
51
+ * than a `TaskSearchResult` (which is deliberately lean for a picker row) but still bounded:
52
+ * a provider gathers the whole candidate set in ONE vendor call, so a 40-candidate hunt costs
53
+ * one request, and `description` is truncated because the ranking only needs enough of the
54
+ * report to judge impact and effort.
55
+ */
56
+ export const bugCandidateSchema = v.object({
57
+ source: taskSourceKindSchema,
58
+ /** The source's canonical key for the issue (a valid import ref). */
59
+ externalId: v.string(),
60
+ title: v.string(),
61
+ url: v.string(),
62
+ /** Workflow status name (may be empty). */
63
+ status: v.string(),
64
+ /** Issue type name (may be empty for sources with no type notion). */
65
+ type: v.string(),
66
+ /** Priority name, or null when the source records none. */
67
+ priority: v.nullable(v.string()),
68
+ labels: v.array(v.string()),
69
+ /** A truncated excerpt of the issue body (may be empty). */
70
+ description: v.string(),
71
+ /** ISO-8601 creation timestamp (empty when the source doesn't report one). */
72
+ createdAt: v.string(),
73
+ /** How many comments the issue has accumulated — a cheap proxy for how contested it is. */
74
+ commentCount: v.number(),
75
+ });
76
+ /**
77
+ * One ranked candidate: the tracker facts plus the model's assessment, kept as separate
78
+ * halves on purpose. `analysis` is null for a candidate the ranking didn't cover — either the
79
+ * whole analysis was unavailable, or the model silently dropped that row. A missing
80
+ * assessment must read as "not assessed", never as a zero score.
81
+ */
82
+ export const bugHuntCandidateSchema = v.object({
83
+ ...bugCandidateSchema.entries,
84
+ analysis: v.nullable(bugHuntAnalysisSchema),
85
+ });
86
+ /** Why a hunt came back without a ranking, so the UI states the limitation instead of implying one. */
87
+ export const bugHuntAnalysisStatusSchema = v.picklist([
88
+ /** The model ranked the candidates. */
89
+ 'ranked',
90
+ /** No ranking model is wired on this deployment. */
91
+ 'unavailable',
92
+ /** A model is wired but the assessment failed; the candidates are returned unranked. */
93
+ 'failed',
94
+ /**
95
+ * The workspace is over its spend budget, so the billable ranking call was not made. Distinct
96
+ * from `failed` because nothing is broken and the fix is a budget, not a credential.
97
+ */
98
+ 'over_budget',
99
+ /** Nothing to rank (the board had no matching open unassigned bugs). */
100
+ 'empty',
101
+ ]);
102
+ export const bugHuntResultSchema = v.object({
103
+ source: taskSourceKindSchema,
104
+ /** The board the hunt ran against, echoed back so a stale response is recognisable. */
105
+ board: v.string(),
106
+ analysisStatus: bugHuntAnalysisStatusSchema,
107
+ /** `provider:model` that produced the ranking, or null when there was none. */
108
+ model: v.nullable(v.string()),
109
+ /** Candidates, best-scoring first; unassessed ones sort last. */
110
+ candidates: v.array(bugHuntCandidateSchema),
111
+ /**
112
+ * How many open unassigned bugs this hunt considered — the board search's result, bounded by
113
+ * the scan cap. It is what the truncation notice counts, so it is reported rather than left
114
+ * to be inferred from `candidates`.
115
+ */
116
+ scanned: v.number(),
117
+ /**
118
+ * Whether the board holds MORE matching bugs than the cap allowed in (detected by scanning one
119
+ * past it), so the list is a prefix rather than the whole board. Said out loud because a
120
+ * silently shortened list reads exactly like an exhaustive one.
121
+ */
122
+ truncated: v.boolean(),
123
+ });
124
+ // ---- Request bodies -------------------------------------------------------
125
+ /**
126
+ * Run a hunt. `board` is the vendor-shaped id from {@link trackerBoardSchema} (or typed in
127
+ * by hand for a source whose boards can't be listed). The predicates default to the
128
+ * tracker's own bug convention — issue type `bug` — and are narrowable per hunt.
129
+ */
130
+ export const runBugHuntSchema = v.object({
131
+ board: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(200)),
132
+ /** Issue type to hunt; omitted → `bug`. Sources without a type notion ignore it. */
133
+ issueType: v.optional(v.pipe(v.string(), v.trim(), v.maxLength(60))),
134
+ /** Labels that must ALL be present. */
135
+ labels: v.optional(v.array(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(60)))),
136
+ /** Substring that must appear in the issue title. */
137
+ titleFragment: v.optional(v.pipe(v.string(), v.trim(), v.maxLength(120))),
138
+ });
139
+ /**
140
+ * Adopt a confirmed candidate: import the issue, create a `bug` task from it inside
141
+ * `containerId`, link the issue for agent context, and start the bug-fix pipeline.
142
+ */
143
+ export const adoptBugHuntCandidateSchema = v.object({
144
+ externalId: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(500)),
145
+ /** The service frame or module the new task is created in. */
146
+ containerId: v.pipe(v.string(), v.trim(), v.minLength(1)),
147
+ /** The pipeline to run; omitted → the built-in bug-fix pipeline. */
148
+ pipelineId: v.optional(v.pipe(v.string(), v.trim(), v.maxLength(120))),
149
+ });
150
+ //# sourceMappingURL=bug-hunt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bug-hunt.js","sourceRoot":"","sources":["../src/bug-hunt.ts"],"names":[],"mappings":"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"}
package/dist/clarity.d.ts CHANGED
@@ -46,6 +46,12 @@ export declare const clarityReviewSchema: v.ObjectSchema<{
46
46
  readonly iteration: v.OptionalSchema<v.NumberSchema<undefined>, 1>;
47
47
  /** The reviewer-pass budget, snapshotted from the task's merge preset when the review started. */
48
48
  readonly maxIterations: v.OptionalSchema<v.NumberSchema<undefined>, 1>;
49
+ /**
50
+ * Monotonic optimistic-concurrency token — see {@link requirementReviewSchema}'s `rev`. Every
51
+ * mutation re-reads, re-applies and `compareAndSwap`s on it, so concurrent edits to different
52
+ * findings can't clobber each other. Absent reads as 0.
53
+ */
54
+ readonly rev: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
49
55
  readonly createdAt: v.NumberSchema<undefined>;
50
56
  readonly updatedAt: v.NumberSchema<undefined>;
51
57
  }, undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"clarity.d.ts","sourceRoot":"","sources":["../src/clarity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAqB5B,+FAA+F;AAC/F,eAAO,MAAM,uBAAuB;;;;;;;;;;;aAA8B,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,iGAAiG;AACjG,eAAO,MAAM,yBAAyB,4GAAgC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF,gEAAgE;AAChE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;IAK9B,kFAAkF;;IAElF;;;;;OAKG;;IAEH,oFAAoF;;IAEpF,kGAAkG;;;;aAIlG,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAIrE,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB;;aAEjC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAEhF,uEAAuE;AACvE,eAAO,MAAM,6BAA6B;;aAExC,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAE9F;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;aAEnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEpF,2FAA2F;AAC3F,eAAO,MAAM,4BAA4B;;aAEvC,CAAA;AACF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAC5F,MAAM,MAAM,4BAA4B,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"clarity.d.ts","sourceRoot":"","sources":["../src/clarity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAqB5B,+FAA+F;AAC/F,eAAO,MAAM,uBAAuB;;;;;;;;;;;aAA8B,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,iGAAiG;AACjG,eAAO,MAAM,yBAAyB,4GAAgC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF,gEAAgE;AAChE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;IAK9B,kFAAkF;;IAElF;;;;;OAKG;;IAEH,oFAAoF;;IAEpF,kGAAkG;;IAElG;;;;OAIG;;;;aAIH,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAIrE,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB;;aAEjC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAEhF,uEAAuE;AACvE,eAAO,MAAM,6BAA6B;;aAExC,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAE9F;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;aAEnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEpF,2FAA2F;AAC3F,eAAO,MAAM,4BAA4B;;aAEvC,CAAA;AACF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAC5F,MAAM,MAAM,4BAA4B,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA"}
package/dist/clarity.js CHANGED
@@ -40,6 +40,12 @@ export const clarityReviewSchema = v.object({
40
40
  iteration: v.optional(v.number(), 1),
41
41
  /** The reviewer-pass budget, snapshotted from the task's merge preset when the review started. */
42
42
  maxIterations: v.optional(v.number(), 1),
43
+ /**
44
+ * Monotonic optimistic-concurrency token — see {@link requirementReviewSchema}'s `rev`. Every
45
+ * mutation re-reads, re-applies and `compareAndSwap`s on it, so concurrent edits to different
46
+ * findings can't clobber each other. Absent reads as 0.
47
+ */
48
+ rev: v.optional(v.number(), 0),
43
49
  createdAt: v.number(),
44
50
  updatedAt: v.number(),
45
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"clarity.js","sourceRoot":"","sources":["../src/clarity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAA;AAE9F,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,kFAAkF;AAClF,oFAAoF;AACpF,oFAAoF;AACpF,+EAA+E;AAC/E,mFAAmF;AACnF,+CAA+C;AAC/C,EAAE;AACF,oFAAoF;AACpF,iFAAiF;AACjF,gFAAgF;AAChF,8EAA8E;AAE9E,+FAA+F;AAC/F,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAA;AAGlE,iGAAiG;AACjG,MAAM,CAAC,MAAM,yBAAyB,GAAG,6BAA6B,CAAA;AAGtE,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,yBAAyB;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IACvC,kFAAkF;IAClF,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,oFAAoF;IACpF,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,kGAAkG;IAClG,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA;AAGF,8EAA8E;AAE9E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC,CAAA;AAGF,uEAAuE;AACvE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;CAClE,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;CACtE,CAAC,CAAA;AAGF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,wBAAwB;CACjC,CAAC,CAAA"}
1
+ {"version":3,"file":"clarity.js","sourceRoot":"","sources":["../src/clarity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAA;AAE9F,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,kFAAkF;AAClF,oFAAoF;AACpF,oFAAoF;AACpF,+EAA+E;AAC/E,mFAAmF;AACnF,+CAA+C;AAC/C,EAAE;AACF,oFAAoF;AACpF,iFAAiF;AACjF,gFAAgF;AAChF,8EAA8E;AAE9E,+FAA+F;AAC/F,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAA;AAGlE,iGAAiG;AACjG,MAAM,CAAC,MAAM,yBAAyB,GAAG,6BAA6B,CAAA;AAGtE,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,yBAAyB;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IACvC,kFAAkF;IAClF,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,oFAAoF;IACpF,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,kGAAkG;IAClG,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC;;;;OAIG;IACH,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA;AAGF,8EAA8E;AAE9E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC,CAAA;AAGF,uEAAuE;AACvE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;CAClE,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;CACtE,CAAC,CAAA;AAGF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,wBAAwB;CACjC,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -25,6 +25,7 @@ export * from './provider-config.js';
25
25
  export * from './user-secret.js';
26
26
  export * from './documents.js';
27
27
  export * from './tasks.js';
28
+ export * from './bug-hunt.js';
28
29
  export * from './environments.js';
29
30
  export * from './preflights.js';
30
31
  export * from './stack-recipes.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -25,6 +25,7 @@ export * from './provider-config.js';
25
25
  export * from './user-secret.js';
26
26
  export * from './documents.js';
27
27
  export * from './tasks.js';
28
+ export * from './bug-hunt.js';
28
29
  export * from './environments.js';
29
30
  export * from './preflights.js';
30
31
  export * from './stack-recipes.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -217,6 +217,16 @@ export declare const requirementReviewSchema: v.ObjectSchema<{
217
217
  readonly createdAt: v.NumberSchema<undefined>;
218
218
  readonly updatedAt: v.NumberSchema<undefined>;
219
219
  }, undefined>, undefined>, readonly []>;
220
+ /**
221
+ * Monotonic optimistic-concurrency token, bumped by the store on every persisted write.
222
+ * A review is one JSON blob whose items/recommendations several writers touch at once (two
223
+ * people answering different findings; a human dismissing one while the durable driver's
224
+ * incorporation pass writes back), so a blind whole-row write silently drops the loser's
225
+ * edit. Every mutation instead re-reads, re-applies and `compareAndSwap`s on this value, and
226
+ * a lost race reloads rather than clobbers. Absent (a row written before the column existed)
227
+ * reads as 0.
228
+ */
229
+ readonly rev: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
220
230
  readonly createdAt: v.NumberSchema<undefined>;
221
231
  readonly updatedAt: v.NumberSchema<undefined>;
222
232
  }, undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../src/requirements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../src/requirements.ts"],"names":[],"mappings":"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"}
@@ -182,6 +182,16 @@ export const requirementReviewSchema = v.object({
182
182
  * the re-review item churn — see {@link requirementRecommendationSchema}. Empty by default.
183
183
  */
184
184
  recommendations: v.optional(v.array(requirementRecommendationSchema), []),
185
+ /**
186
+ * Monotonic optimistic-concurrency token, bumped by the store on every persisted write.
187
+ * A review is one JSON blob whose items/recommendations several writers touch at once (two
188
+ * people answering different findings; a human dismissing one while the durable driver's
189
+ * incorporation pass writes back), so a blind whole-row write silently drops the loser's
190
+ * edit. Every mutation instead re-reads, re-applies and `compareAndSwap`s on this value, and
191
+ * a lost race reloads rather than clobbers. Absent (a row written before the column existed)
192
+ * reads as 0.
193
+ */
194
+ rev: v.optional(v.number(), 0),
185
195
  createdAt: v.number(),
186
196
  updatedAt: v.number(),
187
197
  });
@@ -1 +1 @@
1
- {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../src/requirements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../src/requirements.ts"],"names":[],"mappings":"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"}