diff --git a/src/core/cycle/propose-takes.ts b/src/core/cycle/propose-takes.ts
index 384147abf..f1a7b0e61 100644
--- a/src/core/cycle/propose-takes.ts
+++ b/src/core/cycle/propose-takes.ts
@@ -295,8 +295,6 @@ export function isWellFormedEmptyExtraction(raw: string): boolean {
export function parseExtractorOutput(raw: string): ProposedTake[] {
if (!raw || raw.trim().length === 0) return [];
let text = raw.trim();
- // Strip ... reasoning tags (MiniMax-M3, DeepSeek-R1, etc.).
- text = text.replace(/[\s\S]*?<\/think>/g, '').trim();
// Strip markdown code fence wrapper.
const fenced = text.match(/^```(?:json)?\s*\n?([\s\S]*?)\n?```$/);
if (fenced) text = (fenced[1] ?? '').trim();
@@ -309,21 +307,7 @@ export function parseExtractorOutput(raw: string): ProposedTake[] {
try {
parsed = JSON.parse(text.slice(start));
} catch {
- // Fallback: truncate at last ] or } to handle trailing noise (e.g. leftover
- // markdown fences after stripping). Try array-closing first.
- const sliced = text.slice(start);
- const lastArr = sliced.lastIndexOf(']');
- const lastObj = sliced.lastIndexOf('}');
- const end = Math.max(lastArr, lastObj);
- if (end > 0) {
- try {
- parsed = JSON.parse(sliced.slice(0, end + 1));
- } catch {
- return [];
- }
- } else {
- return [];
- }
+ return [];
}
const arr = Array.isArray(parsed) ? parsed : [parsed];
const out: ProposedTake[] = [];
diff --git a/test/propose-takes.test.ts b/test/propose-takes.test.ts
index 8430f2ed4..9b8bba307 100644
--- a/test/propose-takes.test.ts
+++ b/test/propose-takes.test.ts
@@ -170,26 +170,6 @@ describe('parseExtractorOutput', () => {
const out = parseExtractorOutput(raw);
expect(out[0]!.domain).toBe('macro');
});
-
- test('strips reasoning tags before parsing (MiniMax-M3, DeepSeek-R1)', () => {
- const raw = 'Analyzing the prose... I see several claims.\n\n```json\n[{"claim_text":"X","kind":"take","holder":"brain","weight":0.5}]\n```';
- const out = parseExtractorOutput(raw);
- expect(out).toHaveLength(1);
- expect(out[0]!.claim_text).toBe('X');
- });
-
- test('strips multiple blocks', () => {
- const raw = 'First thought.\n...\nSecond thought.\n\n[{"claim_text":"Y","kind":"bet","holder":"brain","weight":0.7}]';
- const out = parseExtractorOutput(raw);
- expect(out).toHaveLength(1);
- });
-
- test('handles trailing noise after JSON (leftover fences)', () => {
- const raw = 'done\n```json\n[{"claim_text":"Z","kind":"take","holder":"brain","weight":0.6}]\n```\n';
- const out = parseExtractorOutput(raw);
- expect(out).toHaveLength(1);
- expect(out[0]!.claim_text).toBe('Z');
- });
});
// ─── isWellFormedEmptyExtraction ────────────────────────────────────