@adobe/spacecat-shared-data-access 4.8.0 → 4.9.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.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [@adobe/spacecat-shared-data-access-v4.9.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-data-access-v4.8.0...@adobe/spacecat-shared-data-access-v4.9.0) (2026-07-15)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* **data-access:** guidance + feedback_subject_id + code-patch export gate for feedback ([#1809](https://github.com/adobe/spacecat-shared/issues/1809)) ([941b9f9](https://github.com/adobe/spacecat-shared/commit/941b9f92621df09a9ce887b70307f4c1261bfd37))
|
|
6
|
+
|
|
1
7
|
## [@adobe/spacecat-shared-data-access-v4.8.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-data-access-v4.7.0...@adobe/spacecat-shared-data-access-v4.8.0) (2026-07-14)
|
|
2
8
|
|
|
3
9
|
### Features
|
package/package.json
CHANGED
|
@@ -79,16 +79,19 @@ export const EXPORT_EXCLUDED_REJECTION_CATEGORIES = Object.freeze([
|
|
|
79
79
|
]);
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
*
|
|
83
|
-
* `training_opt_in = false
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
82
|
+
* HUMAN-authored fields stripped from the JSONL export for organizations with
|
|
83
|
+
* `training_opt_in = false`: the reviewer's written feedback (`detail_markdown`)
|
|
84
|
+
* and their hand-corrected patch (`edited_fix`). The AI-generated fields — the
|
|
85
|
+
* issue context (`guidance_markdown`) and the generated patch (`previous_fix`) —
|
|
86
|
+
* are ALWAYS exported (the Learning Agent needs the issue + generated patch to
|
|
87
|
+
* map a verdict to what was generated), as are verdict / signal / category /
|
|
88
|
+
* identity metadata. snake_case to match the JSONL row shape (and the
|
|
89
|
+
* feedback_event DB columns) — {@link toJsonlRow} uses this list to do the
|
|
90
|
+
* stripping, so the opt-out boundary is single-sourced here (SITES-43974).
|
|
87
91
|
*/
|
|
88
92
|
export const OPT_OUT_STRIPPED_FIELDS = Object.freeze([
|
|
89
|
-
'previous_fix',
|
|
90
|
-
'edited_fix',
|
|
91
93
|
'detail_markdown',
|
|
94
|
+
'edited_fix',
|
|
92
95
|
]);
|
|
93
96
|
|
|
94
97
|
/**
|
|
@@ -163,11 +166,17 @@ export function toReviewView(row, { includePatches = false } = {}) {
|
|
|
163
166
|
rejectionCategory: row.rejection_category ?? null,
|
|
164
167
|
stateTransition: row.state_transition ?? null,
|
|
165
168
|
tier: row.tier,
|
|
169
|
+
// Sub-item id (e.g. a CWV issue) this review is about; the Backoffice groups
|
|
170
|
+
// its per-issue "previous feedback" table on it. Always in the base view (the
|
|
171
|
+
// UI filters on it) — not gated behind includePatches. Null for
|
|
172
|
+
// whole-suggestion reviews.
|
|
173
|
+
feedbackSubjectId: row.feedback_subject_id ?? null,
|
|
166
174
|
};
|
|
167
175
|
|
|
168
176
|
if (includePatches) {
|
|
169
177
|
view.previousFix = row.previous_fix ?? null;
|
|
170
178
|
view.editedFix = row.edited_fix ?? null;
|
|
179
|
+
view.guidanceMarkdown = row.guidance_markdown ?? null;
|
|
171
180
|
}
|
|
172
181
|
|
|
173
182
|
return view;
|
|
@@ -175,14 +184,21 @@ export function toReviewView(row, { includePatches = false } = {}) {
|
|
|
175
184
|
|
|
176
185
|
/**
|
|
177
186
|
* Whether a raw `feedback_event` row should be exported to the Learning Agent
|
|
178
|
-
* corpus.
|
|
179
|
-
*
|
|
187
|
+
* corpus. Two gates (SITES-43974):
|
|
188
|
+
* 1. It must carry a generated code patch (`previous_fix`). The corpus is
|
|
189
|
+
* code-patch feedback; text-guidance-only reviews (no patch) are retained
|
|
190
|
+
* in Postgres but NOT exported — reserved for a future text-guidance corpus.
|
|
191
|
+
* 2. `product_bug` rejections are excluded (routed to Jira). NULL-category rows
|
|
192
|
+
* (approvals / uncategorised) ARE exported. See
|
|
193
|
+
* {@link EXPORT_EXCLUDED_REJECTION_CATEGORIES}.
|
|
180
194
|
*
|
|
181
195
|
* @param {object} row - a raw feedback_event row from PostgREST.
|
|
182
196
|
* @returns {boolean} true if the row should be exported.
|
|
183
197
|
*/
|
|
184
198
|
export function shouldExport(row) {
|
|
185
|
-
|
|
199
|
+
const hasCodePatch = row.previous_fix != null;
|
|
200
|
+
return hasCodePatch
|
|
201
|
+
&& !EXPORT_EXCLUDED_REJECTION_CATEGORIES.includes(row.rejection_category);
|
|
186
202
|
}
|
|
187
203
|
|
|
188
204
|
/**
|
|
@@ -190,8 +206,10 @@ export function shouldExport(row) {
|
|
|
190
206
|
* object — the canonical Learning Agent export contract. The row mirrors the
|
|
191
207
|
* feedback_event columns (snake_case), stamped with {@link SCHEMA_VERSION} and
|
|
192
208
|
* the derived `verdict`. For organizations that have NOT opted into training,
|
|
193
|
-
* the
|
|
194
|
-
*
|
|
209
|
+
* the HUMAN-authored fields in {@link OPT_OUT_STRIPPED_FIELDS} are nulled; the
|
|
210
|
+
* AI-generated issue context (`guidance_markdown`) + generated patch
|
|
211
|
+
* (`previous_fix`) and the verdict / signal / category / identity metadata still
|
|
212
|
+
* ship (§10.5.7).
|
|
195
213
|
*
|
|
196
214
|
* This is the single source of truth for the JSONL row shape — the exporter
|
|
197
215
|
* (spacecat-jobs-dispatcher) calls it rather than re-deriving the contract.
|
|
@@ -218,6 +236,7 @@ export function toJsonlRow(row, { optedIn = false } = {}) {
|
|
|
218
236
|
state_transition: row.state_transition ?? null,
|
|
219
237
|
tier: row.tier,
|
|
220
238
|
detail_markdown: row.detail_markdown ?? null,
|
|
239
|
+
guidance_markdown: row.guidance_markdown ?? null,
|
|
221
240
|
previous_fix: row.previous_fix ?? null,
|
|
222
241
|
edited_fix: row.edited_fix ?? null,
|
|
223
242
|
};
|
|
@@ -53,8 +53,10 @@ export interface ReviewView {
|
|
|
53
53
|
rejectionCategory: string | null;
|
|
54
54
|
stateTransition: string | null;
|
|
55
55
|
tier: string;
|
|
56
|
+
feedbackSubjectId: string | null;
|
|
56
57
|
previousFix?: unknown;
|
|
57
58
|
editedFix?: unknown;
|
|
59
|
+
guidanceMarkdown?: string | null;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
/**
|