create-principles-disciple 1.109.0 → 1.110.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/console/dist/server/config/pd-config-store.d.ts +29 -0
- package/console/dist/server/config/pd-config-store.js +55 -0
- package/console/dist/server/feedback/channels.d.ts +36 -0
- package/console/dist/server/feedback/channels.js +89 -0
- package/console/dist/server/feedback/github-adapter.d.ts +44 -0
- package/console/dist/server/feedback/github-adapter.js +125 -0
- package/console/dist/server/feedback/ingest-adapter.d.ts +45 -0
- package/console/dist/server/feedback/ingest-adapter.js +129 -0
- package/console/dist/server/feedback/submit-service.d.ts +44 -0
- package/console/dist/server/feedback/submit-service.js +177 -0
- package/console/dist/server/index.js +23 -7
- package/console/dist/server/models/FeedbackReportConsoleModel.d.ts +8 -0
- package/console/dist/server/models/FeedbackReportConsoleModel.js +45 -0
- package/console/dist/server/routes/feedback-reports.d.ts +24 -0
- package/console/dist/server/routes/feedback-reports.js +151 -0
- package/console/dist/ui/api.d.ts +11 -3
- package/console/dist/ui/api.js +25 -2
- package/console/dist/ui/i18n/en.json +48 -2
- package/console/dist/ui/i18n/zh-CN.json +48 -2
- package/console/dist/ui/pages/ReportProblemValidators.d.ts +30 -0
- package/console/dist/ui/pages/ReportProblemValidators.js +66 -0
- package/console/dist/ui/pages/activation/ActivationPage.js +14 -3
- package/console/dist/ui/pages/pain/PainPage.js +6 -1
- package/console/dist/ui/pages/principles/PrincipleDetailPage.js +4 -1
- package/console/dist/ui/pages/report-problem/ReportProblemPage.js +263 -70
- package/console/dist/ui/utils/validators.d.ts +22 -0
- package/console/dist/ui/utils/validators.js +66 -0
- package/console/dist/web/assets/app.css +42 -0
- package/console/dist/web/assets/app.js +699 -127
- package/console/package.json +4 -4
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +4 -0
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/feedback/__tests__/fingerprint.test.d.ts +2 -0
- package/core/dist/runtime-v2/feedback/__tests__/fingerprint.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/fingerprint.test.js +126 -0
- package/core/dist/runtime-v2/feedback/__tests__/fingerprint.test.js.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/slice1-typed-fields.test.d.ts +2 -0
- package/core/dist/runtime-v2/feedback/__tests__/slice1-typed-fields.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/slice1-typed-fields.test.js +278 -0
- package/core/dist/runtime-v2/feedback/__tests__/slice1-typed-fields.test.js.map +1 -0
- package/core/dist/runtime-v2/feedback/create-report.d.ts.map +1 -1
- package/core/dist/runtime-v2/feedback/create-report.js +38 -1
- package/core/dist/runtime-v2/feedback/create-report.js.map +1 -1
- package/core/dist/runtime-v2/feedback/feedback-types.d.ts +60 -0
- package/core/dist/runtime-v2/feedback/feedback-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/feedback/feedback-types.js +58 -0
- package/core/dist/runtime-v2/feedback/feedback-types.js.map +1 -1
- package/core/dist/runtime-v2/feedback/fingerprint.d.ts +31 -0
- package/core/dist/runtime-v2/feedback/fingerprint.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/fingerprint.js +51 -0
- package/core/dist/runtime-v2/feedback/fingerprint.js.map +1 -0
- package/core/dist/runtime-v2/feedback/index.d.ts +3 -2
- package/core/dist/runtime-v2/feedback/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/feedback/index.js +2 -1
- package/core/dist/runtime-v2/feedback/index.js.map +1 -1
- package/core/dist/runtime-v2/feedback/privacy-preview.d.ts.map +1 -1
- package/core/dist/runtime-v2/feedback/privacy-preview.js +43 -0
- package/core/dist/runtime-v2/feedback/privacy-preview.js.map +1 -1
- package/core/dist/runtime-v2/feedback/render-markdown.d.ts.map +1 -1
- package/core/dist/runtime-v2/feedback/render-markdown.js +33 -0
- package/core/dist/runtime-v2/feedback/render-markdown.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +2 -2
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +1 -1
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +25 -1
- package/dist/installer.js.map +1 -1
- package/dist/mvp-config.d.ts +6 -1
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +20 -1
- package/dist/mvp-config.js.map +1 -1
- package/package.json +1 -1
- package/plugin/dist/bundle.js +302 -302
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +2 -2
|
@@ -74,7 +74,7 @@ export const DEFAULT_FEATURE_FLAGS = [
|
|
|
74
74
|
{ id: 'story_a_approval_completion', category: 'quiet', enabled: true, since: '2026-06-18', description: 'Story A approval-completion orchestrator (PRI-408) — formal service replacing demo direct-writer activation; quiet flag, default on, disableable via config' },
|
|
75
75
|
// MVP-Quiet — opt-in or opt-out via config; enabled value varies per flag
|
|
76
76
|
// Only flags with real consumption paths are registered (PRI-239 constraint)
|
|
77
|
-
{ id: 'feedback_channel', category: 'quiet', enabled: true, since: '2026-06-01', description: 'MVP seed feedback channel — privacy-preserving report drafts' },
|
|
77
|
+
{ id: 'feedback_channel', category: 'quiet', enabled: true, since: '2026-06-01', description: 'MVP seed feedback channel — privacy-preserving report drafts. PRI-543: flag scope extended to also cover the feedback SUBMIT ladder (ingest relay / gh CLI / mailto / export-file channels + submit endpoints). Flag-off = submit endpoints 403 + submit UI hidden; config `feedback:` segment and channel parameters still available.' },
|
|
78
78
|
{ id: 'gfi', category: 'quiet', enabled: false, since: '2026-05-24', description: 'Global Friction Index session scoring' },
|
|
79
79
|
{ id: 'evolution_worker', category: 'quiet', enabled: false, since: '2026-06-01', description: 'Legacy evolution worker heartbeat (MVP-Quiet per ADR-0014 §2.5)' },
|
|
80
80
|
{ id: 'empathy_observer', category: 'quiet', enabled: false, since: '2026-06-02', description: 'Empathy observer service for sentiment checking (MVP-Quiet)' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flag-contract.js","sourceRoot":"","sources":["../../../src/runtime-v2/feature-flags/feature-flag-contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"feature-flag-contract.js","sourceRoot":"","sources":["../../../src/runtime-v2/feature-flags/feature-flag-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fingerprint.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/fingerprint.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fingerprint Tests — Feedback deduplication / clustering deterministic hash.
|
|
3
|
+
*
|
|
4
|
+
* Covers the pure functions in feedback/fingerprint.ts (Slice 1, PRI-543):
|
|
5
|
+
* - normalizeFeedbackTitle: lowercase → strip punctuation → collapse
|
|
6
|
+
* whitespace → trim → truncate to FEEDBACK_FINGERPRINT_TITLE_LIMIT
|
|
7
|
+
* - computeFeedbackFingerprint: sha256hex(`${type}|${area ?? general}|${normalize(title)}`)
|
|
8
|
+
*
|
|
9
|
+
* The shared cross-implementation test vectors below (CORE_VECTORS) are also
|
|
10
|
+
* consumed by the relay side (Workers WebCrypto subtle.digest, Slice 4) so that
|
|
11
|
+
* core node:crypto and relay WebCrypto agree on the exact same fingerprint.
|
|
12
|
+
* Do not change these inputs/outputs without updating the relay fixture too.
|
|
13
|
+
*
|
|
14
|
+
* ERR checklist:
|
|
15
|
+
* - EP-01 / ERR-001: inputs are plain strings; no untrusted-object traversal.
|
|
16
|
+
* - ERR-014: output length is bounded (sha256 → 64 hex chars).
|
|
17
|
+
* - ERR-007/009: empty / missing fields fail down deterministically, not by
|
|
18
|
+
* throwing; area defaults to FEEDBACK_FINGERPRINT_DEFAULT_AREA.
|
|
19
|
+
*/
|
|
20
|
+
import { describe, it, expect } from 'vitest';
|
|
21
|
+
import { createHash } from 'node:crypto';
|
|
22
|
+
import { computeFeedbackFingerprint, normalizeFeedbackTitle, FEEDBACK_FINGERPRINT_DEFAULT_AREA, FEEDBACK_FINGERPRINT_TITLE_LIMIT, } from '../fingerprint.js';
|
|
23
|
+
/**
|
|
24
|
+
* Shared cross-implementation vectors (also mirrored on the relay side).
|
|
25
|
+
* Each vector is a deterministic (type, area, title) → expected sha256 hex.
|
|
26
|
+
* These MUST stay in sync with the relay fixture (Slice 4) to prevent
|
|
27
|
+
* normalization drift between core node:crypto and Workers WebCrypto.
|
|
28
|
+
*/
|
|
29
|
+
const CORE_VECTORS = [
|
|
30
|
+
{
|
|
31
|
+
type: 'bug',
|
|
32
|
+
area: 'failed_tasks',
|
|
33
|
+
title: 'Peers never finish',
|
|
34
|
+
expected: createHash('sha256').update('bug|failed_tasks|peers never finish').digest('hex'),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'confusing',
|
|
38
|
+
area: undefined,
|
|
39
|
+
title: 'What does "ok" mean?',
|
|
40
|
+
expected: createHash('sha256').update('confusing|general|what does ok mean').digest('hex'),
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: 'feature_request',
|
|
44
|
+
area: 'principles',
|
|
45
|
+
title: '设置里无法保存 环境变量',
|
|
46
|
+
expected: createHash('sha256').update('feature_request|principles|设置里无法保存 环境变量').digest('hex'),
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
describe('normalizeFeedbackTitle', () => {
|
|
50
|
+
it('lowercases the title', () => {
|
|
51
|
+
expect(normalizeFeedbackTitle('HELLO World')).toBe('hello world');
|
|
52
|
+
});
|
|
53
|
+
it('strips punctuation', () => {
|
|
54
|
+
expect(normalizeFeedbackTitle('Hello, World!!!')).toBe('hello world');
|
|
55
|
+
});
|
|
56
|
+
it('collapses whitespace runs and trims', () => {
|
|
57
|
+
expect(normalizeFeedbackTitle(' hello world ')).toBe('hello world');
|
|
58
|
+
});
|
|
59
|
+
it('keeps CJK ideographs intact', () => {
|
|
60
|
+
expect(normalizeFeedbackTitle('设置里无法保存')).toBe('设置里无法保存');
|
|
61
|
+
});
|
|
62
|
+
it('keeps CJK amid punctuation (title: "设置, 保存!")', () => {
|
|
63
|
+
expect(normalizeFeedbackTitle('设置, 保存!')).toBe('设置 保存');
|
|
64
|
+
});
|
|
65
|
+
it('keeps digits and underscores (\\w covers `_`)', () => {
|
|
66
|
+
expect(normalizeFeedbackTitle('Step_1: retry 3x')).toBe('step_1 retry 3x');
|
|
67
|
+
});
|
|
68
|
+
it('replaces windows/path punctuation with spaces', () => {
|
|
69
|
+
expect(normalizeFeedbackTitle('Bug at C:\\Users\\alice')).toBe('bug at c users alice');
|
|
70
|
+
});
|
|
71
|
+
it('truncates to the title limit', () => {
|
|
72
|
+
const long = 'x'.repeat(FEEDBACK_FINGERPRINT_TITLE_LIMIT + 50);
|
|
73
|
+
const norm = normalizeFeedbackTitle(long);
|
|
74
|
+
expect(norm.length).toBe(FEEDBACK_FINGERPRINT_TITLE_LIMIT);
|
|
75
|
+
expect(norm).toBe('x'.repeat(FEEDBACK_FINGERPRINT_TITLE_LIMIT));
|
|
76
|
+
});
|
|
77
|
+
it('returns empty string for empty/whitespace-only input', () => {
|
|
78
|
+
expect(normalizeFeedbackTitle('')).toBe('');
|
|
79
|
+
expect(normalizeFeedbackTitle(' ')).toBe('');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('computeFeedbackFingerprint', () => {
|
|
83
|
+
it('is deterministic for identical input', () => {
|
|
84
|
+
const a = computeFeedbackFingerprint({ type: 'bug', title: 'Peers never finish', area: 'failed_tasks' });
|
|
85
|
+
const b = computeFeedbackFingerprint({ type: 'bug', title: 'Peers never finish', area: 'failed_tasks' });
|
|
86
|
+
expect(a).toBe(b);
|
|
87
|
+
});
|
|
88
|
+
it('is case-insensitive on type and title', () => {
|
|
89
|
+
const upper = computeFeedbackFingerprint({ type: 'BUG', title: 'PEERS NEVER FINISH', area: 'failed_tasks' });
|
|
90
|
+
const lower = computeFeedbackFingerprint({ type: 'bug', title: 'Peers never finish', area: 'failed_tasks' });
|
|
91
|
+
expect(upper).toBe(lower);
|
|
92
|
+
});
|
|
93
|
+
it('collapses title case differences (same area, title case-insensitive)', () => {
|
|
94
|
+
const a = computeFeedbackFingerprint({ type: 'bug', title: 'Title', area: 'failed_tasks' });
|
|
95
|
+
const b = computeFeedbackFingerprint({ type: 'bug', title: 'title', area: 'failed_tasks' });
|
|
96
|
+
expect(a).toBe(b);
|
|
97
|
+
});
|
|
98
|
+
it('defaults area to FEEDBACK_FINGERPRINT_DEFAULT_AREA when absent', () => {
|
|
99
|
+
const withArea = computeFeedbackFingerprint({ type: 'confusing', title: 'What does "ok" mean?', area: undefined });
|
|
100
|
+
const manual = createHash('sha256').update(`confusing|${FEEDBACK_FINGERPRINT_DEFAULT_AREA}|what does ok mean`).digest('hex');
|
|
101
|
+
expect(withArea).toBe(manual);
|
|
102
|
+
});
|
|
103
|
+
it('normalizes two differently-punctuated equivalent titles to the same fingerprint', () => {
|
|
104
|
+
const a = computeFeedbackFingerprint({ type: 'bug', title: 'Login fails: token expired!' });
|
|
105
|
+
const b = computeFeedbackFingerprint({ type: 'bug', title: 'login fails token expired' });
|
|
106
|
+
expect(a).toBe(b);
|
|
107
|
+
});
|
|
108
|
+
it('produces a 64-char lower-hex string', () => {
|
|
109
|
+
const fp = computeFeedbackFingerprint({ type: 'other', title: 'anything' });
|
|
110
|
+
expect(fp).toMatch(/^[0-9a-f]{64}$/);
|
|
111
|
+
});
|
|
112
|
+
it('distinguishes different types / areas / titles', () => {
|
|
113
|
+
const base = computeFeedbackFingerprint({ type: 'bug', area: 'a', title: 'same title' });
|
|
114
|
+
const diffType = computeFeedbackFingerprint({ type: 'confusing', area: 'a', title: 'same title' });
|
|
115
|
+
const diffArea = computeFeedbackFingerprint({ type: 'bug', area: 'b', title: 'same title' });
|
|
116
|
+
const diffTitle = computeFeedbackFingerprint({ type: 'bug', area: 'a', title: 'different title' });
|
|
117
|
+
expect(new Set([base, diffType, diffArea, diffTitle]).size).toBe(4);
|
|
118
|
+
});
|
|
119
|
+
it('round-trips all shared core vectors exactly (cross-implementation contract)', () => {
|
|
120
|
+
for (const v of CORE_VECTORS) {
|
|
121
|
+
const fp = computeFeedbackFingerprint({ type: v.type, area: v.area, title: v.title });
|
|
122
|
+
expect(fp).toBe(v.expected);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=fingerprint.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fingerprint.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/fingerprint.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice1-typed-fields.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/slice1-typed-fields.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 1 typed-field tests (PRI-543): frequency / blockingLevel / per-type
|
|
3
|
+
* conditional text fields (goal, stuckAt, job, currentWorkaround, sawWhat,
|
|
4
|
+
* whereSeen) and area. Verifies end-to-end from normalize → create → render:
|
|
5
|
+
* - normalizeFeedbackDraftInput accepts valid typed fields and rejects invalid ones
|
|
6
|
+
* - new text fields pass through the same redaction pipeline in createFeedbackReport
|
|
7
|
+
* - area propagates to report.area
|
|
8
|
+
* - renderReportMarkdown / buildEmailText render typed fields conditionally by type
|
|
9
|
+
* - old drafts (no new fields) still parse (no regression)
|
|
10
|
+
*
|
|
11
|
+
* ERR checklist:
|
|
12
|
+
* - EP-01 / ERR-001: input is passed as unknown; no `as` casts in tests.
|
|
13
|
+
* - ERR-003: redaction is segment-exact on the typed text fields.
|
|
14
|
+
* - ERR-009/010: invalid enum / non-string typed fields fail loud with reason + nextAction.
|
|
15
|
+
*/
|
|
16
|
+
import { describe, it, expect } from 'vitest';
|
|
17
|
+
import { normalizeFeedbackDraftInput, createFeedbackReport, renderReportMarkdown, computeFeedbackFingerprint, } from '../index.js';
|
|
18
|
+
const diagnostics = {};
|
|
19
|
+
function expectOk(input) {
|
|
20
|
+
const result = createFeedbackReport(input, diagnostics);
|
|
21
|
+
expect(result.ok).toBe(true);
|
|
22
|
+
if (!result.ok)
|
|
23
|
+
throw new Error('expected ok report');
|
|
24
|
+
return result.report;
|
|
25
|
+
}
|
|
26
|
+
const baseInput = {
|
|
27
|
+
type: 'confusing',
|
|
28
|
+
title: 'Can not save environment variable',
|
|
29
|
+
description: 'I tried to save an env var and nothing happened',
|
|
30
|
+
};
|
|
31
|
+
describe('normalizeFeedbackDraftInput — typed field validation', () => {
|
|
32
|
+
it('accepts typed text fields and area', () => {
|
|
33
|
+
const input = {
|
|
34
|
+
...baseInput,
|
|
35
|
+
area: 'principles',
|
|
36
|
+
goal: 'to set a default env var',
|
|
37
|
+
stuckAt: 'the save button',
|
|
38
|
+
};
|
|
39
|
+
const r = normalizeFeedbackDraftInput(input);
|
|
40
|
+
expect(r.ok).toBe(true);
|
|
41
|
+
if (r.ok) {
|
|
42
|
+
expect(r.value.area).toBe('principles');
|
|
43
|
+
expect(r.value.userText.goal).toBe('to set a default env var');
|
|
44
|
+
expect(r.value.userText.stuckAt).toBe('the save button');
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('accepts frequency and blockingLevel enums', () => {
|
|
48
|
+
const input = {
|
|
49
|
+
type: 'bug',
|
|
50
|
+
title: 'Runner crashes',
|
|
51
|
+
description: 'crashes on load',
|
|
52
|
+
frequency: 'always',
|
|
53
|
+
blockingLevel: 'blocked',
|
|
54
|
+
};
|
|
55
|
+
const r = normalizeFeedbackDraftInput(input);
|
|
56
|
+
expect(r.ok).toBe(true);
|
|
57
|
+
if (r.ok) {
|
|
58
|
+
expect(r.value.userText.frequency).toBe('always');
|
|
59
|
+
expect(r.value.userText.blockingLevel).toBe('blocked');
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
it('rejects invalid frequency', () => {
|
|
63
|
+
const input = {
|
|
64
|
+
type: 'bug',
|
|
65
|
+
title: 't',
|
|
66
|
+
description: 'd',
|
|
67
|
+
frequency: 'every_time',
|
|
68
|
+
};
|
|
69
|
+
const r = normalizeFeedbackDraftInput(input);
|
|
70
|
+
expect(r.ok).toBe(false);
|
|
71
|
+
if (!r.ok) {
|
|
72
|
+
const f = r.errors.find((e) => e.field === 'frequency');
|
|
73
|
+
expect(f).toBeDefined();
|
|
74
|
+
expect(f?.reason).toContain('always, often, sometimes, once');
|
|
75
|
+
expect(f?.nextAction).toBeTruthy();
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
it('rejects invalid blockingLevel', () => {
|
|
79
|
+
const input = {
|
|
80
|
+
type: 'bug',
|
|
81
|
+
title: 't',
|
|
82
|
+
description: 'd',
|
|
83
|
+
blockingLevel: 'severely',
|
|
84
|
+
};
|
|
85
|
+
const r = normalizeFeedbackDraftInput(input);
|
|
86
|
+
expect(r.ok).toBe(false);
|
|
87
|
+
if (!r.ok) {
|
|
88
|
+
const f = r.errors.find((e) => e.field === 'blockingLevel');
|
|
89
|
+
expect(f).toBeDefined();
|
|
90
|
+
expect(f?.reason).toContain('blocked, workaround, minor');
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
it('rejects non-string typed text field', () => {
|
|
94
|
+
const input = {
|
|
95
|
+
type: 'confusing',
|
|
96
|
+
title: 't',
|
|
97
|
+
description: 'd',
|
|
98
|
+
goal: 42,
|
|
99
|
+
};
|
|
100
|
+
const r = normalizeFeedbackDraftInput(input);
|
|
101
|
+
expect(r.ok).toBe(false);
|
|
102
|
+
if (!r.ok) {
|
|
103
|
+
const f = r.errors.find((e) => e.field === 'goal');
|
|
104
|
+
expect(f).toBeDefined();
|
|
105
|
+
expect(f?.reason).toContain('must be a string');
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
it('accepts a legacy draft with no new fields (no regression)', () => {
|
|
109
|
+
const r = normalizeFeedbackDraftInput(baseInput);
|
|
110
|
+
expect(r.ok).toBe(true);
|
|
111
|
+
if (r.ok) {
|
|
112
|
+
expect(r.value.area).toBeUndefined();
|
|
113
|
+
expect(r.value.userText.goal).toBeUndefined();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('createFeedbackReport — typed field propagation + redaction', () => {
|
|
118
|
+
it('carries typed text fields into userText', () => {
|
|
119
|
+
const report = expectOk({
|
|
120
|
+
...baseInput,
|
|
121
|
+
area: 'failed_tasks',
|
|
122
|
+
goal: 'to retry a failed task',
|
|
123
|
+
stuckAt: 'the retry button',
|
|
124
|
+
});
|
|
125
|
+
expect(report.area).toBe('failed_tasks');
|
|
126
|
+
expect(report.userText.goal).toBe('to retry a failed task');
|
|
127
|
+
expect(report.userText.stuckAt).toBe('the retry button');
|
|
128
|
+
});
|
|
129
|
+
it('redacts absolute paths inside typed text fields and records a note', () => {
|
|
130
|
+
const report = expectOk({
|
|
131
|
+
...baseInput,
|
|
132
|
+
goal: 'open the file at C:\\Users\\alice\\config.json',
|
|
133
|
+
});
|
|
134
|
+
expect(report.userText.goal).not.toContain('C:\\Users\\alice');
|
|
135
|
+
expect(report.privacy.redactionNotes.some((n) => n.startsWith('goal'))).toBe(true);
|
|
136
|
+
});
|
|
137
|
+
it('carries frequency and blockingLevel through to the report', () => {
|
|
138
|
+
const report = expectOk({
|
|
139
|
+
type: 'bug',
|
|
140
|
+
title: 't',
|
|
141
|
+
description: 'd',
|
|
142
|
+
frequency: 'sometimes',
|
|
143
|
+
blockingLevel: 'workaround',
|
|
144
|
+
});
|
|
145
|
+
expect(report.userText.frequency).toBe('sometimes');
|
|
146
|
+
expect(report.userText.blockingLevel).toBe('workaround');
|
|
147
|
+
});
|
|
148
|
+
it('does not set area when input omits it', () => {
|
|
149
|
+
const report = expectOk(baseInput);
|
|
150
|
+
expect(report.area).toBeUndefined();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('renderReportMarkdown — conditional typed sections', () => {
|
|
154
|
+
it('renders confusing sections only for confusing reports', () => {
|
|
155
|
+
const report = expectOk({
|
|
156
|
+
...baseInput,
|
|
157
|
+
goal: 'to do X',
|
|
158
|
+
stuckAt: 'step 2',
|
|
159
|
+
});
|
|
160
|
+
const md = report.outputs.markdown;
|
|
161
|
+
expect(md).toContain('What I wanted to do');
|
|
162
|
+
expect(md).toContain('to do X');
|
|
163
|
+
expect(md).toContain('Where I got stuck');
|
|
164
|
+
expect(md).not.toContain('Goal');
|
|
165
|
+
expect(md).not.toContain('Current workaround');
|
|
166
|
+
});
|
|
167
|
+
it('renders feature_request sections for feature_request reports', () => {
|
|
168
|
+
const report = expectOk({
|
|
169
|
+
type: 'feature_request',
|
|
170
|
+
title: 'want export',
|
|
171
|
+
description: 'd',
|
|
172
|
+
job: 'export the report to a file',
|
|
173
|
+
currentWorkaround: 'I screenshot it',
|
|
174
|
+
});
|
|
175
|
+
const md = report.outputs.markdown;
|
|
176
|
+
expect(md).toContain('Goal');
|
|
177
|
+
expect(md).toContain('export the report to a file');
|
|
178
|
+
expect(md).toContain('Current workaround');
|
|
179
|
+
expect(md).not.toContain('What I wanted to do');
|
|
180
|
+
});
|
|
181
|
+
it('renders privacy_concern sections for privacy_concern reports', () => {
|
|
182
|
+
const report = expectOk({
|
|
183
|
+
type: 'privacy_concern',
|
|
184
|
+
title: 'token visible',
|
|
185
|
+
description: 'd',
|
|
186
|
+
sawWhat: 'a bearer token',
|
|
187
|
+
whereSeen: 'the status page',
|
|
188
|
+
});
|
|
189
|
+
const md = report.outputs.markdown;
|
|
190
|
+
expect(md).toContain('What I saw');
|
|
191
|
+
expect(md).toContain('Where I saw it');
|
|
192
|
+
});
|
|
193
|
+
it('emits frequency / blockingLevel / area lines when present', () => {
|
|
194
|
+
const md = expectOk({
|
|
195
|
+
type: 'bug',
|
|
196
|
+
title: 't',
|
|
197
|
+
description: 'd',
|
|
198
|
+
area: 'failed_tasks',
|
|
199
|
+
frequency: 'always',
|
|
200
|
+
blockingLevel: 'blocked',
|
|
201
|
+
}).outputs.markdown;
|
|
202
|
+
expect(md).toContain('Frequency: `always`');
|
|
203
|
+
expect(md).toContain('Blocking level: `blocked`');
|
|
204
|
+
expect(md).toContain('Area: `failed_tasks`');
|
|
205
|
+
});
|
|
206
|
+
it('omits typed sections for the "other" type', () => {
|
|
207
|
+
const md = expectOk({
|
|
208
|
+
type: 'other',
|
|
209
|
+
title: 't',
|
|
210
|
+
description: 'just saying hi',
|
|
211
|
+
}).outputs.markdown;
|
|
212
|
+
expect(md).not.toContain('Current workaround');
|
|
213
|
+
expect(md).not.toContain('What I wanted to do');
|
|
214
|
+
});
|
|
215
|
+
it('does not render empty typed sections when fields are absent', () => {
|
|
216
|
+
const md = renderReportMarkdown(expectOk({
|
|
217
|
+
type: 'confusing',
|
|
218
|
+
title: 't',
|
|
219
|
+
description: 'no typed details',
|
|
220
|
+
}));
|
|
221
|
+
expect(md).not.toContain('What I wanted to do');
|
|
222
|
+
expect(md).not.toContain('Where I got stuck');
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('buildEmailText — conditional typed sections', () => {
|
|
226
|
+
it('renders confusing email sections', () => {
|
|
227
|
+
const report = expectOk({
|
|
228
|
+
...baseInput,
|
|
229
|
+
goal: 'to do X',
|
|
230
|
+
stuckAt: 'step 2',
|
|
231
|
+
});
|
|
232
|
+
const email = report.outputs.emailText;
|
|
233
|
+
expect(email).toContain('— What I wanted to do —');
|
|
234
|
+
expect(email).toContain('to do X');
|
|
235
|
+
expect(email).toContain('— Where I got stuck —');
|
|
236
|
+
});
|
|
237
|
+
it('renders feature_request email sections', () => {
|
|
238
|
+
const email = expectOk({
|
|
239
|
+
type: 'feature_request',
|
|
240
|
+
title: 'want export',
|
|
241
|
+
description: 'd',
|
|
242
|
+
job: 'export it',
|
|
243
|
+
currentWorkaround: 'screenshot',
|
|
244
|
+
}).outputs.emailText;
|
|
245
|
+
expect(email).toContain('— Goal —');
|
|
246
|
+
expect(email).toContain('— Current workaround —');
|
|
247
|
+
});
|
|
248
|
+
it('emits frequency / blockingLevel / area lines when present', () => {
|
|
249
|
+
const email = expectOk({
|
|
250
|
+
type: 'bug',
|
|
251
|
+
title: 't',
|
|
252
|
+
description: 'd',
|
|
253
|
+
area: 'failed_tasks',
|
|
254
|
+
frequency: 'often',
|
|
255
|
+
blockingLevel: 'minor',
|
|
256
|
+
}).outputs.emailText;
|
|
257
|
+
expect(email).toContain('Frequency: often');
|
|
258
|
+
expect(email).toContain('Blocking level: minor');
|
|
259
|
+
expect(email).toContain('Area: failed_tasks');
|
|
260
|
+
});
|
|
261
|
+
it('omits typed sections for "other" type', () => {
|
|
262
|
+
const email = expectOk({
|
|
263
|
+
type: 'other',
|
|
264
|
+
title: 't',
|
|
265
|
+
description: 'hi',
|
|
266
|
+
}).outputs.emailText;
|
|
267
|
+
expect(email).not.toContain('— Goal —');
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
describe('fingerprint used together with area in reports', () => {
|
|
271
|
+
it('computes a deterministic fingerprint for a reported entity area', () => {
|
|
272
|
+
const fp1 = computeFeedbackFingerprint({ type: 'bug', title: 'Peers never finish', area: 'failed_tasks' });
|
|
273
|
+
const fp2 = computeFeedbackFingerprint({ type: 'bug', title: ' Peers, never finish! ', area: 'failed_tasks' });
|
|
274
|
+
expect(fp1).toBe(fp2);
|
|
275
|
+
expect(fp1).toMatch(/^[0-9a-f]{64}$/);
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
//# sourceMappingURL=slice1-typed-fields.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice1-typed-fields.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/slice1-typed-fields.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-report.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/feedback/create-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,
|
|
1
|
+
{"version":3,"file":"create-report.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/feedback/create-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EAKd,eAAe,EAIhB,MAAM,qBAAqB,CAAC;AAkB7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAE7E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAiI7C;;;;;;;;GAQG;AAEH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,OAAO,EACpB,eAAe,CAAC,EAAE,MAAM,EACxB,sBAAsB,CAAC,EAAE,sBAAsB,GAC9C,kBAAkB,CA4MpB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// ERR-002: failure paths return {ok: false, errors: ValidationError[]}; success returns {ok: true, report: FeedbackReport}.
|
|
5
5
|
// ERR-003: redaction uses segment-exact key matching (handled by redact-sensitive).
|
|
6
6
|
// ERR-014/016/017: bounded previews, BigInt-safe safeStringifyPreview.
|
|
7
|
-
import { isRecord, isString, isUserSeverity, normalizeFeedbackDraftInput, } from './feedback-types.js';
|
|
7
|
+
import { isRecord, isString, isUserSeverity, isFeedbackFrequency, isFeedbackBlockingLevel, normalizeFeedbackDraftInput, } from './feedback-types.js';
|
|
8
8
|
import { redactAbsolutePaths, redactTokenLikeValues, redactEnvLikeValues, redactSensitiveFields, } from './redact-sensitive.js';
|
|
9
9
|
import { renderReportMarkdown } from './render-markdown.js';
|
|
10
10
|
import { buildGitHubIssueDraftUrl } from './render-github-url.js';
|
|
@@ -178,6 +178,24 @@ export function createFeedbackReport(input, diagnostics, maintainerEmail, pendin
|
|
|
178
178
|
if (typeof actualInput === 'string' && actualBehavior !== actualInput) {
|
|
179
179
|
redactionNotes.push('actualBehavior was redacted');
|
|
180
180
|
}
|
|
181
|
+
const typedTextFields = [
|
|
182
|
+
['goal', 'goal'],
|
|
183
|
+
['stuckAt', 'stuckAt'],
|
|
184
|
+
['job', 'job'],
|
|
185
|
+
['currentWorkaround', 'currentWorkaround'],
|
|
186
|
+
['sawWhat', 'sawWhat'],
|
|
187
|
+
['whereSeen', 'whereSeen'],
|
|
188
|
+
];
|
|
189
|
+
const redactedTyped = {};
|
|
190
|
+
for (const [key, label] of typedTextFields) {
|
|
191
|
+
const raw = draft.userText[key];
|
|
192
|
+
if (typeof raw !== 'string' || raw.length === 0)
|
|
193
|
+
continue;
|
|
194
|
+
const scrubbed = redactAbsolutePaths(redactTokenLikeValues(redactEnvLikeValues(raw)));
|
|
195
|
+
redactedTyped[key] = scrubbed;
|
|
196
|
+
if (scrubbed !== raw)
|
|
197
|
+
redactionNotes.push(`${label} was redacted (paths/tokens/env values)`);
|
|
198
|
+
}
|
|
181
199
|
// Task 13: If taskId is provided and a pending agent draft exists, merge it.
|
|
182
200
|
// User-provided agentDraft (from input.agentDraft) takes priority — the
|
|
183
201
|
// agent draft from the store is a fallback for when the user didn't write one.
|
|
@@ -256,6 +274,23 @@ export function createFeedbackReport(input, diagnostics, maintainerEmail, pendin
|
|
|
256
274
|
userText.actualBehavior = actualBehavior;
|
|
257
275
|
if (isUserSeverity(draft.userText.userSeverity))
|
|
258
276
|
userText.userSeverity = draft.userText.userSeverity;
|
|
277
|
+
// ── 类型化新字段(Slice 1, PRI-543)──
|
|
278
|
+
if (draft.userText.goal !== undefined)
|
|
279
|
+
userText.goal = redactedTyped.goal;
|
|
280
|
+
if (draft.userText.stuckAt !== undefined)
|
|
281
|
+
userText.stuckAt = redactedTyped.stuckAt;
|
|
282
|
+
if (draft.userText.job !== undefined)
|
|
283
|
+
userText.job = redactedTyped.job;
|
|
284
|
+
if (draft.userText.currentWorkaround !== undefined)
|
|
285
|
+
userText.currentWorkaround = redactedTyped.currentWorkaround;
|
|
286
|
+
if (draft.userText.sawWhat !== undefined)
|
|
287
|
+
userText.sawWhat = redactedTyped.sawWhat;
|
|
288
|
+
if (draft.userText.whereSeen !== undefined)
|
|
289
|
+
userText.whereSeen = redactedTyped.whereSeen;
|
|
290
|
+
if (isFeedbackFrequency(draft.userText.frequency))
|
|
291
|
+
userText.frequency = draft.userText.frequency;
|
|
292
|
+
if (isFeedbackBlockingLevel(draft.userText.blockingLevel))
|
|
293
|
+
userText.blockingLevel = draft.userText.blockingLevel;
|
|
259
294
|
const id = generateReportId();
|
|
260
295
|
const createdAt = new Date().toISOString();
|
|
261
296
|
// Step 9: render markdown and email text. Renderers mutate privacy.redactionNotes
|
|
@@ -271,6 +306,8 @@ export function createFeedbackReport(input, diagnostics, maintainerEmail, pendin
|
|
|
271
306
|
privacy,
|
|
272
307
|
outputs: { markdown: '', emailText: '', githubIssueUrl: '', mailtoUrl: '' },
|
|
273
308
|
};
|
|
309
|
+
if (draft.area !== undefined)
|
|
310
|
+
report.area = draft.area;
|
|
274
311
|
// Surface the agent-attached evidence in the report so it propagates to
|
|
275
312
|
// markdown, emailText, and any later consumer.
|
|
276
313
|
// Redact sensitive values (paths/tokens/env) from agentDraft string fields.
|