One source sync transaction must not expose an intermediate empty Vue data array when the source Collection has already published nonempty final rows. A synchronous watch(..., { flush: 'sync' }) is a public Vue observation. The oracle copies source rows into a plain array and compares each hook callback with the old or final public snapshot at that callback. It requires one callback containing the final rows. Its bounded histories cross insert, update, and nonterminal delete with a supplied Collection and an identity live query. Empty final results, multi-change transactions, query recompilation, and other framework schedulers remain outside this owner.
The six oracle cells all failed on baseline main. Every cell recorded [] while the source already contained the final nonempty rows. The checker rejects that forbidden value before it checks the callback count. Baseline emits two callbacks, with [] then the final rows. The same six passed after replacing internalData.length = 0; internalData.push(...rows) with one ref.value = Array.from(rows) assignment. The baseline implementation is the hostile wrong design: it reached the intended watcher checkpoint and failed by assertion, not by timeout or setup failure. The repaired cells each observed exactly one final data callback.
A separate focused RED found that a user query throwing Error('__DISABLED_QUERY__') was misclassified as disabled. Replacing the message match with a unique Symbol sentinel made that test GREEN. Null and undefined disabled queries still pass. The change also removes stack allocation for ordinary disable, while retaining a caught throw. It does not claim to fix debugger behavior for caught exceptions.
The array fix uses Vue ref, rather than the PR's proposed shallowRef. A temporary compatibility probe found that baseline reactive and repaired ref both expose deep reactive arrays, rows, and nested values; an in-place nested edit triggered a synchronous watcher in both. This behavior is not asserted as a supported Collection mutation path, but preserving it avoids a separate observable change. The old array spread is gone; the new Array.from assignment has no function-argument limit. Production diff at 7a67d6a2: 9 additions, 19 deletions, net −10 lines. Test and coverage text weight is separate.
A baseline diagnostic also established that markReady() changed the Vue hook status to ready before returning and that stopping a standalone effectScope prevented a later source insert from changing hook data. The shared Vue no-updates-after-unmount conformance scenario reaches the same disposal path. These results do not prove every delayed callback schedule.
| ID | Original claim or suggestion | Verdict and disposition | Durable destination |
|---|---|---|---|
| V01 | Broad Vue primitive refactor, no public API break | design-decision: two narrow defects confirmed; full refactor compatibility unproved | PR #1302 |
| V02 | Existing 30 tests, 18 new tests, shared utils, ~83→87% coverage | stale: historical PR counts; current suite differs | PR #1302 test plan |
| V03 | Deep Map proxying has O(N×M) cost and no utility | deferred: proxy wrapping is real; claimed cost unmeasured | PR #1302 performance proposal |
| V04 | Array clear+push exposes empty state; use shallowRef | fixed-now: six RED→GREEN cells; used deep ref to preserve behavior | Vue publication oracle |
| V05 | Sentinel throw/catch has stack, debugger, and string-match costs; use builder probe | fixed-now for collision and allocation via unique Symbol; debugger concern remains V16 | Focused Vue regression |
| V06 | getCurrentInstance/onUnmounted misses standalone scope cleanup and leaks | refuted on current main: scope stop disposes watchEffect observer | Vue conformance disposal scenario |
| V07 | Default GC retains ephemeral hooks; gcTime:1 is preferable | design-decision: no leak witness or approved lifetime policy | PR #1302 |
| V08 | Shared duck typing risks false positives; Vue should use instanceof | design-decision: no false-positive witness; a Vue-only identity rule diverges from shared helper | packages/db/src/live-query-adapter.ts, PR #1302 |
| V09 | nextTick leaves one-tick ready/loading mismatch | already-fixed: current observer path updates status synchronously in diagnostic | Vue readiness conformance |
| V10 | Add isEnabled computed field | deferred: additive convenience API, not reproduced defect | PR #1302 API proposal |
| V11 | Keep computed wrappers for API stability | already-fixed: preserved | Vue public types |
| V12 | Keep manual initialization plus initial-state subscription as safety net | already-fixed as preservation claim; rationale not independently proved | Vue startup conformance, PR #1302 |
| V13 | Test plan repeats counts and coverage claim | duplicate of V02 | PR #1302 |
| V14 | Shallow Map tracks operations without deep-proxying values | duplicate of V03; behavior true, benefit unmeasured | PR #1302 |
| V15 | Array reference assignment gives one notification and avoids deep proxies | duplicate of V04; one callback verified; deep proxy removal intentionally omitted | Vue publication oracle |
| V16 | Caught sentinel causes debugger stops and middleware fragility | deferred: no wrapped-error path or measured debugger impact; Symbol still throws | PR #1302 |
| V17 | Standalone scopes, SSR, and utilities need onScopeDispose | duplicate of V06; scope disposal already works in tested path | Vue conformance |
| V18 | Config gcTime should override default; precreated collections preserve theirs | duplicate of V07 | PR #1302 |
| V19 | Cross-realm instanceof caveat can be revisited | duplicate of V08; cross-copy interoperability is unsupported by current AGENTS.md | Shared helper, PR #1302 |
| V20 | Synchronous status avoids skeleton frame; stale callback guard needed | deferred: sync part already fixed; stale callback schedule not supplied | PR #1302 |
| V21 | isEnabled completes status predicates | duplicate of V10 | PR #1302 |
| V22 | Force startSync:true after config spread | already-fixed on current main | Existing Vue config tests |
| V23 | Patch changeset exists | already-fixed in PR head; bot metadata, not a product finding | PR #1302 changeset |
New finding S01 (outside the 23 raw claims): An application error with the internal disabled-marker text was swallowed. Baseline focused regression failed because useLiveQuery did not throw; the same regression passed with the unique Symbol sentinel. Its durable owner is packages/vue-db/tests/useLiveQuery.test.ts.
| Requirement | Outcome for the Vue publication oracle |
|---|---|
| ORC-001 | The law is the hook's coherent public data publication at a synchronous Vue watcher cut, motivated by the PR's explicit behavioral report. Six finite histories bound the claim; the omitted histories are named above and in the coverage map. |
| ORC-002 | Expected rows come from copied source Collection values, not the hook's array update, Vue ref, or observer classifier. |
| ORC-003 | The file names contract, model, grammar, production driver, and refinement check separately. |
| ORC-004 | Not triggered: fixed bounded matrix, no generated-history coverage claim. |
| ORC-005 | The driver invokes the real useLiveQuery overloads and source sync transaction; a synchronous public Vue watcher records every data callback and confirms source final state at each callback. |
| ORC-006 | Baseline clear+push is the hostile mutant. All six cells failed at the synchronous watcher content assertion on []; repaired cells passed. |
| ORC-007 | Not triggered: no important generated property or random campaign. |
| ORC-008 | Not triggered: the independent model is stateless copied rows. |
| ORC-009 | source Collection, sync transaction, and public snapshot follow the glossary; plain copied rows are a test-only projection. |
| ORC-010 | The driver captures the primary assertion failure, attempts all cleanup steps, and aggregates separate cleanup errors without erasing the primary cause. No cleanup fault was injected. |
| ORC-011 | No plausible shared semantic fault between copied source values and hook array notification was identified. The alternate supplied-Collection and identity-query paths exercise different hook inputs, but are not called independent semantic formulations. |
| ORC-012 | This versioned record ties the executable evidence to 7a67d6a2 and states contract × history × path × observation limits. The six-cell fix does not claim closure for untested Vue histories. |
The PR author identified a real, high-signal Vue publication defect and offered a repair with the right atomic shape. Their other proposals mix API design, unmeasured performance claims, and claims already addressed on current main. A narrow ref assignment preserves more behavior than the proposed shallowRef. As a reviewer sample, this artifact alone is insufficient to recommend hiring: the core observation is strong, but prioritization and evidence for the broader refactor are weak.
Loss audit: 23 raw items = 2 fixed-now + 6 already-fixed/stale + 1 refuted + 4 deferred + 3 design-decision + 7 duplicates. S01 is one additional, fixed-now finding. No raw item or bot comment was dropped. The deferred items have destinations in #1302; V20 specifically needs a held stale-callback schedule before any guard is justified.