RUN v3.2.7 /tmp/circe-postmerge-regressions ❯ postmerge-kernel.test.ts (3 tests | 3 failed) 15ms × post-merge kernel durability regressions > does not expose mutable in-memory journal history 6ms → expected [ { kind: 'input', …(2) }, …(1) ] to deeply equal [ { kind: 'input', …(2) } ] × every crash prefix recovers a select input once 6ms → crash after record 8: expected 'referent:1' to be 'referent:2' // Object.is equality × every crash prefix recovers a clear-selection input once 2ms → crash after record 8: expected 'referent:1' to be undefined // Object.is equality ❯ postmerge-context.test.ts (5 tests | 3 failed) 24ms × post-merge context invariants > invalidates a frame-grounded belief when any candidate in its read set changes 16ms → expected undefined to be '2026-09-24T09:01:00.000Z' // Object.is equality × post-merge context invariants > returns an immutable frame snapshot whose content still matches its hash 2ms → expected false to be true // Object.is equality × checks frame dependencies without widening them: late-related 2ms → expected undefined to be '2026-09-24T09:00:00.000Z' // Object.is equality ✓ checks frame dependencies without widening them: unrelated 1ms ✓ checks frame dependencies without widening them: outside-frame 1ms ❯ postmerge-perception.test.ts (6 tests | 6 failed) 17ms × post-merge perception decoding > reads status once and never upgrades an ambiguous response 9ms → expected 3 to be 1 // Object.is equality × post-merge perception decoding > converts unreadable output into a structured decoding failure 1ms → unreadable × post-merge perception decoding > reads an answer identity once 1ms → expected undefined to be 'pick' // Object.is equality × post-merge perception decoding > reads score distribution entries once before validating their support 3ms → expected undefined to match object { probabilities: [ 1, +0 ] } × post-merge perception decoding > preserves prototype-named option probabilities as own data 1ms → expected [ { specId: 'pick', …(2) }, …(1) ] to deeply equal [] × post-merge perception decoding > does not mistake an inherited property for chosen-option probability 1ms → expected [] to deeply equal [ ObjectContaining{…} ] ⎯⎯⎯⎯⎯⎯ Failed Tests 12 ⎯⎯⎯⎯⎯⎯⎯ FAIL postmerge-context.test.ts > post-merge context invariants > invalidates a frame-grounded belief when any candidate in its read set changes AssertionError: expected undefined to be '2026-09-24T09:01:00.000Z' // Object.is equality - Expected: "2026-09-24T09:01:00.000Z" + Received: undefined ❯ postmerge-context.test.ts:60:59 58| recordObservation(store, b, "b2", "2026-09-24T09:01:00.000Z"); 59| 60| expect(store.annotation(annotationId)?.invalidatedAt).toBe("2026-0… | ^ 61| }); 62| ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/12]⎯ FAIL postmerge-context.test.ts > post-merge context invariants > returns an immutable frame snapshot whose content still matches its hash AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false ❯ postmerge-context.test.ts:78:36 76| ); 77| 78| expect(Object.isFrozen(frame)).toBe(true); | ^ 79| expect(Object.isFrozen(frame.candidates[0]?.attributes)).toBe(true… 80| expect(() => { ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/12]⎯ FAIL postmerge-context.test.ts > checks frame dependencies without widening them: late-related AssertionError: expected undefined to be '2026-09-24T09:00:00.000Z' // Object.is equality - Expected: "2026-09-24T09:00:00.000Z" + Received: undefined ❯ postmerge-context.test.ts:108:49 106| expect(store.annotation(id)?.invalidatedAt).toBeUndefined(); 107| } else { 108| expect(store.annotation(id)?.invalidatedAt).toBe(NOW); | ^ 109| } 110| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/12]⎯ FAIL postmerge-kernel.test.ts > post-merge kernel durability regressions > does not expose mutable in-memory journal history AssertionError: expected [ { kind: 'input', …(2) }, …(1) ] to deeply equal [ { kind: 'input', …(2) } ] - Expected + Received @@ -5,10 +5,22 @@ "observation": { "at": "2026-09-24T00:00:00.000Z", "event": { "action": "clear-selection", }, + "id": "rewritten", + "kind": "ui", + }, + }, + { + "at": "2026-09-24T00:00:00.000Z", + "kind": "input", + "observation": { + "at": "2026-09-24T00:00:00.000Z", + "event": { + "action": "clear-selection", + }, "id": "event:1", "kind": "ui", }, }, ] ❯ postmerge-kernel.test.ts:23:31 21| exposed.push(entry); 22| 23| expect(journal.entries()).toEqual([entry]); | ^ 24| }); 25| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/12]⎯ FAIL postmerge-kernel.test.ts > every crash prefix recovers a select input once AssertionError: crash after record 8: expected 'referent:1' to be 'referent:2' // Object.is equality Expected: "referent:2" Received: "referent:1" ❯ postmerge-kernel.test.ts:49:78 47| const recovered = uiRuntime(recoveredJournal); 48| await recovered.ingest(clear); 49| expect(recovered.state().currentReferentId, `crash after record ${… | ^ 50| expect([...recovered.state().scopes.values()], `scopes after recor… 51| } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/12]⎯ FAIL postmerge-kernel.test.ts > every crash prefix recovers a clear-selection input once AssertionError: crash after record 8: expected 'referent:1' to be undefined // Object.is equality - Expected: undefined + Received: "referent:1" ❯ postmerge-kernel.test.ts:49:78 47| const recovered = uiRuntime(recoveredJournal); 48| await recovered.ingest(clear); 49| expect(recovered.state().currentReferentId, `crash after record ${… | ^ 50| expect([...recovered.state().scopes.values()], `scopes after recor… 51| } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/12]⎯ FAIL postmerge-perception.test.ts > post-merge perception decoding > reads status once and never upgrades an ambiguous response AssertionError: expected 3 to be 1 // Object.is equality - Expected + Received - 1 + 3 ❯ postmerge-perception.test.ts:30:19 28| policy: ACCEPTANCE_POLICY_V1, now: "2026-09-24T00:00:00.000Z", 29| }); 30| expect(reads).toBe(1); | ^ 31| expect(run.status).toBe("AMBIGUOUS"); 32| expect(run.state.accepted.size).toBe(0); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/12]⎯ FAIL postmerge-perception.test.ts > post-merge perception decoding > converts unreadable output into a structured decoding failure Error: unreadable ❯ Object.get answers [as answers] postmerge-perception.test.ts:36:54 34| 35| it("converts unreadable output into a structured decoding failure", … 36| const raw = { ...result(), get answers() { throw new Error("unread… | ^ 37| const analysis = analyzePerceptionResult([spec], raw); 38| expect(analysis.decoded).toBeUndefined(); ❯ analyzePerceptionResult ../circe-main-audit-baseline/packages/perception/src/validation.ts:262:29 ❯ postmerge-perception.test.ts:37:22 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/12]⎯ FAIL postmerge-perception.test.ts > post-merge perception decoding > reads an answer identity once AssertionError: expected undefined to be 'pick' // Object.is equality - Expected: "pick" + Received: undefined ❯ postmerge-perception.test.ts:46:74 44| const raw = result(); 45| raw.answers[0] = { ...raw.answers[0]!, get id() { return ++reads =… 46| expect(analyzePerceptionResult([spec], raw).decoded?.answers[0]?.i… | ^ 47| expect(reads).toBe(1); 48| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/12]⎯ FAIL postmerge-perception.test.ts > post-merge perception decoding > reads score distribution entries once before validating their support AssertionError: expected undefined to match object { probabilities: [ 1, +0 ] } - Expected: { "probabilities": [ 1, 0, ], } + Received: undefined ❯ postmerge-perception.test.ts:56:71 54| const score: DecisionSpec = { id: "score", kind: "score", decision… 55| const raw = { ...result(), answers: [{ id: "score", kind: "score",… 56| expect(analyzePerceptionResult([score], raw).decoded?.answers[0]).… | ^ 57| expect(reads).toBe(1); 58| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/12]⎯ FAIL postmerge-perception.test.ts > post-merge perception decoding > preserves prototype-named option probabilities as own data AssertionError: expected [ { specId: 'pick', …(2) }, …(1) ] to deeply equal [] - Expected + Received - [] + [ + { + "detail": "choice probabilities do not sum to 1", + "kind": "distribution-not-normalized", + "specId": "pick", + }, + { + "detail": "confidence 1 exceeds the strongest option probability 0.000", + "kind": "inconsistent-confidence", + "specId": "pick", + }, + ] ❯ postmerge-perception.test.ts:63:60 61| const special: DecisionSpec = { ...spec, options: [{ id: "__proto_… 62| const raw = { ...result(), answers: [{ id: "pick", kind: "choice",… 63| expect(analyzePerceptionResult([special], raw).issues).toEqual([]); | ^ 64| }); 65| ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/12]⎯ FAIL postmerge-perception.test.ts > post-merge perception decoding > does not mistake an inherited property for chosen-option probability AssertionError: expected [] to deeply equal [ ObjectContaining{…} ] - Expected + Received - [ - ObjectContaining { - "kind": "invalid-choice", - }, - ] + [] ❯ postmerge-perception.test.ts:69:60 67| const special: DecisionSpec = { ...spec, options: [{ id: "__proto_… 68| const raw = { ...result(), answers: [{ id: "pick", kind: "choice",… 69| expect(analyzePerceptionResult([special], raw).issues).toEqual([ | ^ 70| expect.objectContaining({ kind: "invalid-choice" }), 71| ]); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/12]⎯ Test Files 3 failed (3) Tests 12 failed | 2 passed (14) Start at 03:42:19 Duration 541ms (transform 291ms, setup 0ms, collect 541ms, tests 56ms, environment 0ms, prepare 211ms)